11package com .btk5h .skriptmirror .skript .reflect ;
22
33import ch .njol .skript .Skript ;
4- import ch .njol .skript .SkriptConfig ;
54import ch .njol .skript .lang .Literal ;
65import ch .njol .skript .lang .SelfRegisteringSkriptEvent ;
76import ch .njol .skript .lang .SkriptParser ;
109import com .btk5h .skriptmirror .SkriptMirror ;
1110import com .btk5h .skriptmirror .WrappedEvent ;
1211import org .bukkit .Bukkit ;
13- import org .bukkit .event .*;
12+ import org .bukkit .event .Cancellable ;
13+ import org .bukkit .event .Event ;
14+ import org .bukkit .event .EventException ;
15+ import org .bukkit .event .HandlerList ;
16+ import org .bukkit .event .Listener ;
1417import org .bukkit .plugin .EventExecutor ;
1518
1619import java .util .Arrays ;
1922public class EvtByReflection extends SelfRegisteringSkriptEvent {
2023
2124 static {
22- Skript .registerEvent ("Bukkit " , EvtByReflection .class , BukkitEvent .class ,
25+ Skript .registerEvent ("*reflection " , EvtByReflection .class , BukkitEvent .class ,
2326 "[(1¦all)] %javatypes%" );
2427 }
2528
@@ -35,12 +38,16 @@ public MyEventExecutor(Class<? extends Event> eventClass, Trigger trigger) {
3538 @ Override
3639 public void execute (Listener listener , Event event ) throws EventException {
3740 if (eventClass .isInstance (event )) {
38- trigger .execute (new BukkitEvent (event ));
41+ Event scriptEvent ;
42+ scriptEvent = event instanceof Cancellable
43+ ? new CancellableBukkitEvent ((Cancellable ) event ) : new BukkitEvent (event );
44+
45+ trigger .execute (scriptEvent );
3946 }
4047 }
4148 }
4249
43- private static class BukkitEvent extends WrappedEvent implements Cancellable {
50+ private static class BukkitEvent extends WrappedEvent {
4451 public BukkitEvent (Event event ) {
4552 super (event , event .isAsynchronous ());
4653 }
@@ -50,19 +57,23 @@ public HandlerList getHandlers() {
5057 // No HandlerList implementation because this event should never be called
5158 throw new IllegalStateException ();
5259 }
60+ }
61+
62+ private static class CancellableBukkitEvent extends BukkitEvent implements Cancellable {
63+ public CancellableBukkitEvent (Cancellable event ) {
64+ super ((Event ) event );
65+ }
5366
5467 @ Override
5568 public boolean isCancelled () {
5669 Event event = getDirectEvent ();
57- return event instanceof Cancellable && ((Cancellable ) event ).isCancelled ();
70+ return ((Cancellable ) event ).isCancelled ();
5871 }
5972
6073 @ Override
6174 public void setCancelled (boolean cancel ) {
6275 Event event = getDirectEvent ();
63- if (event instanceof Cancellable ) {
64- ((Cancellable ) event ).setCancelled (cancel );
65- }
76+ ((Cancellable ) event ).setCancelled (cancel );
6677 }
6778 }
6879
@@ -116,6 +127,29 @@ public void unregisterAll() {
116127 HandlerList .unregisterAll (listener );
117128 }
118129
130+ @ SuppressWarnings ("unchecked" )
131+ @ Override
132+ public Class <? extends Event >[] getEventClasses () {
133+ boolean hasUncancellable = false ;
134+ boolean hasCancellable = false ;
135+
136+ for (Class <? extends Event > eventClass : classes ) {
137+ if (Cancellable .class .isAssignableFrom (eventClass )) {
138+ hasCancellable = true ;
139+ } else {
140+ hasUncancellable = true ;
141+ }
142+ }
143+
144+ if (hasCancellable && hasUncancellable ) {
145+ return new Class [] {BukkitEvent .class , CancellableBukkitEvent .class };
146+ } else if (hasCancellable ) {
147+ return new Class [] {CancellableBukkitEvent .class };
148+ } else {
149+ return new Class [] {BukkitEvent .class };
150+ }
151+ }
152+
119153 @ Override
120154 public boolean isEventPrioritySupported () {
121155 return true ;
0 commit comments