Fix the automatic registration of main plugin event listeners. (#471)

This commit is contained in:
Seppe Volkaerts
2021-04-19 01:18:01 +02:00
committed by GitHub
parent 01336ff239
commit 71db78e172
2 changed files with 17 additions and 14 deletions

View File

@@ -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);

View File

@@ -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 <E> void register(final Object plugin, final Class<E> eventClass,
final short order, final EventHandler<E> handler) {
final PluginContainer pluginContainer = ensurePlugin(plugin);
requireNonNull(eventClass, "eventClass");
requireNonNull(handler, "handler");
final HandlerRegistration registration = new HandlerRegistration(pluginContainer, order,
eventClass, handler, (EventHandler<Object>) handler, AsyncType.SOMETIMES);
register(Collections.singletonList(registration));
}
public void registerInternally(final PluginContainer pluginContainer, final Object listener) {
final Class<?> targetClass = listener.getClass();
final Map<String, MethodHandlerInfo> collected = new HashMap<>();
collectMethods(targetClass, collected);
@@ -342,19 +358,6 @@ public class VelocityEventManager implements EventManager {
register(registrations);
}
@Override
@SuppressWarnings("unchecked")
public <E> void register(final Object plugin, final Class<E> eventClass,
final short order, final EventHandler<E> handler) {
final PluginContainer pluginContainer = ensurePlugin(plugin);
requireNonNull(eventClass, "eventClass");
requireNonNull(handler, "handler");
final HandlerRegistration registration = new HandlerRegistration(pluginContainer, order,
eventClass, handler, (EventHandler<Object>) handler, AsyncType.SOMETIMES);
register(Collections.singletonList(registration));
}
@Override
public void unregisterListeners(final Object plugin) {
final PluginContainer pluginContainer = ensurePlugin(plugin);