From 71db78e172ddb9ce66ffa34aa7b0ae3f962b71f2 Mon Sep 17 00:00:00 2001 From: Seppe Volkaerts Date: Mon, 19 Apr 2021 01:18:01 +0200 Subject: [PATCH] Fix the automatic registration of main plugin event listeners. (#471) --- .../velocitypowered/proxy/VelocityServer.java | 2 +- .../proxy/event/VelocityEventManager.java | 29 ++++++++++--------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/VelocityServer.java b/proxy/src/main/java/com/velocitypowered/proxy/VelocityServer.java index 108988372..4795f941f 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/VelocityServer.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/VelocityServer.java @@ -330,7 +330,7 @@ public class VelocityServer implements ProxyServer, ForwardingAudience { Optional instance = plugin.instance(); if (instance.isPresent()) { try { - eventManager.register(instance.get(), instance.get()); + eventManager.registerInternally(plugin, instance.get()); } catch (Exception e) { logger.error("Unable to register plugin listener for {}", plugin.description().name().orElse(plugin.description().id()), e); diff --git a/proxy/src/main/java/com/velocitypowered/proxy/event/VelocityEventManager.java b/proxy/src/main/java/com/velocitypowered/proxy/event/VelocityEventManager.java index 1b44e074c..ff25e0fce 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/event/VelocityEventManager.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/event/VelocityEventManager.java @@ -319,7 +319,23 @@ public class VelocityEventManager implements EventManager { if (plugin == listener) { throw new IllegalArgumentException("The plugin main instance is automatically registered."); } + registerInternally(pluginContainer, listener); + } + @Override + @SuppressWarnings("unchecked") + public void register(final Object plugin, final Class eventClass, + final short order, final EventHandler handler) { + final PluginContainer pluginContainer = ensurePlugin(plugin); + requireNonNull(eventClass, "eventClass"); + requireNonNull(handler, "handler"); + + final HandlerRegistration registration = new HandlerRegistration(pluginContainer, order, + eventClass, handler, (EventHandler) handler, AsyncType.SOMETIMES); + register(Collections.singletonList(registration)); + } + + public void registerInternally(final PluginContainer pluginContainer, final Object listener) { final Class targetClass = listener.getClass(); final Map collected = new HashMap<>(); collectMethods(targetClass, collected); @@ -342,19 +358,6 @@ public class VelocityEventManager implements EventManager { register(registrations); } - @Override - @SuppressWarnings("unchecked") - public void register(final Object plugin, final Class eventClass, - final short order, final EventHandler handler) { - final PluginContainer pluginContainer = ensurePlugin(plugin); - requireNonNull(eventClass, "eventClass"); - requireNonNull(handler, "handler"); - - final HandlerRegistration registration = new HandlerRegistration(pluginContainer, order, - eventClass, handler, (EventHandler) handler, AsyncType.SOMETIMES); - register(Collections.singletonList(registration)); - } - @Override public void unregisterListeners(final Object plugin) { final PluginContainer pluginContainer = ensurePlugin(plugin);