From 01d36aecd8006f5ef85ff2dd546c7b1aaa86a761 Mon Sep 17 00:00:00 2001 From: jmp Date: Sat, 5 Dec 2020 15:14:16 -0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Commodore=20registration?= =?UTF-8?q?=20on=20Bukkit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/BukkitCommandManager.java | 1 + .../BukkitPluginRegistrationHandler.java | 45 +++++++++++-------- .../paper/PaperCommandManager.java | 1 - 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitCommandManager.java b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitCommandManager.java index 6fd2f834..b67ce76b 100644 --- a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitCommandManager.java +++ b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitCommandManager.java @@ -318,6 +318,7 @@ public class BukkitCommandManager extends CommandManager implements Brigad final CloudCommodoreManager cloudCommodoreManager = new CloudCommodoreManager<>(this); cloudCommodoreManager.initialize(this); this.setCommandRegistrationHandler(cloudCommodoreManager); + this.setSplitAliases(true); } catch (final Throwable e) { throw new BrigadierFailureException(BrigadierFailureReason.COMMODORE_NOT_PRESENT, e); } diff --git a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitPluginRegistrationHandler.java b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitPluginRegistrationHandler.java index 1ce37860..8c1cc610 100644 --- a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitPluginRegistrationHandler.java +++ b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitPluginRegistrationHandler.java @@ -30,6 +30,7 @@ import cloud.commandframework.arguments.StaticArgument; import cloud.commandframework.internal.CommandRegistrationHandler; import org.bukkit.Bukkit; import org.bukkit.command.CommandMap; +import org.bukkit.command.PluginIdentifiableCommand; import org.bukkit.command.SimpleCommandMap; import org.bukkit.help.GenericCommandHelpTopic; import org.checkerframework.checker.nullness.qual.NonNull; @@ -38,6 +39,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -95,30 +97,20 @@ public class BukkitPluginRegistrationHandler implements CommandRegistrationHa aliases.forEach(alias -> this.bukkitCommands.remove(alias)); } + final Set newAliases = new HashSet<>(); + for (final String alias : aliases) { final String namespacedAlias = this.getNamespacedLabel(alias); - - this.recognizedAliases.add(namespacedAlias); + newAliases.add(namespacedAlias); if (!this.bukkitCommandOrAliasExists(alias)) { - this.recognizedAliases.add(alias); - } - - if (this.bukkitCommandManager.getSplitAliases()) { - if (this.bukkitCommandOrAliasExists(alias)) { - this.registerExternal(namespacedAlias, command, bukkitCommand); - } else { - this.registerExternal(namespacedAlias, command, bukkitCommand); - this.registerExternal(alias, command, bukkitCommand); - } + newAliases.add(alias); } } if (!this.bukkitCommandExists(label)) { - this.recognizedAliases.add(label); - this.registerExternal(label, command, bukkitCommand); + newAliases.add(label); } - this.recognizedAliases.add(this.getNamespacedLabel(label)); - this.registerExternal(namespacedLabel, command, bukkitCommand); + newAliases.add(namespacedLabel); this.commandMap.register( label, @@ -126,6 +118,11 @@ public class BukkitPluginRegistrationHandler implements CommandRegistrationHa bukkitCommand ); + this.recognizedAliases.addAll(newAliases); + if (this.bukkitCommandManager.getSplitAliases()) { + newAliases.forEach(alias -> this.registerExternal(alias, command, bukkitCommand)); + } + this.registeredCommands.put(commandArgument, bukkitCommand); return true; } @@ -152,7 +149,7 @@ public class BukkitPluginRegistrationHandler implements CommandRegistrationHa } /** - * Returns true if a command exists in the Bukkit command map, and is not an alias. + * Returns true if a command exists in the Bukkit command map, is not an alias, and is not owned by us. * * @param commandLabel label to check * @return whether the command exists and is not an alias @@ -162,17 +159,27 @@ public class BukkitPluginRegistrationHandler implements CommandRegistrationHa if (existingCommand == null) { return false; } + if (existingCommand instanceof PluginIdentifiableCommand) { + return existingCommand.getLabel().equals(commandLabel) + && !((PluginIdentifiableCommand) existingCommand).getPlugin().getName() + .equalsIgnoreCase(this.bukkitCommandManager.getOwningPlugin().getName()); + } return existingCommand.getLabel().equals(commandLabel); } /** - * Returns true if a command exists in the Bukkit command map, whether or not it is an alias. + * Returns true if a command exists in the Bukkit command map, and it is not owned by us, whether or not it is an alias. * * @param commandLabel label to check * @return whether the command exists */ private boolean bukkitCommandOrAliasExists(final String commandLabel) { - return this.bukkitCommands.containsKey(commandLabel); + final org.bukkit.command.Command command = this.bukkitCommands.get(commandLabel); + if (command instanceof PluginIdentifiableCommand) { + return !((PluginIdentifiableCommand) command).getPlugin().getName() + .equalsIgnoreCase(this.bukkitCommandManager.getOwningPlugin().getName()); + } + return command != null; } } diff --git a/cloud-minecraft/cloud-paper/src/main/java/cloud/commandframework/paper/PaperCommandManager.java b/cloud-minecraft/cloud-paper/src/main/java/cloud/commandframework/paper/PaperCommandManager.java index 74797027..28af9458 100644 --- a/cloud-minecraft/cloud-paper/src/main/java/cloud/commandframework/paper/PaperCommandManager.java +++ b/cloud-minecraft/cloud-paper/src/main/java/cloud/commandframework/paper/PaperCommandManager.java @@ -106,7 +106,6 @@ public class PaperCommandManager extends BukkitCommandManager { this.paperBrigadierListener, this.getOwningPlugin() ); - this.setSplitAliases(true); } catch (final Throwable e) { throw new BrigadierFailureException(BrigadierFailureReason.PAPER_BRIGADIER_INITIALIZATION_FAILURE, e); }