Passed a string of parent commands rather than just the current command.

This commit is contained in:
sk89q 2014-06-28 17:04:38 -07:00
parent 10c45fcb22
commit 3750190f2c
4 changed files with 10 additions and 11 deletions

View File

@ -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) {

View File

@ -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 {
* </p>
* 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.

View File

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

View File

@ -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];