From 05323ea8f8d03154881a6500ca853e2a5c685888 Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 8 Aug 2017 21:05:42 -0400 Subject: [PATCH] Get things back compiling --- .../aikar/commands/BukkitCommandManager.java | 6 +- .../co/aikar/commands/BukkitRootCommand.java | 19 +----- .../aikar/commands/BungeeCommandManager.java | 1 + .../co/aikar/commands/BungeeRootCommand.java | 25 +++----- .../java/co/aikar/commands/BaseCommand.java | 4 +- .../java/co/aikar/commands/CommandHelp.java | 58 ++++++++----------- .../co/aikar/commands/CommandManager.java | 25 +++++++- .../java/co/aikar/commands/RootCommand.java | 16 +++++ .../aikar/commands/SpongeCommandManager.java | 1 + .../co/aikar/commands/SpongeRootCommand.java | 32 +++++----- 10 files changed, 94 insertions(+), 93 deletions(-) diff --git a/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java b/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java index 4aed8844..5357bdc1 100644 --- a/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java +++ b/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java @@ -71,6 +71,7 @@ public class BukkitCommandManager extends CommandManager tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - return tabComplete(new BukkitCommandIssuer(manager, sender), alias, args); + return tabComplete(manager.getCommandIssuer(sender), alias, args); } @Override public boolean execute(CommandSender sender, String commandLabel, String[] args) { - return execute(new BukkitCommandIssuer(manager, sender), commandLabel, args); + execute(manager.getCommandIssuer(sender), commandLabel, args); + return true; } private List tabComplete(CommandIssuer sender, String alias, String[] args) throws IllegalArgumentException { @@ -71,19 +70,7 @@ public class BukkitRootCommand extends Command implements RootCommand { return new ArrayList<>(completions); } - private boolean execute(CommandIssuer sender, String commandLabel, String[] args) { - for (int i = args.length; i >= 0; i--) { - String checkSub = StringUtils.join(args, " ", 0, i).toLowerCase(); - Set registeredCommands = this.subCommands.get(checkSub); - if (!registeredCommands.isEmpty()) { - registeredCommands.iterator().next().scope.execute(sender, commandLabel, args); - return true; - } - } - this.defCommand.execute(sender, commandLabel, args); - return true; - } public void addChild(BaseCommand command) { if (this.defCommand == null || !command.subCommands.get("__default").isEmpty()) { diff --git a/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java b/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java index 8086b452..66eba620 100644 --- a/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java +++ b/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java @@ -51,6 +51,7 @@ public class BungeeCommandManager extends CommandManager subCommands = new HashMap<>(); + private SetMultimap subCommands = HashMultimap.create(); private List children = new ArrayList<>(); boolean isRegistered = false; @@ -65,26 +66,18 @@ public class BungeeRootCommand extends Command implements RootCommand, TabExecut } @Override - public void execute(CommandSender sender, String[] args) { - execute(new BungeeCommandIssuer(manager, sender), getName(), args); + public SetMultimap getSubCommands() { + return subCommands; } - private void execute(CommandIssuer sender, String commandLabel, String[] args) { - for (int i = args.length; i >= 0; i--) { - String checkSub = ApacheCommonsLangUtil.join(args, " ", 0, i).toLowerCase(); - BaseCommand subHandler = this.subCommands.get(checkSub); - if (subHandler != null) { - subHandler.execute(sender, commandLabel, args); - return; - } - } - - this.defCommand.execute(sender, commandLabel, args); + @Override + public void execute(CommandSender sender, String[] args) { + execute(manager.getCommandIssuer(sender), getName(), args); } @Override public Iterable onTabComplete(CommandSender commandSender, String[] strings) { - return onTabComplete(new BungeeCommandIssuer(manager, commandSender), getName(), strings); + return onTabComplete(manager.getCommandIssuer(commandSender), getName(), strings); } private List onTabComplete(CommandIssuer sender, String alias, String[] args) throws IllegalArgumentException { diff --git a/core/src/main/java/co/aikar/commands/BaseCommand.java b/core/src/main/java/co/aikar/commands/BaseCommand.java index 9efeeeb7..8593c8cc 100644 --- a/core/src/main/java/co/aikar/commands/BaseCommand.java +++ b/core/src/main/java/co/aikar/commands/BaseCommand.java @@ -512,8 +512,8 @@ public abstract class BaseCommand { return false; } - public CommandHelp getCommandHelp(){ - return manager.generateCommandHelp(this); + public CommandHelp getCommandHelp() { + return manager.generateCommandHelp(); } public void help(Object issuer, String[] args) { diff --git a/core/src/main/java/co/aikar/commands/CommandHelp.java b/core/src/main/java/co/aikar/commands/CommandHelp.java index 5aa74f20..133c260c 100644 --- a/core/src/main/java/co/aikar/commands/CommandHelp.java +++ b/core/src/main/java/co/aikar/commands/CommandHelp.java @@ -27,29 +27,27 @@ import com.google.common.collect.SetMultimap; import java.util.*; +@SuppressWarnings("WeakerAccess") public class CommandHelp { private final CommandManager manager; - private final List helpEntries; - private final CommandOperationContext currentContext; + private final CommandIssuer issuer; + private final List helpEntries = new ArrayList<>(); - protected CommandHelp(CommandManager manager, BaseCommand command, CommandOperationContext currentContext) { + public CommandHelp(CommandManager manager, RootCommand rootCommand, CommandIssuer issuer) { this.manager = manager; - this.currentContext = currentContext; + this.issuer = issuer; - List entries = new ArrayList<>(); - for (RootCommand root : command.registeredCommands.values()) { - SetMultimap subCommands = root.getSubCommands(); - subCommands.entries().forEach(e -> { - if (e.getKey().equals("__default") || e.getKey().equals("__unknown")){ - return; - } - RegisteredCommand regCommand = e.getValue(); - entries.add(new HelpEntry(regCommand)); - - }); - } - - this.helpEntries = entries; + SetMultimap subCommands = rootCommand.getSubCommands(); + subCommands.entries().forEach(e -> { + String key = e.getKey(); + if (key.equals("__default") || key.equals("__unknown")){ + return; + } + RegisteredCommand regCommand = e.getValue(); + if (regCommand.hasPermission(issuer)) { + this.helpEntries.add(new HelpEntry(regCommand)); + } + }); } public CommandManager getManager() { @@ -57,28 +55,20 @@ public class CommandHelp { } public void showHelp() { - showHelp(currentContext.getCommandIssuer()); + showHelp(issuer); } public void showHelp(CommandIssuer issuer) { - getHelpEntries().forEach(h -> { - issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_FORMAT, - //{command} {parameters} {seperator} {helptext} - "{command}", h.getCommand(), - "{parameters}", h.getParameterSyntax(), - "{seperator}", h.getHelpText().isEmpty() ? "" : " - ", - "{helptext}", h.getHelpText() - ); - }); - + getHelpEntries().forEach(e -> issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_FORMAT, + //{command} {parameters} {seperator} {helptext} + "{command}", e.getCommand(), + "{parameters}", e.getParameterSyntax(), + "{seperator}", e.getHelpText().isEmpty() ? "" : " - ", + "{helptext}", e.getHelpText() + )); } - public List getHelpEntries() { return helpEntries; } - - public CommandOperationContext getCurrentContext() { - return currentContext; - } } diff --git a/core/src/main/java/co/aikar/commands/CommandManager.java b/core/src/main/java/co/aikar/commands/CommandManager.java index 34510448..314621d0 100644 --- a/core/src/main/java/co/aikar/commands/CommandManager.java +++ b/core/src/main/java/co/aikar/commands/CommandManager.java @@ -25,6 +25,7 @@ package co.aikar.commands; import co.aikar.locales.MessageKeyProvider; import com.google.common.collect.Sets; +import org.jetbrains.annotations.NotNull; import java.lang.reflect.Method; import java.lang.reflect.Parameter; @@ -106,7 +107,29 @@ public abstract class CommandManager > { */ public abstract CommandCompletions getCommandCompletions(); - public abstract CommandHelp generateCommandHelp(BaseCommand command); + public CommandHelp generateCommandHelp(@NotNull String command) { + CommandOperationContext context = getCurrentCommandOperationContext(); + if (context == null) { + throw new IllegalStateException("This method can only be called as part of a command execution."); + } + return generateCommandHelp(context.getCommandIssuer(), command); + } + public CommandHelp generateCommandHelp(CommandIssuer issuer, @NotNull String command) { + return generateCommandHelp(issuer, obtainRootCommand(ACFPatterns.SPACE.split(command, 2)[0])); + } + + public CommandHelp generateCommandHelp() { + CommandOperationContext context = getCurrentCommandOperationContext(); + if (context == null) { + throw new IllegalStateException("This method can only be called as part of a command execution."); + } + String commandLabel = context.getCommandLabel(); + return generateCommandHelp(context.getCommandIssuer(), this.obtainRootCommand(commandLabel)); + } + + public CommandHelp generateCommandHelp(CommandIssuer issuer, RootCommand rootCommand) { + return new CommandHelp(this, rootCommand, issuer); + } /** * Registers a command with ACF diff --git a/core/src/main/java/co/aikar/commands/RootCommand.java b/core/src/main/java/co/aikar/commands/RootCommand.java index 20d3218f..5ba9f684 100644 --- a/core/src/main/java/co/aikar/commands/RootCommand.java +++ b/core/src/main/java/co/aikar/commands/RootCommand.java @@ -23,6 +23,7 @@ package co.aikar.commands; +import co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil; import com.google.common.collect.SetMultimap; import java.util.List; @@ -57,6 +58,21 @@ interface RootCommand { children.add(command); } + default BaseCommand execute(CommandIssuer sender, String commandLabel, String[] args) { + BaseCommand command = getDefCommand(); + for (int i = args.length; i >= 0; i--) { + String checkSub = ApacheCommonsLangUtil.join(args, " ", 0, i).toLowerCase(); + Set registeredCommands = getSubCommands().get(checkSub); + if (!registeredCommands.isEmpty()) { + command = registeredCommands.iterator().next().scope; + break; + } + } + + command.execute(sender, commandLabel, args); + return command; + } + default BaseCommand getDefCommand(){ return null; } diff --git a/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java b/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java index b0964f68..067eddae 100644 --- a/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java +++ b/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java @@ -58,6 +58,7 @@ public class SpongeCommandManager extends CommandManager subCommands = new HashMap<>(); + private SetMultimap subCommands = HashMultimap.create(); private List children = new ArrayList<>(); boolean isRegistered = false; @@ -65,13 +64,13 @@ public class SpongeRootCommand implements CommandCallable, RootCommand { @Override public CommandResult process(@NotNull CommandSource source, @NotNull String arguments) throws CommandException { String[] args = arguments.isEmpty() ? new String[0] : arguments.split(" "); - return this.execute(new SpongeCommandIssuer(manager, source), this.name, args); + return this.executeSponge(manager.getCommandIssuer(source), this.name, args); } @Override public List getSuggestions(@NotNull CommandSource source, @NotNull String arguments, @Nullable Location location) throws CommandException { String[] args = arguments.isEmpty() ? new String[0] : arguments.split(" "); - return tabComplete(new SpongeCommandIssuer(manager, source), this.name, args); + return tabComplete(manager.getCommandIssuer(source), this.name, args); } @Override @@ -100,18 +99,8 @@ public class SpongeRootCommand implements CommandCallable, RootCommand { return new ArrayList<>(completions); } - private CommandResult execute(CommandIssuer sender, String commandLabel, String[] args) { - BaseCommand cmd = this.defCommand; - for (int i = args.length; i >= 0; i--) { - String checkSub = ApacheCommonsLangUtil.join(args, " ", 0, i).toLowerCase(); - BaseCommand subHandler = this.subCommands.get(checkSub); - if (subHandler != null) { - cmd = subHandler; - break; - } - } - - cmd.execute(sender, commandLabel, args); + private CommandResult executeSponge(CommandIssuer sender, String commandLabel, String[] args) { + BaseCommand cmd = execute(sender, commandLabel, args); return ((SpongeCommandOperationContext) cmd.lastCommandOperationContext).getResult(); } @@ -126,4 +115,9 @@ public class SpongeRootCommand implements CommandCallable, RootCommand { public CommandManager getManager() { return manager; } + + @Override + public SetMultimap getSubCommands() { + return subCommands; + } }