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);