From 9a048999783ac3fd9e9c441656c8c17cf327d4d0 Mon Sep 17 00:00:00 2001 From: JOO200 Date: Fri, 14 Aug 2020 00:36:54 +0200 Subject: [PATCH] Fix CommandCompletionContext.getResolvedArg (#266) --- .../java/co/aikar/commands/CommandCompletionContext.java | 8 ++++++-- .../main/java/co/aikar/commands/RegisteredCommand.java | 9 +++------ 2 files changed, 9 insertions(+), 8 deletions(-) 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