Add a base interface for events

This commit is contained in:
Andrew Steinborn
2021-05-14 12:24:43 -04:00
parent e65c4102a6
commit e6e35d3754
26 changed files with 100 additions and 39 deletions

View File

@@ -27,6 +27,7 @@ import com.google.common.collect.Multimap;
import com.google.common.reflect.TypeToken;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.velocitypowered.api.event.Continuation;
import com.velocitypowered.api.event.Event;
import com.velocitypowered.api.event.EventHandler;
import com.velocitypowered.api.event.EventManager;
import com.velocitypowered.api.event.EventTask;
@@ -107,7 +108,7 @@ public class VelocityEventManager implements EventManager {
final PluginContainer plugin;
final short order;
final Class<?> eventType;
final EventHandler<Object> handler;
final EventHandler<Event> handler;
final AsyncType asyncType;
/**
@@ -117,7 +118,7 @@ public class VelocityEventManager implements EventManager {
final Object instance;
public HandlerRegistration(final PluginContainer plugin, final short order,
final Class<?> eventType, final Object instance, final EventHandler<Object> handler,
final Class<?> eventType, final Object instance, final EventHandler<Event> handler,
final AsyncType asyncType) {
this.plugin = plugin;
this.order = order;
@@ -320,14 +321,14 @@ public class VelocityEventManager implements EventManager {
@Override
@SuppressWarnings("unchecked")
public <E> void register(final Object plugin, final Class<E> eventClass,
public <E extends Event> void register(final Object plugin, final Class<E> eventClass,
final short order, final EventHandler<E> handler) {
final PluginContainer pluginContainer = pluginManager.ensurePluginContainer(plugin);
requireNonNull(eventClass, "eventClass");
requireNonNull(handler, "handler");
final HandlerRegistration registration = new HandlerRegistration(pluginContainer, order,
eventClass, handler, (EventHandler<Object>) handler, AsyncType.SOMETIMES);
eventClass, handler, (EventHandler<Event>) handler, AsyncType.SOMETIMES);
register(Collections.singletonList(registration));
}
@@ -349,7 +350,7 @@ public class VelocityEventManager implements EventManager {
throw new VerifyException("Event type is not present and there are no errors");
}
final EventHandler<Object> handler = event -> untargetedHandler.execute(listener, event);
final EventHandler<Event> handler = event -> untargetedHandler.execute(listener, event);
registrations.add(new HandlerRegistration(pluginContainer, info.order,
info.eventType, listener, handler, info.asyncType));
}
@@ -372,7 +373,7 @@ public class VelocityEventManager implements EventManager {
}
@Override
public <E> void unregister(final Object plugin, final EventHandler<E> handler) {
public <E extends Event> void unregister(final Object plugin, final EventHandler<E> handler) {
unregisterListener(plugin, handler);
}
@@ -400,7 +401,7 @@ public class VelocityEventManager implements EventManager {
}
@Override
public void fireAndForget(final Object event) {
public void fireAndForget(final Event event) {
requireNonNull(event, "event");
final HandlersCache handlersCache = this.handlersCache.get(event.getClass());
if (handlersCache == null) {
@@ -411,7 +412,7 @@ public class VelocityEventManager implements EventManager {
}
@Override
public <E> CompletableFuture<E> fire(final E event) {
public <E extends Event> CompletableFuture<E> fire(final E event) {
requireNonNull(event, "event");
final HandlersCache handlersCache = this.handlersCache.get(event.getClass());
if (handlersCache == null) {
@@ -423,7 +424,7 @@ public class VelocityEventManager implements EventManager {
return future;
}
private <E> void fire(final @Nullable CompletableFuture<E> future,
private <E extends Event> void fire(final @Nullable CompletableFuture<E> future,
final E event, final HandlersCache handlersCache) {
if (handlersCache.asyncType == AsyncType.ALWAYS) {
// We already know that the event needs to be handled async, so
@@ -452,7 +453,7 @@ public class VelocityEventManager implements EventManager {
}
}
final class ContinuationTask<E> implements Continuation, Runnable {
final class ContinuationTask<E extends Event> implements Continuation, Runnable {
private final EventTask.WithContinuation task;
private final int index;
@@ -545,7 +546,7 @@ public class VelocityEventManager implements EventManager {
}
}
private <E> void fire(final @Nullable CompletableFuture<E> future, final E event,
private <E extends Event> void fire(final @Nullable CompletableFuture<E> future, final E event,
final int offset, final boolean currentlyAsync, final HandlerRegistration[] registrations) {
for (int i = offset; i < registrations.length; i++) {
final HandlerRegistration registration = registrations[i];