@@ -38,10 +38,24 @@ public EventPriority getPriority() {
38
38
public Set <Class <? extends Event >> getEvents () {
39
39
return events ;
40
40
}
41
+
41
42
}
42
43
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
+ }
45
59
46
60
private static final PriorityListener [] listeners ;
47
61
@@ -92,14 +106,16 @@ public void setCancelled(boolean cancel) {
92
106
}
93
107
}
94
108
95
- private static void registerEvent (Class <? extends Event > event , EventPriority priority ) {
109
+ private static void registerEvent (Class <? extends Event > eventClass , EventPriority priority ) {
96
110
PriorityListener listener = listeners [priority .ordinal ()];
97
- Set <Class <? extends Event >> events = listener .getEvents ();
111
+ Set <Class <? extends Event >> eventClasses = listener .getEvents ();
98
112
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 );
101
117
Bukkit .getPluginManager ()
102
- .registerEvent (event , listener , priority , executor , SkriptMirror .getInstance (), false );
118
+ .registerEvent (eventClass , listener , priority , executor , SkriptMirror .getInstance (), false );
103
119
}
104
120
105
121
}
@@ -138,13 +154,14 @@ public boolean init(Literal<?>[] args, int matchedPattern, SkriptParser.ParseRes
138
154
139
155
@ Override
140
156
public boolean check (Event e ) {
141
- Event extractedEvent = ((BukkitEvent ) e ).getEvent ();
157
+ BukkitEvent bukkitEvent = (BukkitEvent ) e ;
158
+ Event extractedEvent = bukkitEvent .getEvent ();
142
159
Class <? extends Event > eventClass = extractedEvent .getClass ();
143
160
144
- if (extractedEvent instanceof Cancellable && ((Cancellable ) extractedEvent ).isCancelled () && ignoreCancelled )
161
+ if (ignoreCancelled && extractedEvent instanceof Cancellable && ((Cancellable ) extractedEvent ).isCancelled ())
145
162
return false ;
146
163
147
- if (priority == (( BukkitEvent ) e ) .getPriority ()) {
164
+ if (priority == bukkitEvent .getPriority ()) {
148
165
for (Class <? extends Event > cls : classes ) {
149
166
if (cls .isAssignableFrom (eventClass )) {
150
167
return true ;
@@ -158,4 +175,5 @@ public boolean check(Event e) {
158
175
public String toString (Event e , boolean debug ) {
159
176
return Arrays .toString (classes ) + " priority " + priority ;
160
177
}
178
+
161
179
}
0 commit comments