diff options
author | Dico Karssiens <dico.karssiens@gmail.com> | 2018-07-27 01:10:46 +0100 |
---|---|---|
committer | Dico Karssiens <dico.karssiens@gmail.com> | 2018-07-27 01:10:46 +0100 |
commit | 963b65714c1abf5a8edb748fc99e4692db7e5bf5 (patch) | |
tree | 5f774f90d6d0f7794ea66b7a989de198346d9131 /dicore3/core | |
parent | ea7c27a7fd7c127920eb5e2aa8f2b2b7c921c607 (diff) |
Start adding listeners as per RedstonerServer/Parcels
Diffstat (limited to 'dicore3/core')
3 files changed, 38 insertions, 29 deletions
diff --git a/dicore3/core/src/main/java/io/dico/dicore/ListenerMarker.java b/dicore3/core/src/main/java/io/dico/dicore/ListenerMarker.java new file mode 100644 index 0000000..e3c0e90 --- /dev/null +++ b/dicore3/core/src/main/java/io/dico/dicore/ListenerMarker.java @@ -0,0 +1,19 @@ +package io.dico.dicore; + +import org.bukkit.event.EventPriority; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface ListenerMarker { + + String[] events() default {}; + + EventPriority priority() default EventPriority.HIGHEST; + + boolean ignoreCancelled() default true; +} diff --git a/dicore3/core/src/main/java/io/dico/dicore/Registrator.java b/dicore3/core/src/main/java/io/dico/dicore/Registrator.java index 9977418..588fba8 100644 --- a/dicore3/core/src/main/java/io/dico/dicore/Registrator.java +++ b/dicore3/core/src/main/java/io/dico/dicore/Registrator.java @@ -11,10 +11,6 @@ import org.bukkit.plugin.EventExecutor; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.RegisteredListener; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; import java.lang.reflect.*; import java.util.*; import java.util.function.Consumer; @@ -434,22 +430,6 @@ public final class Registrator { // # Public types // ############################################ - public interface IEventListener<T extends Event> extends Consumer<T> { - @Override - void accept(T event); - } - - @Retention(RetentionPolicy.RUNTIME) - @Target(ElementType.FIELD) - public @interface ListenerInfo { - - String[] events() default {}; - - EventPriority priority() default EventPriority.HIGHEST; - - boolean ignoreCancelled() default true; - } - public static class Registration extends RegisteredListener { private final EventExecutor executor; @@ -658,17 +638,17 @@ public final class Registrator { fieldLoop: for (Field f : fields) { if (isStatic != Modifier.isStatic(f.getModifiers()) - || !f.isAnnotationPresent(ListenerInfo.class)) { + || !f.isAnnotationPresent(ListenerMarker.class)) { continue; } - if (!IEventListener.class.isAssignableFrom(f.getType())) { - handleListenerFieldError(new ListenerFieldError(f, "Field type cannot be assigned to IEventListener: " + f.getGenericType().getTypeName())); + if (!RegistratorListener.class.isAssignableFrom(f.getType())) { + handleListenerFieldError(new ListenerFieldError(f, "Field type cannot be assigned to RegistratorListener: " + f.getGenericType().getTypeName())); continue; } Type eventType = null; - if (f.getType() == IEventListener.class) { + if (f.getType() == RegistratorListener.class) { Type[] typeArgs; if (!(f.getGenericType() instanceof ParameterizedType) @@ -681,7 +661,7 @@ public final class Registrator { eventType = typeArgs[0]; } else { - // field type is subtype of IEventListener. + // field type is subtype of RegistratorListener. // TODO: link type arguments from field declaration (f.getGenericType()) to matching TypeVariables Type[] interfaces = f.getType().getGenericInterfaces(); for (Type itf : interfaces) { @@ -702,7 +682,7 @@ public final class Registrator { continue; } - if (itfClass == IEventListener.class) { + if (itfClass == RegistratorListener.class) { if (arguments == null || arguments.length != 1) { // Log a warning or throw an exception handleListenerFieldError(new ListenerFieldError(f, "")); @@ -749,7 +729,7 @@ public final class Registrator { Class<? extends Event> baseEventClass = (Class<? extends Event>) eventType; - ListenerInfo anno = f.getAnnotation(ListenerInfo.class); + ListenerMarker anno = f.getAnnotation(ListenerMarker.class); String[] eventClassNames = anno.events(); if (eventClassNames.length > 0) { @@ -844,9 +824,9 @@ public final class Registrator { private static final class ListenerFieldInfo { final Class<? extends Event> eventClass; final Consumer<? super Event> lambda; - final ListenerInfo anno; + final ListenerMarker anno; - ListenerFieldInfo(Class<? extends Event> eventClass, Consumer<? super Event> lambda, ListenerInfo anno) { + ListenerFieldInfo(Class<? extends Event> eventClass, Consumer<? super Event> lambda, ListenerMarker anno) { this.eventClass = eventClass; this.lambda = lambda; this.anno = anno; diff --git a/dicore3/core/src/main/java/io/dico/dicore/RegistratorListener.java b/dicore3/core/src/main/java/io/dico/dicore/RegistratorListener.java new file mode 100644 index 0000000..99fe072 --- /dev/null +++ b/dicore3/core/src/main/java/io/dico/dicore/RegistratorListener.java @@ -0,0 +1,10 @@ +package io.dico.dicore; + +import org.bukkit.event.Event; + +import java.util.function.Consumer; + +public interface RegistratorListener<T extends Event> extends Consumer<T> { + @Override + void accept(T event); +} |