11package com .btk5h .skriptmirror .skript .custom ;
22
33import ch .njol .skript .Skript ;
4- import ch .njol .skript .classes .Changer ;
54import ch .njol .skript .lang .Expression ;
65import ch .njol .skript .lang .ExpressionType ;
7- import ch .njol .skript .lang .SkriptParser ;
6+ import ch .njol .skript .lang .SkriptParser . ParseResult ;
87import ch .njol .skript .lang .util .SimpleExpression ;
9- import ch .njol .skript .log .ErrorQuality ;
108import ch .njol .skript .util .Utils ;
11- import ch .njol .util .Checker ;
129import ch .njol .util .Kleenean ;
13- import ch .njol .util .coll .iterator .ArrayIterator ;
1410import org .jetbrains .annotations .Nullable ;
1511import org .skriptlang .reflect .syntax .condition .ConditionCheckEvent ;
1612import org .skriptlang .reflect .syntax .effect .EffectTriggerEvent ;
1713import org .skriptlang .reflect .syntax .event .EventTriggerEvent ;
1814import org .skriptlang .reflect .syntax .expression .ExpressionChangeEvent ;
1915import org .skriptlang .reflect .syntax .expression .ExpressionGetEvent ;
20- import com .btk5h .skriptmirror .util .JavaUtil ;
2116import org .bukkit .event .Event ;
22- import org .skriptlang .skript .lang .converter .Converters ;
2317
24- import java .util .Iterator ;
25- import java .util .function .Predicate ;
18+ import java .lang .reflect .Array ;
19+ import java .util .Arrays ;
20+
21+ public class ExprExpression extends SimpleExpression <Object > {
2622
27- public class ExprExpression <T > implements Expression <T > {
2823 static {
29- //noinspection unchecked
3024 Skript .registerExpression (ExprExpression .class , Object .class , ExpressionType .SIMPLE ,
31- "[the] expr[ession][(1¦s) ](-| )<\\ d+>" );
25+ "[the] expr[ession][plural:s ](-| )<\\ d+>" );
3226 }
3327
3428 private int index ;
35- private boolean plural ;
36-
37- private final ExprExpression <?> source ;
38- private final Class <? extends T >[] types ;
39- private final Class <T > superType ;
40-
41- @ SuppressWarnings ("unchecked" )
42- public ExprExpression () {
43- this (null , ((Class <? extends T >) Object .class ));
44- }
45-
46- @ SuppressWarnings ("unchecked" )
47- @ SafeVarargs
48- private ExprExpression (ExprExpression <?> source , Class <? extends T >... types ) {
49- if (source != null ) {
50- index = source .index ;
51- plural = source .plural ;
52- }
53-
54- this .source = source ;
55- this .types = types ;
56- this .superType = (Class <T >) Utils .getSuperType (types );
57- }
29+ private boolean isPlural ;
30+ private Class <?> returnType ;
5831
5932 @ Override
60- public boolean init (Expression <?>[] exprs , int matchedPattern , Kleenean isDelayed ,
61- SkriptParser .ParseResult parseResult ) {
33+ public boolean init (Expression <?>[] exprs , int matchedPattern , Kleenean isDelayed , ParseResult parseResult ) {
6234 if (!getParser ().isCurrentEvent (
6335 SyntaxParseEvent .class ,
6436 ConditionCheckEvent .class ,
@@ -67,51 +39,38 @@ public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelaye
6739 ExpressionChangeEvent .class ,
6840 ExpressionGetEvent .class
6941 )) {
70- Skript .error ("The expression 'expression' may only be used in a custom syntax." ,
71- ErrorQuality .SEMANTIC_ERROR );
42+ Skript .error ("The expression 'expression' may only be used in a custom syntax structure" );
7243 return false ;
7344 }
7445
75- index = Utils .parseInt (parseResult .regexes .get ( 0 ).group (0 ));
46+ index = Utils .parseInt (parseResult .regexes .getFirst ( ).group (0 ));
7647 if (index <= 0 ) {
77- Skript .error ("The expression index must be a natural number." , ErrorQuality . SEMANTIC_ERROR );
48+ Skript .error ("The expression index must be a natural number" );
7849 return false ;
7950 }
8051 index --;
8152
82- plural = parseResult .mark == 1 ;
53+ isPlural = parseResult .hasTag ( "plural" ) ;
8354
84- return true ;
85- }
86-
87- @ Override
88- public T getSingle (Event e ) {
89- T [] all = getAll (e );
90- if (all .length == 0 ) {
91- return null ;
92- }
93- return all [0 ];
94- }
55+ // TODO better return types
56+ returnType = Object .class ;
9557
96- @ Override
97- public T [] getArray (Event e ) {
98- return getAll (e );
58+ return true ;
9959 }
10060
10161 @ Override
102- public T [] getAll (Event e ) {
103- Expression <?> expr = getExpression (e );
104-
62+ protected Object @ Nullable [] get (Event event ) {
63+ Expression <?> expr = getExpression (event );
10564 if (expr == null ) {
106- return JavaUtil . newArray ( superType , 0 );
65+ return ( Object []) Array . newInstance ( getReturnType () , 0 );
10766 }
108-
109- return Converters . convert ( expr . getAll ( e ), types , superType );
67+ Object [] values = expr . getAll ( event );
68+ return Arrays . copyOf ( values , values . length , ( Class <? extends Object []>) getReturnType (). arrayType () );
11069 }
11170
11271 @ Nullable
113- Expression <?> getExpression (Event e ) {
114- Expression <?>[] expressions = ((CustomSyntaxEvent ) e ).getExpressions ();
72+ Expression <?> getExpression (Event event ) {
73+ Expression <?>[] expressions = ((CustomSyntaxEvent ) event ).getExpressions ();
11574 if (index < expressions .length ) {
11675 return expressions [index ];
11776 }
@@ -120,87 +79,17 @@ Expression<?> getExpression(Event e) {
12079
12180 @ Override
12281 public boolean isSingle () {
123- return !plural ;
124- }
125-
126- @ Override
127- public boolean check (Event e , Predicate <? super T > c , boolean negated ) {
128- return SimpleExpression .check (getAll (e ), c , negated , getAnd ());
129- }
130-
131- @ Override
132- public boolean check (Event e , Predicate <? super T > c ) {
133- return SimpleExpression .check (getAll (e ), c , false , getAnd ());
134- }
135-
136- @ Override
137- public <R > Expression <? extends R > getConvertedExpression (Class <R >[] to ) {
138- return new ExprExpression <>(this , to );
139- }
140-
141- @ Override
142- public Class <? extends T > getReturnType () {
143- return superType ;
144- }
145-
146- @ Override
147- public boolean getAnd () {
148- return true ;
149- }
150-
151- @ Override
152- public boolean setTime (int time ) {
153- return false ;
154- }
155-
156- @ Override
157- public int getTime () {
158- return 0 ;
159- }
160-
161- @ Override
162- public boolean isDefault () {
163- return false ;
82+ return !isPlural ;
16483 }
16584
16685 @ Override
167- public Iterator <? extends T > iterator ( Event e ) {
168- return new ArrayIterator <>( getAll ( e )) ;
86+ public Class <?> getReturnType ( ) {
87+ return returnType ;
16988 }
17089
17190 @ Override
172- public boolean isLoopOf (String s ) {
173- return s .equalsIgnoreCase ("expression" );
174- }
175-
176- @ Override
177- public Expression <?> getSource () {
178- return source == null ? this : source ;
179- }
180-
181- @ Override
182- public Expression <? extends T > simplify () {
183- return this ;
184- }
185-
186- @ Override
187- public Class <?>[] acceptChange (Changer .ChangeMode mode ) {
188- return null ;
189- }
190-
191- @ Override
192- public void change (Event e , Object [] delta , Changer .ChangeMode mode ) {
193- throw new UnsupportedOperationException ();
194- }
195-
196- @ Override
197- public String toString (Event e , boolean debug ) {
91+ public String toString (Event event , boolean debug ) {
19892 return "expression " + (index + 1 );
19993 }
20094
201- @ Override
202- public String toString () {
203- return toString (null , false );
204- }
205-
20695}
0 commit comments