From 5b27af89253a37cb4fc3a4578dc654c6a14757e2 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Fri, 4 Sep 2020 03:37:32 +0200 Subject: [PATCH] Fixed prime restart and already registered cmds Commands that are registered in plugin.yml Commands conflicting with Essentials commands have to be registered in plugin.yml --- .../restart/PrimeRestartCommand.java | 1 + .../buttondevteam/lib/chat/Command2MC.java | 51 ++++++++++++++----- 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/Chroma-Core/src/main/java/buttondevteam/core/component/restart/PrimeRestartCommand.java b/Chroma-Core/src/main/java/buttondevteam/core/component/restart/PrimeRestartCommand.java index c2b56c8..30c5d8e 100644 --- a/Chroma-Core/src/main/java/buttondevteam/core/component/restart/PrimeRestartCommand.java +++ b/Chroma-Core/src/main/java/buttondevteam/core/component/restart/PrimeRestartCommand.java @@ -21,6 +21,7 @@ import org.bukkit.command.CommandSender; public class PrimeRestartCommand extends ICommand2MC { private final RestartComponent component; + @Command2.Subcommand public void def(CommandSender sender, @Command2.TextArg @Command2.OptionalArg String somethingrandom) { loud = somethingrandom != null; if (Bukkit.getOnlinePlayers().size() > 0) { diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/chat/Command2MC.java b/Chroma-Core/src/main/java/buttondevteam/lib/chat/Command2MC.java index 47f9d9d..102ce0d 100644 --- a/Chroma-Core/src/main/java/buttondevteam/lib/chat/Command2MC.java +++ b/Chroma-Core/src/main/java/buttondevteam/lib/chat/Command2MC.java @@ -184,10 +184,20 @@ public class Command2MC extends Command2 implemen @Override public boolean handleCommand(Command2MCSender sender, String commandline) { + return handleCommand(sender, commandline, true); + } + + private boolean handleCommand(Command2MCSender sender, String commandline, boolean checkPlugin) { int i = commandline.indexOf(' '); String mainpath = commandline.substring(1, i == -1 ? commandline.length() : i); //Without the slash PluginCommand pcmd; - if (MainPlugin.Instance.prioritizeCustomCommands().get() + /*System.out.println("Command line: " + commandline); + System.out.println("Prioritize: " + MainPlugin.Instance.prioritizeCustomCommands().get()); + System.out.println("PCMD: " + (pcmd = Bukkit.getPluginCommand(mainpath))); + if (pcmd != null) + System.out.println("ButtonPlugin: " + (pcmd.getPlugin() instanceof ButtonPlugin));*/ + if (!checkPlugin + || MainPlugin.Instance.prioritizeCustomCommands().get() || (pcmd = Bukkit.getPluginCommand(mainpath)) == null //Our commands aren't PluginCommands || pcmd.getPlugin() instanceof ButtonPlugin) //Unless it's specified in the plugin.yml return super.handleCommand(sender, commandline); @@ -205,11 +215,21 @@ public class Command2MC extends Command2 implemen int x = path.indexOf(' '); var mainPath = path.substring(0, x == -1 ? path.length() : x); Command bukkitCommand; - { - var oldcmd = cmdmap.getCommand(mainPath); + { //TODO: Commands conflicting with Essentials have to be registered in plugin.yml + var oldcmd = cmdmap.getCommand(command.getPlugin().getName() + ":" + mainPath); //The label with the fallback prefix is always registered + if (oldcmd == null) { + bukkitCommand = new BukkitCommand(mainPath); + cmdmap.register(command.getPlugin().getName(), bukkitCommand); + } else { + bukkitCommand = oldcmd; + if (bukkitCommand instanceof PluginCommand) + ((PluginCommand) bukkitCommand).setExecutor(this::executeCommand); + } bukkitCommand = oldcmd == null ? new BukkitCommand(mainPath) : oldcmd; + /*System.out.println("oldcmd: " + oldcmd); + System.out.println("bukkitCommand: " + bukkitCommand);*/ } - cmdmap.register(command.getPlugin().getName(), bukkitCommand); + //System.out.println("Registering to " + command.getPlugin().getName()); if (CommodoreProvider.isSupported()) TabcompleteHelper.registerTabcomplete(command, subcmds, bukkitCommand); } catch (Exception e) { @@ -218,6 +238,19 @@ public class Command2MC extends Command2 implemen } } + private boolean executeCommand(CommandSender sender, Command command, String label, String[] args) { + var user = ChromaGamerBase.getFromSender(sender); + if (user == null) { + TBMCCoreAPI.SendException("Failed to run Bukkit command for user!", new Throwable("No Chroma user found")); + sender.sendMessage("§cAn internal error occurred."); + return true; + } + //System.out.println("Executing " + label + " which is actually " + command.getName()); + handleCommand(new Command2MCSender(sender, user.channel().get(), sender), + ("/" + command.getName() + " " + String.join(" ", args)).trim(), false); ///trim(): remove space if there are no args + return true; + } + private static class BukkitCommand extends Command { protected BukkitCommand(String name) { super(name); @@ -225,15 +258,7 @@ public class Command2MC extends Command2 implemen @Override public boolean execute(CommandSender sender, String commandLabel, String[] args) { - var user = ChromaGamerBase.getFromSender(sender); - if (user == null) { - TBMCCoreAPI.SendException("Failed to run Bukkit command for user!", new Throwable("No Chroma user found")); - sender.sendMessage("§cAn internal error occurred."); - return true; - } - ButtonPlugin.getCommand2MC().handleCommand(new Command2MCSender(sender, user.channel().get(), sender), - "/" + getName() + " " + String.join(" ", args)); - return true; + return ButtonPlugin.getCommand2MC().executeCommand(sender, this, commandLabel, args); } @Override