mirror of
https://github.com/Minestom/Minestom.git
synced 2025-01-23 16:41:35 +01:00
Fix suggestion chaining
This commit is contained in:
parent
a47bf24034
commit
158df922bc
@ -1,5 +1,6 @@
|
||||
package net.minestom.server.command.builder.arguments;
|
||||
|
||||
import com.google.common.annotations.Beta;
|
||||
import net.minestom.server.command.builder.ArgumentCallback;
|
||||
import net.minestom.server.command.builder.Command;
|
||||
import net.minestom.server.command.builder.CommandExecutor;
|
||||
@ -202,6 +203,7 @@ public abstract class Argument<T> {
|
||||
return suggestionCallback;
|
||||
}
|
||||
|
||||
@Beta
|
||||
public Argument<T> setSuggestionCallback(@NotNull SuggestionCallback suggestionCallback) {
|
||||
this.suggestionCallback = suggestionCallback;
|
||||
return this;
|
||||
|
@ -153,7 +153,8 @@ public class CommandParser {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static ArgumentQueryResult findSuggestibleArgument(@NotNull Command command, String[] args, String commandString) {
|
||||
public static ArgumentQueryResult findSuggestibleArgument(@NotNull Command command, String[] args, String commandString,
|
||||
boolean trailingSpace) {
|
||||
final Collection<CommandSyntax> syntaxes = command.getSyntaxes();
|
||||
|
||||
Int2ObjectRBTreeMap<ArgumentQueryResult> suggestions = new Int2ObjectRBTreeMap<>(Collections.reverseOrder());
|
||||
@ -200,9 +201,17 @@ public class CommandParser {
|
||||
maxArgIndex = argIndex;
|
||||
}
|
||||
|
||||
// Don't compute following arguments if the syntax is incorrect
|
||||
if (!argumentResult.correct) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Don't compute unrelated arguments
|
||||
final boolean isLast = inputIndex == args.length;
|
||||
if (isLast && !trailingSpace) {
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
if (maxArg != null) {
|
||||
suggestions.put(maxArgIndex, maxArg);
|
||||
|
@ -34,7 +34,7 @@ public class TabCompleteListener {
|
||||
}
|
||||
|
||||
final ArgumentQueryResult queryResult = CommandParser.findSuggestibleArgument(commandQueryResult.command,
|
||||
commandQueryResult.args, commandString);
|
||||
commandQueryResult.args, commandString, text.endsWith(StringUtils.SPACE));
|
||||
if (queryResult == null) {
|
||||
// Suggestible argument not found
|
||||
return;
|
||||
|
@ -6,6 +6,7 @@ import net.minestom.server.command.builder.CommandContext;
|
||||
import net.minestom.server.command.builder.suggestion.SuggestionEntry;
|
||||
|
||||
import static net.minestom.server.command.builder.arguments.ArgumentType.Integer;
|
||||
import static net.minestom.server.command.builder.arguments.ArgumentType.Word;
|
||||
|
||||
public class TestCommand extends Command {
|
||||
|
||||
@ -13,17 +14,17 @@ public class TestCommand extends Command {
|
||||
super("testcmd");
|
||||
setDefaultExecutor(this::usage);
|
||||
|
||||
var test1 = Integer("msg").setSuggestionCallback((sender, context, suggestion) -> {
|
||||
var test1 = Word("msg").setSuggestionCallback((sender, context, suggestion) -> {
|
||||
suggestion.addEntry(new SuggestionEntry("test"));
|
||||
});
|
||||
|
||||
addSyntax((sender, context) -> {
|
||||
sender.sendMessage("no argument syntax");
|
||||
var test2 = Word("msg2").setSuggestionCallback((sender, context, suggestion) -> {
|
||||
suggestion.addEntry(new SuggestionEntry("greer"));
|
||||
});
|
||||
|
||||
addSyntax((sender, context) -> {
|
||||
System.out.println("executed");
|
||||
}, test1);
|
||||
}, test1, test2);
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user