3232import org .skriptlang .skript .util .Priority ;
3333
3434import java .lang .reflect .Array ;
35+ import java .util .Arrays ;
36+ import java .util .HashSet ;
37+ import java .util .Set ;
3538
3639/**
3740 * A useful class for creating default expressions. It simply returns the event value of the given type.
@@ -161,12 +164,11 @@ public static <T> void register(Class<? extends EventValueExpression<T>> express
161164 }
162165
163166 private final EventValueRegistry registry = Skript .instance ().registry (EventValueRegistry .class );
167+ public final Set <Class <? extends Event >> events = new HashSet <>();
164168
165169 private final Class <?> componentType ;
166170 private final Class <? extends T > type ;
167171
168- @ SuppressWarnings ("unchecked" )
169- private Class <? extends Event >[] events = new Class [0 ];
170172 private @ Nullable Changer <? super T > changer ;
171173 private final boolean single ;
172174 private final boolean exact ;
@@ -231,7 +233,7 @@ public boolean init() {
231233 ParseLogHandler log = SkriptLogger .startParseLogHandler ();
232234 try {
233235 boolean hasValue = false ;
234- events = parser .getCurrentEvents ();
236+ Class <? extends Event >[] events = parser .getCurrentEvents ();
235237 if (events == null ) {
236238 assert false ;
237239 return false ;
@@ -252,6 +254,7 @@ public boolean init() {
252254 return false ;
253255 }
254256 log .printLog ();
257+ this .events .addAll (Arrays .asList (events ));
255258 return true ;
256259 } finally {
257260 log .stop ();
@@ -346,7 +349,7 @@ public void change(Event event, @Nullable Object[] delta, ChangeMode mode) {
346349
347350 @ Override
348351 public boolean setTime (int time ) {
349- events = getParser ().getCurrentEvents ();
352+ Class <? extends Event >[] events = getParser ().getCurrentEvents ();
350353 if (events == null ) {
351354 assert false ;
352355 return false ;
@@ -356,6 +359,10 @@ public boolean setTime(int time) {
356359 if (getEventValuesForTime (event , EventValue .TIME_PAST ).successful ()
357360 || getEventValuesForTime (event , EventValue .TIME_FUTURE ).successful ()) {
358361 super .setTime (time );
362+ // Since the time was changed, we now need to re-initialize the parse time events we already got. START
363+ this .events .clear ();
364+ init ();
365+ // END
359366 return true ;
360367 }
361368 }
0 commit comments