From 3750190f2c17b8ec78ba92d42b246b1a4262b40a Mon Sep 17 00:00:00 2001 From: sk89q Date: Sat, 28 Jun 2014 17:04:38 -0700 Subject: [PATCH] Passed a string of parent commands rather than just the current command. --- .../sk89q/worldedit/extension/platform/CommandManager.java | 2 +- .../com/sk89q/worldedit/util/command/CommandCallable.java | 6 ++---- .../com/sk89q/worldedit/util/command/SimpleDispatcher.java | 7 ++++--- .../util/command/parametric/ParametricCallable.java | 6 +++--- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/sk89q/worldedit/extension/platform/CommandManager.java b/src/main/java/com/sk89q/worldedit/extension/platform/CommandManager.java index 41f1e471f..cc9f26556 100644 --- a/src/main/java/com/sk89q/worldedit/extension/platform/CommandManager.java +++ b/src/main/java/com/sk89q/worldedit/extension/platform/CommandManager.java @@ -216,7 +216,7 @@ public final class CommandManager { long start = System.currentTimeMillis(); try { - dispatcher.call(null, Joiner.on(" ").join(split), locals); + dispatcher.call(Joiner.on(" ").join(split), locals, new String[0]); } catch (CommandPermissionsException e) { actor.printError("You don't have permission to do this."); } catch (InvalidUsageException e) { diff --git a/src/main/java/com/sk89q/worldedit/util/command/CommandCallable.java b/src/main/java/com/sk89q/worldedit/util/command/CommandCallable.java index d8254f4bf..9a16a467c 100644 --- a/src/main/java/com/sk89q/worldedit/util/command/CommandCallable.java +++ b/src/main/java/com/sk89q/worldedit/util/command/CommandCallable.java @@ -22,7 +22,6 @@ package com.sk89q.worldedit.util.command; import com.sk89q.minecraft.util.commands.CommandException; import com.sk89q.minecraft.util.commands.CommandLocals; -import javax.annotation.Nullable; import java.util.List; import java.util.Set; @@ -43,14 +42,13 @@ public interface CommandCallable { *

* The implementing class must perform the necessary permission checks. * - * @param alias the alias that was used to invoke this command, - * which may be null if this is a "root" command * @param arguments the arguments * @param locals the locals + * @param parentCommands a list of parent commands, with the first most entry being the top-level command * @return the called command, or null if there was no command found * @throws CommandException thrown on a command error */ - boolean call(@Nullable String alias, String arguments, CommandLocals locals) throws CommandException; + boolean call(String arguments, CommandLocals locals, String[] parentCommands) throws CommandException; /** * Get a list of suggestions based on input. diff --git a/src/main/java/com/sk89q/worldedit/util/command/SimpleDispatcher.java b/src/main/java/com/sk89q/worldedit/util/command/SimpleDispatcher.java index 2dc778f49..12d2ebde5 100644 --- a/src/main/java/com/sk89q/worldedit/util/command/SimpleDispatcher.java +++ b/src/main/java/com/sk89q/worldedit/util/command/SimpleDispatcher.java @@ -22,7 +22,6 @@ package com.sk89q.worldedit.util.command; import com.google.common.base.Joiner; import com.sk89q.minecraft.util.commands.*; -import javax.annotation.Nullable; import java.util.*; /** @@ -87,7 +86,7 @@ public class SimpleDispatcher implements Dispatcher { } @Override - public boolean call(@Nullable String alias, String arguments, CommandLocals locals) throws CommandException { + public boolean call(String arguments, CommandLocals locals, String[] parentCommands) throws CommandException { // We have permission for this command if we have permissions for subcommands if (!testPermission(locals)) { throw new CommandPermissionsException(); @@ -101,11 +100,13 @@ public class SimpleDispatcher implements Dispatcher { } else if (split.length > 0) { String subCommand = split[0]; String subArguments = Joiner.on(" ").join(Arrays.copyOfRange(split, 1, split.length)); + String[] subParents = Arrays.copyOf(parentCommands, parentCommands.length + 1); + subParents[parentCommands.length] = subCommand; CommandMapping mapping = get(subCommand); if (mapping != null) { try { - mapping.getCallable().call(subCommand, subArguments, locals); + mapping.getCallable().call(subArguments, locals, subParents); } catch (CommandException e) { e.prependStack(subCommand); throw e; diff --git a/src/main/java/com/sk89q/worldedit/util/command/parametric/ParametricCallable.java b/src/main/java/com/sk89q/worldedit/util/command/parametric/ParametricCallable.java index 46b8e12ff..8ba6f32c4 100644 --- a/src/main/java/com/sk89q/worldedit/util/command/parametric/ParametricCallable.java +++ b/src/main/java/com/sk89q/worldedit/util/command/parametric/ParametricCallable.java @@ -23,7 +23,6 @@ import com.sk89q.minecraft.util.commands.*; import com.sk89q.worldedit.util.command.*; import com.sk89q.worldedit.util.command.binding.Switch; -import javax.annotation.Nullable; import java.lang.annotation.Annotation; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -160,13 +159,14 @@ class ParametricCallable implements CommandCallable { } @Override - public boolean call(@Nullable String alias, String stringArguments, CommandLocals locals) throws CommandException { + public boolean call(String stringArguments, CommandLocals locals, String[] parentCommands) throws CommandException { // Test permission if (!testPermission(locals)) { throw new CommandPermissionsException(); } - String[] split = CommandContext.split(alias + " " + stringArguments); + String calledCommand = parentCommands.length > 0 ? parentCommands[parentCommands.length - 1] : "_"; + String[] split = CommandContext.split(calledCommand + " " + stringArguments); CommandContext context = new CommandContext(split, getValueFlags(), false, locals); Object[] args = new Object[parameters.length];