Implement velocity listeners / events
This commit is contained in:
parent
779f4785e0
commit
d96398f4a9
14 changed files with 130 additions and 52 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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()));
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue