diff --git a/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java b/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java index 04a77bcf3..16e8aff53 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java +++ b/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java @@ -1,8 +1,7 @@ package com.earth2me.essentials; import org.bukkit.command.Command; -import org.bukkit.command.PluginCommand; -import org.bukkit.command.PluginCommandYamlParser; +import org.bukkit.command.PluginIdentifiableCommand; import org.bukkit.plugin.Plugin; import java.util.ArrayList; @@ -16,7 +15,7 @@ import java.util.logging.Logger; public class AlternativeCommandsHandler { private static final Logger LOGGER = Logger.getLogger("Essentials"); - private final transient Map> altcommands = new HashMap<>(); + private final transient Map> altcommands = new HashMap<>(); private final transient Map disabledList = new HashMap<>(); private final transient IEssentials ess; @@ -33,50 +32,54 @@ public class AlternativeCommandsHandler { if (plugin.getDescription().getMain().contains("com.earth2me.essentials")) { return; } - final List commands = PluginCommandYamlParser.parse(plugin); + final List commands = getPluginCommands(plugin); final String pluginName = plugin.getDescription().getName().toLowerCase(Locale.ENGLISH); for (final Command command : commands) { - final PluginCommand pc = (PluginCommand) command; - final List labels = new ArrayList<>(pc.getAliases()); - labels.add(pc.getName()); + final List labels = new ArrayList<>(command.getAliases()); + labels.add(command.getName()); - PluginCommand reg = ess.getServer().getPluginCommand(pluginName + ":" + pc.getName().toLowerCase(Locale.ENGLISH)); - if (reg == null) { - reg = ess.getServer().getPluginCommand(pc.getName().toLowerCase(Locale.ENGLISH)); - } - if (reg == null || !reg.getPlugin().equals(plugin)) { - continue; - } for (final String label : labels) { - final List plugincommands = altcommands.computeIfAbsent(label.toLowerCase(Locale.ENGLISH), k -> new ArrayList<>()); + final List plugincommands = altcommands.computeIfAbsent(label.toLowerCase(Locale.ENGLISH), k -> new ArrayList<>()); boolean found = false; - for (final PluginCommand pc2 : plugincommands) { - if (pc2.getPlugin().equals(plugin)) { - found = true; - break; + for (final Command pc2 : plugincommands) { + if (pc2 instanceof PluginIdentifiableCommand) { + if (((PluginIdentifiableCommand) pc2).getPlugin().equals(plugin)) { + found = true; + break; + } } } if (!found) { - plugincommands.add(reg); + plugincommands.add(command); } } } } + private List getPluginCommands(Plugin plugin) { + final List commands = new ArrayList<>(); + for (Command cmd : ess.getKnownCommandsProvider().getKnownCommands().values()) { + if (cmd instanceof PluginIdentifiableCommand && ((PluginIdentifiableCommand) cmd).getPlugin().getName().equals(plugin.getName())) { + commands.add(cmd); + } + } + return commands; + } + public void removePlugin(final Plugin plugin) { - final Iterator>> iterator = altcommands.entrySet().iterator(); + final Iterator>> iterator = altcommands.entrySet().iterator(); while (iterator.hasNext()) { - final Map.Entry> entry = iterator.next(); - entry.getValue().removeIf(pc -> pc.getPlugin() == null || pc.getPlugin().equals(plugin)); + final Map.Entry> entry = iterator.next(); + entry.getValue().removeIf(pc -> !(pc instanceof PluginIdentifiableCommand) || ((PluginIdentifiableCommand) pc).getPlugin().equals(plugin)); if (entry.getValue().isEmpty()) { iterator.remove(); } } } - public PluginCommand getAlternative(final String label) { - final List commands = altcommands.get(label); + public Command getAlternative(final String label) { + final List commands = altcommands.get(label); if (commands == null || commands.isEmpty()) { return null; } @@ -84,7 +87,7 @@ public class AlternativeCommandsHandler { return commands.get(0); } // return the first command that is not an alias - for (final PluginCommand command : commands) { + for (final Command command : commands) { if (command.getName().equalsIgnoreCase(label)) { return command; } @@ -93,12 +96,14 @@ public class AlternativeCommandsHandler { return commands.get(0); } - public void executed(final String label, final PluginCommand pc) { - final String altString = pc.getPlugin().getName() + ":" + pc.getLabel(); - if (ess.getSettings().isDebug()) { - LOGGER.log(Level.INFO, "Essentials: Alternative command " + label + " found, using " + altString); + public void executed(final String label, final Command pc) { + if (pc instanceof PluginIdentifiableCommand) { + final String altString = ((PluginIdentifiableCommand) pc).getPlugin().getName() + ":" + pc.getLabel(); + if (ess.getSettings().isDebug()) { + LOGGER.log(Level.INFO, "Essentials: Alternative command " + label + " found, using " + altString); + } + disabledList.put(label, altString); } - disabledList.put(label, altString); } public Map disabledCommands() { diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index 75a65abd8..69ec3eaac 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -498,10 +498,10 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { final ClassLoader classLoader, final String commandPath, final String permissionPrefix, final IEssentialsModule module) { if (!getSettings().isCommandOverridden(command.getName()) && (!commandLabel.startsWith("e") || commandLabel.equalsIgnoreCase(command.getName()))) { - final PluginCommand pc = alternativeCommandsHandler.getAlternative(commandLabel); - if (pc != null) { + final Command pc = alternativeCommandsHandler.getAlternative(commandLabel); + if (pc instanceof PluginCommand) { try { - final TabCompleter completer = pc.getTabCompleter(); + final TabCompleter completer = ((PluginCommand) pc).getTabCompleter(); if (completer != null) { return completer.onTabComplete(cSender, command, commandLabel, args); } @@ -574,7 +574,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { public boolean onCommandEssentials(final CommandSender cSender, final Command command, final String commandLabel, final String[] args, final ClassLoader classLoader, final String commandPath, final String permissionPrefix, final IEssentialsModule module) { // Allow plugins to override the command via onCommand if (!getSettings().isCommandOverridden(command.getName()) && (!commandLabel.startsWith("e") || commandLabel.equalsIgnoreCase(command.getName()))) { - final PluginCommand pc = alternativeCommandsHandler.getAlternative(commandLabel); + final Command pc = alternativeCommandsHandler.getAlternative(commandLabel); if (pc != null) { alternativeCommandsHandler.executed(commandLabel, pc); try {