Reputation: 21
Well I already made one but I don't know if it's the best tbh. Can anyone write me a good tutorial? I made this one with a tutorial and I understood 90% of it but 10% of off and it seems this aint the best way to do it.
EventManager.java
public class EventManager {
private static List<Listener> registered = new ArrayList<Listener>();
public static void register(Listener listener) {
if (!registered.contains(listener)) {
registered.add(listener);
}
}
public static void unregister(Listener listener) {
if (registered.contains(listener)) {
registered.remove(listener);
}
}
public static List<Listener> getRegistered() {
return registered;
}
public static void callEvent(final Event event) {
new Thread() {
@Override
public void run() {
call(event);
}
}.start();
}
private static void call(final Event event) {
for (Listener registered : getRegistered()) {
Method[] methods = registered.getClass().getMethods();
for (int i = 0; i < methods.length; i++) {
EventHandler eventHandler = methods[i].getAnnotation(EventHandler.class);
if (eventHandler != null) {
Class<?>[] methodParams = methods[i].getParameterTypes();
if (methodParams.length < 1) {
continue;
}
if (!event.getClass().getSimpleName().equals(methodParams[0].getSimpleName())) {
continue;
}
try {
methods[i].invoke(registered.getClass().newInstance(), event);
} catch (Exception exception) {
System.err.println(exception);
}
}
}
}
}
}
EventHandler.java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface EventHandler {
}
and Event.java and Listener.java are blank interfaces.
Upvotes: 0
Views: 1760