Implement velocity listeners / events

This commit is contained in:
Frank van der Heijden 2021-07-24 14:31:45 +02:00
parent 779f4785e0
commit d96398f4a9
No known key found for this signature in database
GPG key ID: B808721C2DD5B5B8
14 changed files with 130 additions and 52 deletions

View file

@ -11,6 +11,7 @@ import net.frankheijden.serverutils.common.entities.ServerUtilsPlugin;
import net.frankheijden.serverutils.velocity.ServerUtils;
import net.frankheijden.serverutils.velocity.commands.VelocityCommandPlugins;
import net.frankheijden.serverutils.velocity.commands.VelocityCommandServerUtils;
import net.frankheijden.serverutils.velocity.listeners.VelocityPlayerListener;
import net.frankheijden.serverutils.velocity.managers.VelocityPluginManager;
import net.frankheijden.serverutils.velocity.managers.VelocityTaskManager;
@ -85,6 +86,11 @@ public class VelocityPlugin extends ServerUtilsPlugin<
return this.plugin.getDataDirectory().toFile();
}
@Override
protected void enablePlugin() {
plugin.getProxy().getEventManager().register(plugin, new VelocityPlayerListener(this));
}
@Override
protected void reloadPlugin() {
new VelocityCommandPlugins(this).register(commandManager);

View file

@ -0,0 +1,11 @@
package net.frankheijden.serverutils.velocity.events;
import com.velocitypowered.api.plugin.PluginContainer;
import net.frankheijden.serverutils.common.events.PluginDisableEvent;
public class VelocityPluginDisableEvent extends VelocityPluginEvent implements PluginDisableEvent<PluginContainer> {
public VelocityPluginDisableEvent(PluginContainer plugin, Stage stage) {
super(plugin, stage);
}
}

View file

@ -0,0 +1,11 @@
package net.frankheijden.serverutils.velocity.events;
import com.velocitypowered.api.plugin.PluginContainer;
import net.frankheijden.serverutils.common.events.PluginEnableEvent;
public class VelocityPluginEnableEvent extends VelocityPluginEvent implements PluginEnableEvent<PluginContainer> {
public VelocityPluginEnableEvent(PluginContainer plugin, Stage stage) {
super(plugin, stage);
}
}

View file

@ -0,0 +1,25 @@
package net.frankheijden.serverutils.velocity.events;
import com.velocitypowered.api.plugin.PluginContainer;
import net.frankheijden.serverutils.common.events.PluginEvent;
public abstract class VelocityPluginEvent implements PluginEvent<PluginContainer> {
private final PluginContainer plugin;
private final Stage stage;
protected VelocityPluginEvent(PluginContainer plugin, Stage stage) {
this.plugin = plugin;
this.stage = stage;
}
@Override
public PluginContainer getPlugin() {
return plugin;
}
@Override
public Stage getStage() {
return stage;
}
}

View file

@ -0,0 +1,11 @@
package net.frankheijden.serverutils.velocity.events;
import com.velocitypowered.api.plugin.PluginContainer;
import net.frankheijden.serverutils.common.events.PluginLoadEvent;
public class VelocityPluginLoadEvent extends VelocityPluginEvent implements PluginLoadEvent<PluginContainer> {
public VelocityPluginLoadEvent(PluginContainer plugin, Stage stage) {
super(plugin, stage);
}
}

View file

@ -0,0 +1,11 @@
package net.frankheijden.serverutils.velocity.events;
import com.velocitypowered.api.plugin.PluginContainer;
import net.frankheijden.serverutils.common.events.PluginUnloadEvent;
public class VelocityPluginUnloadEvent extends VelocityPluginEvent implements PluginUnloadEvent<PluginContainer> {
public VelocityPluginUnloadEvent(PluginContainer plugin, Stage stage) {
super(plugin, stage);
}
}

View file

@ -0,0 +1,19 @@
package net.frankheijden.serverutils.velocity.listeners;
import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.event.player.PlayerChooseInitialServerEvent;
import net.frankheijden.serverutils.common.listeners.PlayerListener;
import net.frankheijden.serverutils.velocity.entities.VelocityCommandSender;
import net.frankheijden.serverutils.velocity.entities.VelocityPlugin;
public class VelocityPlayerListener extends PlayerListener<VelocityPlugin, VelocityCommandSender> {
public VelocityPlayerListener(VelocityPlugin plugin) {
super(plugin);
}
@Subscribe
public void onPlayerChooseInitialServer(PlayerChooseInitialServerEvent event) {
handleUpdate(plugin.getChatProvider().get(event.getPlayer()));
}
}

View file

@ -28,9 +28,14 @@ import java.util.Set;
import java.util.stream.Collectors;
import net.frankheijden.serverutils.common.entities.CloseableResult;
import net.frankheijden.serverutils.common.entities.Result;
import net.frankheijden.serverutils.common.events.PluginEvent;
import net.frankheijden.serverutils.common.managers.AbstractPluginManager;
import net.frankheijden.serverutils.velocity.ServerUtils;
import net.frankheijden.serverutils.velocity.entities.VelocityLoadResult;
import net.frankheijden.serverutils.velocity.events.VelocityPluginDisableEvent;
import net.frankheijden.serverutils.velocity.events.VelocityPluginEnableEvent;
import net.frankheijden.serverutils.velocity.events.VelocityPluginLoadEvent;
import net.frankheijden.serverutils.velocity.events.VelocityPluginUnloadEvent;
import net.frankheijden.serverutils.velocity.reflection.RJavaPluginLoader;
import net.frankheijden.serverutils.velocity.reflection.RVelocityCommandManager;
import net.frankheijden.serverutils.velocity.reflection.RVelocityConsole;
@ -79,12 +84,15 @@ public class VelocityPluginManager implements AbstractPluginManager<PluginContai
PluginDescription realPlugin = RJavaPluginLoader.loadPlugin(javaPluginLoader, candidate);
PluginContainer container = RVelocityPluginContainer.newInstance(realPlugin);
proxy.getEventManager().fire(new VelocityPluginLoadEvent(container, PluginEvent.Stage.PRE));
proxy.getEventManager().fire(new VelocityPluginLoadEvent(container, PluginEvent.Stage.POST));
return new VelocityLoadResult(container);
}
@Override
public Result enablePlugin(PluginContainer container) {
proxy.getEventManager().fire(new VelocityPluginEnableEvent(container, PluginEvent.Stage.PRE));
if (proxy.getPluginManager().isLoaded(container.getDescription().getId())) return Result.ALREADY_ENABLED;
Object javaPluginLoader = RJavaPluginLoader.newInstance(
@ -130,12 +138,12 @@ public class VelocityPluginManager implements AbstractPluginManager<PluginContai
);
RVelocityPluginManager.registerPlugin(proxy.getPluginManager(), container);
container.getInstance().ifPresent(instance -> {
RVelocityEventManager.registerInternally(proxy.getEventManager(), container, instance);
container.getInstance().ifPresent(pluginInstance -> {
RVelocityEventManager.registerInternally(proxy.getEventManager(), container, pluginInstance);
RVelocityEventManager.fireForPlugin(
proxy.getEventManager(),
new ProxyInitializeEvent(),
instance
pluginInstance
).join();
ConsoleCommandSource console = proxy.getConsoleCommandSource();
@ -146,7 +154,7 @@ public class VelocityPluginManager implements AbstractPluginManager<PluginContai
PermissionFunction permissionFunction = RVelocityEventManager.fireForPlugin(
proxy.getEventManager(),
event,
instance
pluginInstance
).join().createFunction(console);
if (permissionFunction == null) {
@ -162,12 +170,14 @@ public class VelocityPluginManager implements AbstractPluginManager<PluginContai
RVelocityConsole.setPermissionFunction(console, permissionFunction);
});
proxy.getEventManager().fire(new VelocityPluginEnableEvent(container, PluginEvent.Stage.POST));
return Result.SUCCESS;
}
@Override
public Result disablePlugin(PluginContainer plugin) {
Object pluginInstance = plugin.getInstance().orElse(null);
public Result disablePlugin(PluginContainer container) {
proxy.getEventManager().fire(new VelocityPluginDisableEvent(container, PluginEvent.Stage.PRE));
Object pluginInstance = container.getInstance().orElse(null);
if (pluginInstance == null) return Result.NOT_EXISTS;
RVelocityEventManager.fireForPlugin(
@ -176,6 +186,7 @@ public class VelocityPluginManager implements AbstractPluginManager<PluginContai
new ProxyShutdownEvent()
);
proxy.getEventManager().fire(new VelocityPluginDisableEvent(container, PluginEvent.Stage.POST));
return Result.SUCCESS;
}
@ -209,8 +220,9 @@ public class VelocityPluginManager implements AbstractPluginManager<PluginContai
}
@Override
public CloseableResult unloadPlugin(PluginContainer plugin) {
Optional<?> pluginInstanceOptional = plugin.getInstance();
public CloseableResult unloadPlugin(PluginContainer container) {
proxy.getEventManager().fire(new VelocityPluginUnloadEvent(container, PluginEvent.Stage.PRE));
Optional<?> pluginInstanceOptional = container.getInstance();
if (!pluginInstanceOptional.isPresent()) return new CloseableResult(Result.INVALID_PLUGIN);
Object pluginInstance = pluginInstanceOptional.get();
@ -219,7 +231,7 @@ public class VelocityPluginManager implements AbstractPluginManager<PluginContai
task.cancel();
}
String pluginId = plugin.getDescription().getId();
String pluginId = container.getDescription().getId();
VelocityPluginCommandManager pluginCommandManager = ServerUtils.getInstance().getPluginCommandManager();
for (String alias : pluginCommandManager.getPluginCommands().removeAll(pluginId)) {
proxy.getCommandManager().unregister(alias);
@ -235,6 +247,7 @@ public class VelocityPluginManager implements AbstractPluginManager<PluginContai
closeables.add((Closeable) loader);
}
proxy.getEventManager().fire(new VelocityPluginUnloadEvent(container, PluginEvent.Stage.POST));
return new CloseableResult(closeables);
}