feat: implemented annotations

This commit is contained in:
zaaarf 2023-08-22 11:13:46 +02:00
parent 61e9b5c848
commit 25a6bac104
No known key found for this signature in database
GPG key ID: 6445A5CD15E5B40C
3 changed files with 66 additions and 0 deletions

View file

@ -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 {}

View file

@ -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
}

View file

@ -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 {}