aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author zaaarf <zaaarf@proton.me>2023-08-22 11:13:46 +0200
committer zaaarf <zaaarf@proton.me>2023-08-22 11:13:46 +0200
commit25a6bac104e5c4089db6023bafb172b3a92dff61 (patch)
treea7842875d35025ec84746b1de14556dad88d2c04
parent61e9b5c84815232b49a9dbbaed1200793cbe4d06 (diff)
feat: implemented annotations
-rw-r--r--src/main/java/ftbsc/geb/api/annotations/Event.java17
-rw-r--r--src/main/java/ftbsc/geb/api/annotations/Listen.java32
-rw-r--r--src/main/java/ftbsc/geb/api/annotations/ListenerInstance.java17
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 {}