mirror of
https://github.com/aikar/commands.git
synced 2026-05-31 06:11:55 +00:00
Fix CommandCompletionContext.getResolvedArg (#266)
This commit is contained in:
@@ -101,9 +101,13 @@ public class CommandCompletionContext<I extends CommandIssuer> {
|
||||
throw new IllegalStateException("Can not find any parameter that can satisfy " + clazz.getName());
|
||||
}
|
||||
}
|
||||
return getContextValueByName(clazz, name);
|
||||
}
|
||||
|
||||
public <T> T getContextValueByName(Class<? extends T> clazz, String name) throws InvalidCommandArgument {
|
||||
//noinspection unchecked
|
||||
Map<String, Object> resolved = command.resolveContexts(issuer, args, args.size() - 1);
|
||||
if (resolved == null || paramIdx > resolved.size()) {
|
||||
Map<String, Object> resolved = command.resolveContexts(issuer, args, name);
|
||||
if (resolved == null || !resolved.containsKey(name)) {
|
||||
ACFUtil.sneaky(new CommandCompletionTextLookupException());
|
||||
}
|
||||
|
||||
|
||||
@@ -215,23 +215,20 @@ public class RegisteredCommand<CEC extends CommandExecutionContext<CEC, ? extend
|
||||
|
||||
@Nullable
|
||||
Map<String, Object> resolveContexts(CommandIssuer sender, List<String> args) throws InvalidCommandArgument {
|
||||
return resolveContexts(sender, args, parameters.length);
|
||||
return resolveContexts(sender, args, null);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
Map<String, Object> resolveContexts(CommandIssuer sender, List<String> args, int argLimit) throws InvalidCommandArgument {
|
||||
Map<String, Object> resolveContexts(CommandIssuer sender, List<String> args, String name) throws InvalidCommandArgument {
|
||||
args = new ArrayList<>(args);
|
||||
String[] origArgs = args.toArray(new String[args.size()]);
|
||||
Map<String, Object> 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<CEC> parameter = parameters[i];
|
||||
if (!parameter.canConsumeInput()) {
|
||||
argLimit++;
|
||||
}
|
||||
final String parameterName = parameter.getName();
|
||||
final Class<?> type = parameter.getType();
|
||||
//noinspection unchecked
|
||||
|
||||
Reference in New Issue
Block a user