33import ch .njol .skript .Skript ;
44import ch .njol .skript .lang .Literal ;
55import ch .njol .skript .lang .SkriptEvent ;
6- import ch .njol .skript .lang .SkriptParser ;
6+ import ch .njol .skript .lang .SkriptParser . ParseResult ;
77import ch .njol .skript .lang .Trigger ;
88import com .btk5h .skriptmirror .JavaType ;
99import com .btk5h .skriptmirror .SkriptMirror ;
2222public class EvtByReflection extends SkriptEvent {
2323
2424 static {
25- Skript .registerEvent ("*reflection" , EvtByReflection .class , BukkitEvent .class , "[1:all] %javatypes%" );
25+ Skript .registerEvent ("*reflection" , EvtByReflection .class , BukkitEvent .class , "%javatypes%" );
2626 }
2727
2828 private static class MyEventExecutor implements EventExecutor {
2929 private final Class <? extends Event > eventClass ;
30+ private final ListeningBehavior listeningBehavior ;
3031 private final Trigger trigger ;
3132
3233 public MyEventExecutor (Class <? extends Event > eventClass , Trigger trigger ) {
3334 this .eventClass = eventClass ;
35+ this .listeningBehavior = ListeningBehavior .UNCANCELLED ;
36+ this .trigger = trigger ;
37+ }
38+
39+ public MyEventExecutor (Class <? extends Event > eventClass , ListeningBehavior listeningBehavior , Trigger trigger ) {
40+ this .eventClass = eventClass ;
41+ this .listeningBehavior = listeningBehavior ;
3442 this .trigger = trigger ;
3543 }
3644
3745 @ Override
3846 public void execute (Listener listener , Event event ) throws EventException {
3947 if (eventClass .isInstance (event )) {
48+ if (event instanceof Cancellable && !listeningBehavior .matches (((Cancellable ) event ).isCancelled ()))
49+ return ;
50+
4051 Event scriptEvent ;
4152 scriptEvent = event instanceof Cancellable
4253 ? new CancellableBukkitEvent ((Cancellable ) event ) : new BukkitEvent (event );
@@ -77,12 +88,11 @@ public void setCancelled(boolean cancel) {
7788 }
7889
7990 private Class <? extends Event >[] classes ;
80- private boolean ignoreCancelled ;
8191 private Listener listener ;
8292
8393 @ SuppressWarnings ("unchecked" )
8494 @ Override
85- public boolean init (Literal <?>[] args , int matchedPattern , SkriptParser . ParseResult parseResult ) {
95+ public boolean init (Literal <?>[] args , int matchedPattern , ParseResult parseResult ) {
8696 JavaType [] javaTypes = ((Literal <JavaType >) args [0 ]).getArray ();
8797
8898 classes = new Class [javaTypes .length ];
@@ -99,8 +109,6 @@ public boolean init(Literal<?>[] args, int matchedPattern, SkriptParser.ParseRes
99109 classes [i ] = (Class <? extends Event >) clazz ;
100110 }
101111
102- ignoreCancelled = (parseResult .mark & 1 ) != 1 ;
103-
104112 listener = new Listener () {};
105113
106114 return true ;
@@ -114,10 +122,10 @@ public boolean check(Event event) {
114122 @ Override
115123 public boolean postLoad () {
116124 for (Class <? extends Event > eventClass : classes ) {
117- EventExecutor executor = new MyEventExecutor (eventClass , trigger );
125+ EventExecutor executor = new MyEventExecutor (eventClass , listeningBehavior , trigger );
118126
119127 Bukkit .getPluginManager ()
120- .registerEvent (eventClass , listener , getEventPriority (), executor , SkriptMirror .getInstance (), ignoreCancelled );
128+ .registerEvent (eventClass , listener , getEventPriority (), executor , SkriptMirror .getInstance (), listeningBehavior == ListeningBehavior . UNCANCELLED );
121129 }
122130 return true ;
123131 }
@@ -126,12 +134,20 @@ public void unload() {
126134 HandlerList .unregisterAll (listener );
127135 }
128136
137+ @ Override
138+ public boolean isListeningBehaviorSupported () {
139+ return true ;
140+ }
141+
129142 @ SuppressWarnings ("unchecked" )
130143 @ Override
131144 public Class <? extends Event >[] getEventClasses () {
132145 boolean hasUncancellable = false ;
133146 boolean hasCancellable = false ;
134147
148+ if (classes == null )
149+ return new Class []{BukkitEvent .class };
150+
135151 for (Class <? extends Event > eventClass : classes ) {
136152 if (Cancellable .class .isAssignableFrom (eventClass )) {
137153 hasCancellable = true ;
@@ -151,8 +167,7 @@ public Class<? extends Event>[] getEventClasses() {
151167
152168 @ Override
153169 public String toString (Event e , boolean debug ) {
154- return (ignoreCancelled ? "all " : "" )
155- + Arrays .stream (classes )
170+ return Arrays .stream (classes )
156171 .map (Class ::getSimpleName )
157172 .collect (Collectors .joining (", " ));
158173 }
0 commit comments