@@ -38,10 +38,24 @@ public EventPriority getPriority() {
3838 public Set <Class <? extends Event >> getEvents () {
3939 return events ;
4040 }
41+
4142 }
4243
43- private static final EventExecutor executor = (listener , event ) -> Bukkit .getPluginManager ()
44- .callEvent (new BukkitEvent (event , ((PriorityListener ) listener ).getPriority ()));
44+ private static class TypeStrictEventExecutor implements EventExecutor {
45+
46+ private final Class <? extends Event > eventClass ;
47+
48+ public TypeStrictEventExecutor (Class <? extends Event > eventClass ) {
49+ this .eventClass = eventClass ;
50+ }
51+
52+ @ Override
53+ public void execute (Listener listener , Event event ) throws EventException {
54+ if (eventClass .isInstance (event ))
55+ Bukkit .getPluginManager ().callEvent (new BukkitEvent (event , ((PriorityListener ) listener ).getPriority ()));
56+ }
57+
58+ }
4559
4660 private static final PriorityListener [] listeners ;
4761
@@ -92,14 +106,16 @@ public void setCancelled(boolean cancel) {
92106 }
93107 }
94108
95- private static void registerEvent (Class <? extends Event > event , EventPriority priority ) {
109+ private static void registerEvent (Class <? extends Event > eventClass , EventPriority priority ) {
96110 PriorityListener listener = listeners [priority .ordinal ()];
97- Set <Class <? extends Event >> events = listener .getEvents ();
111+ Set <Class <? extends Event >> eventClasses = listener .getEvents ();
98112
99- if (!events .contains (event )) {
100- events .add (event );
113+ if (!eventClasses .contains (eventClass )) {
114+ eventClasses .add (eventClass );
115+
116+ EventExecutor executor = new TypeStrictEventExecutor (eventClass );
101117 Bukkit .getPluginManager ()
102- .registerEvent (event , listener , priority , executor , SkriptMirror .getInstance (), false );
118+ .registerEvent (eventClass , listener , priority , executor , SkriptMirror .getInstance (), false );
103119 }
104120
105121 }
@@ -138,13 +154,14 @@ public boolean init(Literal<?>[] args, int matchedPattern, SkriptParser.ParseRes
138154
139155 @ Override
140156 public boolean check (Event e ) {
141- Event extractedEvent = ((BukkitEvent ) e ).getEvent ();
157+ BukkitEvent bukkitEvent = (BukkitEvent ) e ;
158+ Event extractedEvent = bukkitEvent .getEvent ();
142159 Class <? extends Event > eventClass = extractedEvent .getClass ();
143160
144- if (extractedEvent instanceof Cancellable && ((Cancellable ) extractedEvent ).isCancelled () && ignoreCancelled )
161+ if (ignoreCancelled && extractedEvent instanceof Cancellable && ((Cancellable ) extractedEvent ).isCancelled ())
145162 return false ;
146163
147- if (priority == (( BukkitEvent ) e ) .getPriority ()) {
164+ if (priority == bukkitEvent .getPriority ()) {
148165 for (Class <? extends Event > cls : classes ) {
149166 if (cls .isAssignableFrom (eventClass )) {
150167 return true ;
@@ -158,4 +175,5 @@ public boolean check(Event e) {
158175 public String toString (Event e , boolean debug ) {
159176 return Arrays .toString (classes ) + " priority " + priority ;
160177 }
178+
161179}
0 commit comments