diff --git a/core/src/main/java/co/aikar/commands/CommandCompletionContext.java b/core/src/main/java/co/aikar/commands/CommandCompletionContext.java index 8000f9a7..ffe01ccb 100644 --- a/core/src/main/java/co/aikar/commands/CommandCompletionContext.java +++ b/core/src/main/java/co/aikar/commands/CommandCompletionContext.java @@ -101,9 +101,13 @@ public class CommandCompletionContext { throw new IllegalStateException("Can not find any parameter that can satisfy " + clazz.getName()); } } + return getContextValueByName(clazz, name); + } + + public T getContextValueByName(Class clazz, String name) throws InvalidCommandArgument { //noinspection unchecked - Map resolved = command.resolveContexts(issuer, args, args.size() - 1); - if (resolved == null || paramIdx > resolved.size()) { + Map resolved = command.resolveContexts(issuer, args, name); + if (resolved == null || !resolved.containsKey(name)) { ACFUtil.sneaky(new CommandCompletionTextLookupException()); } diff --git a/core/src/main/java/co/aikar/commands/RegisteredCommand.java b/core/src/main/java/co/aikar/commands/RegisteredCommand.java index 2c875fe3..6241e170 100644 --- a/core/src/main/java/co/aikar/commands/RegisteredCommand.java +++ b/core/src/main/java/co/aikar/commands/RegisteredCommand.java @@ -215,23 +215,20 @@ public class RegisteredCommand resolveContexts(CommandIssuer sender, List args) throws InvalidCommandArgument { - return resolveContexts(sender, args, parameters.length); + return resolveContexts(sender, args, null); } @Nullable - Map resolveContexts(CommandIssuer sender, List args, int argLimit) throws InvalidCommandArgument { + Map resolveContexts(CommandIssuer sender, List args, String name) throws InvalidCommandArgument { args = new ArrayList<>(args); String[] origArgs = args.toArray(new String[args.size()]); Map passedArgs = new LinkedHashMap<>(); int remainingRequired = requiredResolvers; CommandOperationContext opContext = CommandManager.getCurrentCommandOperationContext(); - for (int i = 0; i < parameters.length && i < argLimit; i++) { + for (int i = 0; i < parameters.length && (name == null || !passedArgs.containsKey(name)); i++) { boolean isLast = i == parameters.length - 1; boolean allowOptional = remainingRequired == 0; final CommandParameter parameter = parameters[i]; - if (!parameter.canConsumeInput()) { - argLimit++; - } final String parameterName = parameter.getName(); final Class type = parameter.getType(); //noinspection unchecked