Implementing Bukkit shutdown cleanup so reloads work

This commit is contained in:
funkemunky
2021-06-17 12:35:51 -04:00
parent 1b569531a0
commit d867a3ecd6
@@ -2,28 +2,38 @@ package dev.brighten.antivpn.bukkit;
import dev.brighten.antivpn.AntiVPN;
import dev.brighten.antivpn.command.Command;
import lombok.val;
import net.md_5.bungee.api.ChatColor;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.command.SimpleCommandMap;
import org.bukkit.event.HandlerList;
import org.bukkit.plugin.SimplePluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class BukkitPlugin extends JavaPlugin {
public static BukkitPlugin pluginInstance;
private SimpleCommandMap commandMap;
private List<org.bukkit.command.Command> registeredCommands = new ArrayList<>();
public void onEnable() {
pluginInstance = this;
//Loading config
System.out.println("Loading config...");
saveDefaultConfig();
System.out.println("Starting AntiVPN services...");
AntiVPN.start(new BukkitConfig(), new BukkitListener(), new BukkitPlayerExecutor());
System.out.println("Setting up and registering commands...");
if (pluginInstance.getServer().getPluginManager() instanceof SimplePluginManager) {
SimplePluginManager manager = (SimplePluginManager) pluginInstance.getServer().getPluginManager();
try {
@@ -36,27 +46,48 @@ public class BukkitPlugin extends JavaPlugin {
}
for (Command command : AntiVPN.getInstance().getCommands()) {
commandMap.register("antivpn", new org.bukkit.command.Command(command.name(),
val newCommand = new org.bukkit.command.Command(command.name(),
command.description(), command.usage(), Arrays.asList(command.aliases())) {
@Override
public boolean execute(CommandSender sender, String s, String[] args) {
if(!sender.hasPermission("antivpn.command.*")
&& !sender.hasPermission(command.permission())) {
sender.sendMessage(ChatColor.RED + "No permission.");
return true;
}
if(!sender.hasPermission("antivpn.command.*")
&& !sender.hasPermission(command.permission())) {
sender.sendMessage(ChatColor.RED + "No permission.");
return true;
}
sender.sendMessage(ChatColor.translateAlternateColorCodes('&',
command.execute(new BukkitCommandExecutor(sender), args)));
sender.sendMessage(ChatColor.translateAlternateColorCodes('&',
command.execute(new BukkitCommandExecutor(sender), args)));
return true;
}
});
};
registeredCommands.add(newCommand);
commandMap.register("antivpn", newCommand);
}
}
@Override
public void onDisable() {
System.out.println("Stopping plugin services...");
AntiVPN.getInstance().stop();
System.out.println("Unregistering commands...");
try {
Map<String, org.bukkit.command.Command> knownCommands = (Map<String, org.bukkit.command.Command>)
SimpleCommandMap.class.getField("knownCommands").get(commandMap);
knownCommands.values().removeAll(registeredCommands);
registeredCommands.clear();
} catch (IllegalAccessException | NoSuchFieldException e) {
e.printStackTrace();
}
System.out.println("Unregistering listeners...");
HandlerList.unregisterAll(this);
System.out.println("Cancelling any running tasks...");
Bukkit.getScheduler().cancelTasks(this);
}
}