1
1
package org .skriptlang .skript .bukkit .tags .elements ;
2
2
3
3
import ch .njol .skript .Skript ;
4
+ import ch .njol .skript .config .Node ;
4
5
import ch .njol .skript .doc .Description ;
5
6
import ch .njol .skript .doc .Examples ;
6
7
import ch .njol .skript .doc .Keywords ;
22
23
import org .skriptlang .skript .bukkit .tags .TagModule ;
23
24
import org .skriptlang .skript .bukkit .tags .TagType ;
24
25
import org .skriptlang .skript .bukkit .tags .sources .TagOrigin ;
26
+ import org .skriptlang .skript .log .runtime .SyntaxRuntimeErrorProducer ;
25
27
26
28
import java .util .ArrayList ;
27
29
import java .util .List ;
51
53
@ Since ("2.10" )
52
54
@ RequiredPlugins ("Paper (paper tags)" )
53
55
@ Keywords ({"blocks" , "minecraft tag" , "type" , "category" })
54
- public class ExprTag extends SimpleExpression <Tag > {
56
+ public class ExprTag extends SimpleExpression <Tag > implements SyntaxRuntimeErrorProducer {
55
57
56
58
static {
57
59
Skript .registerExpression (ExprTag .class , Tag .class , ExpressionType .COMBINED ,
@@ -63,13 +65,16 @@ public class ExprTag extends SimpleExpression<Tag> {
63
65
private TagOrigin origin ;
64
66
private boolean datapackOnly ;
65
67
68
+ private Node node ;
69
+
66
70
@ Override
67
71
public boolean init (Expression <?>[] expressions , int matchedPattern , Kleenean isDelayed , ParseResult parseResult ) {
68
72
//noinspection unchecked
69
73
names = (Expression <String >) expressions [0 ];
70
74
types = TagType .fromParseMark (parseResult .mark );
71
75
origin = TagOrigin .fromParseTags (parseResult .tags );
72
76
datapackOnly = origin == TagOrigin .BUKKIT && parseResult .hasTag ("datapack" );
77
+ node = getParser ().getNode ();
73
78
return true ;
74
79
}
75
80
@@ -87,14 +92,20 @@ public boolean init(Expression<?>[] expressions, int matchedPattern, Kleenean is
87
92
nextName : for (String name : names ) {
88
93
// get key
89
94
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 ;
95
104
}
96
- if (key == null )
105
+ if (key == null ) {
106
+ error ("Invalid tag key: '" + name + "'. Tags may only contain a-z, 0-9, _, ., /, or - characters." );
97
107
continue ;
108
+ }
98
109
99
110
Tag <?> tag ;
100
111
for (TagType <?> type : types ) {
@@ -122,6 +133,11 @@ public Class<? extends Tag> getReturnType() {
122
133
return Tag .class ;
123
134
}
124
135
136
+ @ Override
137
+ public Node getNode () {
138
+ return node ;
139
+ }
140
+
125
141
@ Override
126
142
public String toString (@ Nullable Event event , boolean debug ) {
127
143
String registry = types .length > 1 ? "" : " " + types [0 ].toString ();
0 commit comments