Skip to content

Commit

Permalink
Further autocomplete fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
fullwall committed Mar 21, 2023
1 parent b2b300b commit ade115c
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 11 deletions.
15 changes: 11 additions & 4 deletions src/main/java/net/citizensnpcs/api/command/CommandContext.java
Expand Up @@ -48,7 +48,7 @@ public class CommandContext {
private final CommandSender sender;
protected final Map<String, String> valueFlags = Maps.newHashMap();

public CommandContext(CommandSender sender, String[] args) {
public CommandContext(boolean clearFlags, CommandSender sender, String[] args) {
this.sender = sender;
this.rawArgs = new String[args.length];
System.arraycopy(args, 0, rawArgs, 0, args.length);
Expand Down Expand Up @@ -100,12 +100,15 @@ public CommandContext(CommandSender sender, String[] args) {

if (inner != -1) {
valueFlags.put(args[i].toLowerCase().substring(2), args[inner]);
args[i] = "";
args[inner] = "";
if (clearFlags) {
args[i] = "";
args[inner] = "";
}
}
} else if (FLAG.matcher(args[i]).matches()) {
for (int k = 1; k < args[i].length(); k++)
for (int k = 1; k < args[i].length(); k++) {
flags.add(args[i].charAt(k));
}
args[i] = "";
}
}
Expand All @@ -119,6 +122,10 @@ public CommandContext(CommandSender sender, String[] args) {
this.args = copied.toArray(new String[copied.size()]);
}

public CommandContext(CommandSender sender, String[] args) {
this(true, sender, args);
}

public CommandContext(String[] args) {
this(null, args);
}
Expand Down
17 changes: 10 additions & 7 deletions src/main/java/net/citizensnpcs/api/command/CommandManager.java
Expand Up @@ -34,6 +34,7 @@

import com.google.common.base.Joiner;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
Expand Down Expand Up @@ -423,30 +424,32 @@ public List<String> onTabComplete(CommandSender sender, org.bukkit.command.Comma
String[] newArgs = new String[args.length + 1];
System.arraycopy(args, 0, newArgs, 1, args.length);
newArgs[0] = command.getName().toLowerCase();
CommandContext context = new CommandContext(sender, newArgs);
CommandContext context = new CommandContext(false, sender, newArgs);

results.addAll(cmd.getArgTabCompletions(context, sender, args.length - 1));

Collection<String> valueFlags = cmd.valueFlags();
String lastArg = (newArgs.length >= 2 ? newArgs[newArgs.length - 2] : newArgs[newArgs.length - 1])
.toLowerCase();
String hyphenStrippedArg = lastArg.replaceFirst("--", "");

if (lastArg.startsWith("--") && valueFlags.contains(hyphenStrippedArg)) {
if (lastArg.startsWith("--") && cmd.valueFlags().contains(hyphenStrippedArg)) {
results.addAll(cmd.getFlagTabCompletions(context, sender, hyphenStrippedArg));
} else {
for (String valueFlag : valueFlags) {
if ((newArgs[newArgs.length - 1].startsWith("--")) && valueFlag.startsWith(hyphenStrippedArg)) {
lastArg = newArgs[newArgs.length - 1];
hyphenStrippedArg = lastArg.replaceFirst("--", "");
boolean isEmpty = lastArg.isEmpty() || ImmutableSet.of("-", "--").contains(lastArg);
for (String valueFlag : cmd.valueFlags()) {
if (lastArg.startsWith("--") && valueFlag.startsWith(hyphenStrippedArg)) {
results.add("--" + valueFlag);
} else if (newArgs[newArgs.length - 1].isEmpty() && !context.hasValueFlag(valueFlag)) {
} else if (isEmpty && !context.hasValueFlag(valueFlag)) {
results.add("--" + valueFlag);
}
}

String flags = cmd.commandAnnotation.flags();
for (int i = 0; i < flags.length(); i++) {
char c = flags.charAt(i);
if (newArgs[newArgs.length - 1].isEmpty() && !context.hasFlag(c)) {
if (lastArg.isEmpty() && !context.hasFlag(c)) {
results.add("-" + c);
}
}
Expand Down

0 comments on commit ade115c

Please sign in to comment.