diff options
author | zaaarf <zaaarf@proton.me> | 2023-08-22 11:13:46 +0200 |
---|---|---|
committer | zaaarf <zaaarf@proton.me> | 2023-08-22 11:13:46 +0200 |
commit | 25a6bac104e5c4089db6023bafb172b3a92dff61 (patch) | |
tree | a7842875d35025ec84746b1de14556dad88d2c04 /src/main/java/ftbsc | |
parent | 61e9b5c84815232b49a9dbbaed1200793cbe4d06 (diff) |
feat: implemented annotations
Diffstat (limited to 'src/main/java/ftbsc')
3 files changed, 66 insertions, 0 deletions
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 {} |