3
0
Mirror von https://github.com/PaperMC/Velocity.git synchronisiert 2024-09-29 14:40:21 +02:00

Allow arbitrary post orders

Dieser Commit ist enthalten in:
Andrew Steinborn 2023-05-14 04:41:10 -04:00
Ursprung 3579532892
Commit 3852f27eb8
4 geänderte Dateien mit 11 neuen und 8 gelöschten Zeilen

Datei anzeigen

@ -46,7 +46,7 @@ public interface EventManager {
* @param handler the handler to register * @param handler the handler to register
* @param <E> the event type to handle * @param <E> the event type to handle
*/ */
<E> void register(Object plugin, Class<E> eventClass, PostOrder postOrder, <E> void register(Object plugin, Class<E> eventClass, short postOrder,
EventHandler<E> handler); EventHandler<E> handler);
/** /**

Datei anzeigen

@ -10,8 +10,12 @@ package com.velocitypowered.api.event;
/** /**
* Represents the order an event will be posted to a listener method, relative to other listeners. * Represents the order an event will be posted to a listener method, relative to other listeners.
*/ */
public enum PostOrder { public class PostOrder {
FIRST, EARLY, NORMAL, LATE, LAST public static final short FIRST = -32768;
public static final short EARLY = -16384;
public static final short NORMAL = 0;
public static final short LATE = 16834;
public static final short LAST = 32767;
} }

Datei anzeigen

@ -24,7 +24,7 @@ public @interface Subscribe {
* *
* @return the order * @return the order
*/ */
PostOrder order() default PostOrder.NORMAL; short order() default PostOrder.NORMAL;
/** /**
* Whether the handler must be called asynchronously. * Whether the handler must be called asynchronously.

Datei anzeigen

@ -29,7 +29,6 @@ import com.velocitypowered.api.event.Continuation;
import com.velocitypowered.api.event.EventHandler; import com.velocitypowered.api.event.EventHandler;
import com.velocitypowered.api.event.EventManager; import com.velocitypowered.api.event.EventManager;
import com.velocitypowered.api.event.EventTask; import com.velocitypowered.api.event.EventTask;
import com.velocitypowered.api.event.PostOrder;
import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.plugin.PluginContainer; import com.velocitypowered.api.plugin.PluginContainer;
import com.velocitypowered.api.plugin.PluginManager; import com.velocitypowered.api.plugin.PluginManager;
@ -330,7 +329,7 @@ public class VelocityEventManager implements EventManager {
if (subscribe.async()) { if (subscribe.async()) {
asyncType = AsyncType.ALWAYS; asyncType = AsyncType.ALWAYS;
} }
final short order = (short) subscribe.order().ordinal(); final short order = subscribe.order();
final String errorsJoined = errors.isEmpty() ? null : String.join(",", errors); final String errorsJoined = errors.isEmpty() ? null : String.join(",", errors);
collected.put(key, new MethodHandlerInfo(method, asyncType, eventType, order, errorsJoined, collected.put(key, new MethodHandlerInfo(method, asyncType, eventType, order, errorsJoined,
continuationType)); continuationType));
@ -370,13 +369,13 @@ public class VelocityEventManager implements EventManager {
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <E> void register(final Object plugin, final Class<E> eventClass, public <E> void register(final Object plugin, final Class<E> eventClass,
final PostOrder order, final EventHandler<E> handler) { final short order, final EventHandler<E> handler) {
final PluginContainer pluginContainer = pluginManager.ensurePluginContainer(plugin); final PluginContainer pluginContainer = pluginManager.ensurePluginContainer(plugin);
requireNonNull(eventClass, "eventClass"); requireNonNull(eventClass, "eventClass");
requireNonNull(handler, "handler"); requireNonNull(handler, "handler");
final HandlerRegistration registration = new HandlerRegistration(pluginContainer, final HandlerRegistration registration = new HandlerRegistration(pluginContainer,
(short) order.ordinal(), eventClass, handler, (EventHandler<Object>) handler, order, eventClass, handler, (EventHandler<Object>) handler,
AsyncType.SOMETIMES); AsyncType.SOMETIMES);
register(Collections.singletonList(registration)); register(Collections.singletonList(registration));
} }