From c253dcaed759d3f1d9e2c221110d3be1b69569af Mon Sep 17 00:00:00 2001 From: Aikar Date: Sat, 20 May 2017 11:47:54 -0400 Subject: [PATCH 1/3] Fix Command Replacements not being applied correctly to aliases - fixes #37 --- core/src/main/java/co/aikar/commands/BaseCommand.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/co/aikar/commands/BaseCommand.java b/core/src/main/java/co/aikar/commands/BaseCommand.java index 8bdea0a0..87d405d8 100644 --- a/core/src/main/java/co/aikar/commands/BaseCommand.java +++ b/core/src/main/java/co/aikar/commands/BaseCommand.java @@ -112,12 +112,13 @@ public class BaseCommand extends Command { void onRegister(CommandManager manager, String cmd) { this.manager = manager; final Class self = this.getClass(); - CommandAlias rootCmdAlias = self.getAnnotation(CommandAlias.class); + CommandAlias rootCmdAliasAnno = self.getAnnotation(CommandAlias.class); + String rootCmdAlias = rootCmdAliasAnno != null ? manager.getCommandReplacements().replace(rootCmdAliasAnno.value()).toLowerCase() : null; if (cmd == null) { if (rootCmdAlias == null) { cmd = "__" + self.getSimpleName(); } else { - cmd = ACFPatterns.PIPE.split(manager.getCommandReplacements().replace(rootCmdAlias.value()))[0]; + cmd = ACFPatterns.PIPE.split(rootCmdAlias)[0]; } cmd = cmd.toLowerCase(); try { @@ -185,7 +186,7 @@ public class BaseCommand extends Command { if (rootCmdAlias != null) { Set cmdList = new HashSet<>(); - Collections.addAll(cmdList, ACFPatterns.PIPE.split(rootCmdAlias.value().toLowerCase())); + Collections.addAll(cmdList, ACFPatterns.PIPE.split(rootCmdAlias)); cmdList.remove(cmd); for (String cmdAlias : cmdList) { register(cmdAlias, this); From e79912299fab54e35d3bbc8206aca01440975ff4 Mon Sep 17 00:00:00 2001 From: Aikar Date: Sat, 20 May 2017 12:22:56 -0400 Subject: [PATCH 2/3] add some more example --- example/src/main/java/co/aikar/acfexample/ACFExample.java | 1 + example/src/main/java/co/aikar/acfexample/SomeCommand.java | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/example/src/main/java/co/aikar/acfexample/ACFExample.java b/example/src/main/java/co/aikar/acfexample/ACFExample.java index 8e3b6d4c..fc058cc7 100644 --- a/example/src/main/java/co/aikar/acfexample/ACFExample.java +++ b/example/src/main/java/co/aikar/acfexample/ACFExample.java @@ -41,6 +41,7 @@ public final class ACFExample extends JavaPlugin { private void registerCommands() { commandManager = ACF.createManager(this); commandManager.getCommandReplacements().addReplacements("test", "foobar", "%foo", "barbaz"); + commandManager.getCommandReplacements().addReplacement("testcmd", "test4|foobar|barbaz"); commandManager.getCommandContexts().registerContext(SomeObject.class, SomeObject.getContextResolver()); commandManager.getCommandCompletions().registerCompletion("test", (sender, config, input, c) -> ( Lists.newArrayList("foo", "bar", "baz") diff --git a/example/src/main/java/co/aikar/acfexample/SomeCommand.java b/example/src/main/java/co/aikar/acfexample/SomeCommand.java index cbc10a37..4d211d28 100644 --- a/example/src/main/java/co/aikar/acfexample/SomeCommand.java +++ b/example/src/main/java/co/aikar/acfexample/SomeCommand.java @@ -40,8 +40,7 @@ import org.bukkit.entity.Player; @CommandAlias("acf|somecommand|sc|somcom") public class SomeCommand extends BaseCommand { - @Subcommand("test4") - @CommandAlias("acftest|acft") + @CommandAlias("%testcmd") public void onCommand(CommandSender sender, SomeObject someObject) { sender.sendMessage("You got an object of type: " + someObject.getClass().getName() + " with a value of: " + someObject.getValue()); } From e2132fef84ba90eb3b308c53d88d1cebc62fdc9c Mon Sep 17 00:00:00 2001 From: Aikar Date: Sat, 20 May 2017 12:27:59 -0400 Subject: [PATCH 3/3] Warn if you register replacements after commands --- .../java/co/aikar/commands/BukkitCommandManager.java | 5 +++++ .../main/java/co/aikar/commands/CommandManager.java | 3 ++- .../java/co/aikar/commands/CommandReplacements.java | 11 +++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/co/aikar/commands/BukkitCommandManager.java b/core/src/main/java/co/aikar/commands/BukkitCommandManager.java index 0e73a4e6..7e58cd5c 100644 --- a/core/src/main/java/co/aikar/commands/BukkitCommandManager.java +++ b/core/src/main/java/co/aikar/commands/BukkitCommandManager.java @@ -101,6 +101,11 @@ public class BukkitCommandManager extends CommandManager { return completions; } + @Override + public boolean hasRegisteredCommands() { + return !registeredCommands.isEmpty(); + } + @Override public void registerCommand(BaseCommand command) { final String plugin = this.plugin.getName().toLowerCase(); diff --git a/core/src/main/java/co/aikar/commands/CommandManager.java b/core/src/main/java/co/aikar/commands/CommandManager.java index 8273a9ea..5cef73af 100644 --- a/core/src/main/java/co/aikar/commands/CommandManager.java +++ b/core/src/main/java/co/aikar/commands/CommandManager.java @@ -32,7 +32,7 @@ import java.util.Map; public abstract class CommandManager { protected Map rootCommands = new HashMap<>(); - protected CommandReplacements replacements = new CommandReplacements(); + protected CommandReplacements replacements = new CommandReplacements(this); /** * Gets the command contexts manager @@ -66,6 +66,7 @@ public abstract class CommandManager { * @return boolean */ public abstract void registerCommand(BaseCommand command); + public abstract boolean hasRegisteredCommands(); public abstract TimingManager getTimings(); diff --git a/core/src/main/java/co/aikar/commands/CommandReplacements.java b/core/src/main/java/co/aikar/commands/CommandReplacements.java index aceceb04..cf8e5b79 100644 --- a/core/src/main/java/co/aikar/commands/CommandReplacements.java +++ b/core/src/main/java/co/aikar/commands/CommandReplacements.java @@ -32,6 +32,12 @@ import java.util.regex.Pattern; * Manages replacement template strings */ public class CommandReplacements { + + private final CommandManager manager; + + CommandReplacements(CommandManager manager) { + this.manager = manager; + } private final Map> replacements = new LinkedHashMap<>(); public void addReplacements(String... replacements) { @@ -44,6 +50,11 @@ public class CommandReplacements { } public String addReplacement(String key, String val) { + if (this.manager.hasRegisteredCommands()) { + ACFLog.severe("You are registering replacements after you have registered your commands!"); + ACFLog.severe("This is not allowed, and this replacement (" + key + ") will not work for any previously registered command."); + } + key = ACFPatterns.PERCENTAGE.matcher(key.toLowerCase()).replaceAll(""); Pattern pattern = Pattern.compile("%" + Pattern.quote(key) + "\\b", Pattern.CASE_INSENSITIVE);