Skip to content

Commit aa19393

Browse files
authored
Fix getArray mistake in CondIsTagged, add runtime error for bad namespace keys in ExprTag (#7474)
1 parent ed09bef commit aa19393

File tree

3 files changed

+30
-8
lines changed

3 files changed

+30
-8
lines changed

src/main/java/org/skriptlang/skript/bukkit/tags/elements/CondIsTagged.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public boolean init(Expression<?>[] expressions, int matchedPattern, Kleenean is
5353

5454
@Override
5555
public boolean check(Event event) {
56-
Tag<Keyed>[] tags = this.tags.getArray(event);
56+
Tag<Keyed>[] tags = this.tags.getAll(event);
5757
if (tags.length == 0)
5858
return isNegated();
5959
boolean and = this.tags.getAnd();

src/main/java/org/skriptlang/skript/bukkit/tags/elements/ExprTag.java

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.skriptlang.skript.bukkit.tags.elements;
22

33
import ch.njol.skript.Skript;
4+
import ch.njol.skript.config.Node;
45
import ch.njol.skript.doc.Description;
56
import ch.njol.skript.doc.Examples;
67
import ch.njol.skript.doc.Keywords;
@@ -22,6 +23,7 @@
2223
import org.skriptlang.skript.bukkit.tags.TagModule;
2324
import org.skriptlang.skript.bukkit.tags.TagType;
2425
import org.skriptlang.skript.bukkit.tags.sources.TagOrigin;
26+
import org.skriptlang.skript.log.runtime.SyntaxRuntimeErrorProducer;
2527

2628
import java.util.ArrayList;
2729
import java.util.List;
@@ -51,7 +53,7 @@
5153
@Since("2.10")
5254
@RequiredPlugins("Paper (paper tags)")
5355
@Keywords({"blocks", "minecraft tag", "type", "category"})
54-
public class ExprTag extends SimpleExpression<Tag> {
56+
public class ExprTag extends SimpleExpression<Tag> implements SyntaxRuntimeErrorProducer {
5557

5658
static {
5759
Skript.registerExpression(ExprTag.class, Tag.class, ExpressionType.COMBINED,
@@ -63,13 +65,16 @@ public class ExprTag extends SimpleExpression<Tag> {
6365
private TagOrigin origin;
6466
private boolean datapackOnly;
6567

68+
private Node node;
69+
6670
@Override
6771
public boolean init(Expression<?>[] expressions, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) {
6872
//noinspection unchecked
6973
names = (Expression<String>) expressions[0];
7074
types = TagType.fromParseMark(parseResult.mark);
7175
origin = TagOrigin.fromParseTags(parseResult.tags);
7276
datapackOnly = origin == TagOrigin.BUKKIT && parseResult.hasTag("datapack");
77+
node = getParser().getNode();
7378
return true;
7479
}
7580

@@ -87,14 +92,20 @@ public boolean init(Expression<?>[] expressions, int matchedPattern, Kleenean is
8792
nextName: for (String name : names) {
8893
// get key
8994
NamespacedKey key;
90-
if (name.contains(":")) {
91-
key = NamespacedKey.fromString(name);
92-
} else {
93-
// populate namespace if not provided
94-
key = new NamespacedKey(namespace, name);
95+
try {
96+
if (name.contains(":")) {
97+
key = NamespacedKey.fromString(name);
98+
} else {
99+
// populate namespace if not provided
100+
key = new NamespacedKey(namespace, name);
101+
}
102+
} catch (IllegalArgumentException e) {
103+
key = null;
95104
}
96-
if (key == null)
105+
if (key == null) {
106+
error("Invalid tag key: '" + name + "'. Tags may only contain a-z, 0-9, _, ., /, or - characters.");
97107
continue;
108+
}
98109

99110
Tag<?> tag;
100111
for (TagType<?> type : types) {
@@ -122,6 +133,11 @@ public Class<? extends Tag> getReturnType() {
122133
return Tag.class;
123134
}
124135

136+
@Override
137+
public Node getNode() {
138+
return node;
139+
}
140+
125141
@Override
126142
public String toString(@Nullable Event event, boolean debug) {
127143
String registry = types.length > 1 ? "" : " " + types[0].toString();
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
test "is tagged or list":
2+
register a custom item tag named "or_list_tag_1" using oak log
3+
register a custom item tag named "or_list_tag_2" using spruce log
4+
5+
loop 10 times:
6+
assert oak log is tagged as custom tag "or_list_tag_1" or custom tag "or_list_tag_2"

0 commit comments

Comments
 (0)