From 25a6bac104e5c4089db6023bafb172b3a92dff61 Mon Sep 17 00:00:00 2001 From: zaaarf Date: Tue, 22 Aug 2023 11:13:46 +0200 Subject: feat: implemented annotations --- src/main/java/ftbsc/geb/api/annotations/Event.java | 17 ++++++++++++ .../java/ftbsc/geb/api/annotations/Listen.java | 32 ++++++++++++++++++++++ .../geb/api/annotations/ListenerInstance.java | 17 ++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 src/main/java/ftbsc/geb/api/annotations/Event.java create mode 100644 src/main/java/ftbsc/geb/api/annotations/Listen.java create mode 100644 src/main/java/ftbsc/geb/api/annotations/ListenerInstance.java diff --git a/src/main/java/ftbsc/geb/api/annotations/Event.java b/src/main/java/ftbsc/geb/api/annotations/Event.java new file mode 100644 index 0000000..ea1724c --- /dev/null +++ b/src/main/java/ftbsc/geb/api/annotations/Event.java @@ -0,0 +1,17 @@ +package ftbsc.geb.api.annotations; + +import ftbsc.geb.api.IEvent; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Marks a class as an Event. It should implement the {@link IEvent} interface. + * It doesn't need to be abstract, but it can never be final. + * @since 0.1.0 + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.CLASS) +public @interface Event {} diff --git a/src/main/java/ftbsc/geb/api/annotations/Listen.java b/src/main/java/ftbsc/geb/api/annotations/Listen.java new file mode 100644 index 0000000..216937a --- /dev/null +++ b/src/main/java/ftbsc/geb/api/annotations/Listen.java @@ -0,0 +1,32 @@ +package ftbsc.geb.api.annotations; + +import ftbsc.geb.api.IEvent; +import ftbsc.geb.api.IListener; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Marks the method as a listener. Its parent must implement the {@link IListener} interface. + * The annotated method should only take a single input value, an instance of {@link IEvent}; + * it should be either void or boolean; if it's boolean, the return value indicates whether + * the event was canceled. + * @since 0.1.0 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.CLASS) +public @interface Listen { + /** + * @return an integer indicating priority level for the listener, defaulting to 0 + */ + int priority() default 0; + + /** + * @return an array of {@link String}s specifying which buses they should be listening on; + * an empty array means that they should listen on all buses, ignoring identifiers: + * that's probably what you wanted anyway. + */ + String[] on() default {}; //empty array = listen on all of them +} diff --git a/src/main/java/ftbsc/geb/api/annotations/ListenerInstance.java b/src/main/java/ftbsc/geb/api/annotations/ListenerInstance.java new file mode 100644 index 0000000..c386592 --- /dev/null +++ b/src/main/java/ftbsc/geb/api/annotations/ListenerInstance.java @@ -0,0 +1,17 @@ +package ftbsc.geb.api.annotations; + +import ftbsc.geb.api.IListener; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * This annotation should mark either be a static instance of {@link IListener} + * or a static method returning one. + * @since 0.1.0 + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.CLASS) +public @interface ListenerInstance {} -- cgit v1.2.3-56-ga3b1