-
-
Notifications
You must be signed in to change notification settings - Fork 58
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Hi, I noticed a strange behaviour on "context.getResolvedArgument" method which is not working in defaultSuggestions() method when used with a String parameter.
I have this ParameterType:
public class QuestActorParameterType implements ParameterType<BukkitCommandActor, QuestActor> {
private final MSQuestsPlugin plugin;
public QuestActorParameterType(MSQuestsPlugin plugin) {
this.plugin = plugin;
}
@Override
public QuestActor parse(@NotNull MutableStringStream input, @NotNull ExecutionContext<BukkitCommandActor> executionContext) {
String value = input.readString();
String actorType = executionContext.getResolvedArgument("actor type");
return plugin.getQuestActorRegistry().getActorsByType(actorType).stream()
.filter(actor -> actor.getName().equals(value))
.findFirst()
.orElse(null);
}
@Override
public @NotNull SuggestionProvider<BukkitCommandActor> defaultSuggestions() {
return (context) -> {
String actorType = context.getResolvedArgument("actor type");
return plugin.getQuestActorRegistry().getActorsByType(actorType).stream().map(QuestActor::getName).toList();
};
}
@Override
public @NotNull PrioritySpec parsePriority() {
return PrioritySpec.highest();
}
}
My command :
@Subcommand("actor <actor type> <actor> start <group> <quest config>")
public void startActorQuest(
BukkitCommandActor sender,
@QuestActorType String actorType,
QuestActor actor,
QuestGroupConfig group,
QuestConfig questConfig
) {
QuestStartResult result = plugin.getQuestLifecycleService().startQuest(actor, questConfig, QuestDistributionStrategy.NONE);
sender.reply(MessageBuilder.translatable(result).toComponent());
}
It gives me this error when I write the QuestActor argument :
java.lang.IllegalArgumentException: Argument 'actor type' not found (or hasn't been resolved yet). Possible argument names: []
at msquests-bukkit-1.0-SNAPSHOT.jar/com.github.ibanetchep.msquests.lib.revxrsal.commands.node.ExecutionContext.getResolvedArgument(ExecutionContext.java:170) ~[msquests-bukkit-1.0-SNAPSHOT.jar:?]
at msquests-bukkit-1.0-SNAPSHOT.jar/com.github.ibanetchep.msquests.bukkit.command.parametertypes.QuestActorParameterType.lambda$defaultSuggestions$1(QuestActorParameterType.java:36) ~[msquests-bukkit-1.0-SNAPSHOT.jar:?]
at msquests-bukkit-1.0-SNAPSHOT.jar/com.github.ibanetchep.msquests.lib.revxrsal.commands.brigadier.BrigadierAdapter.lambda$createSuggestionProvider$1(BrigadierAdapter.java:109) ~[msquests-bukkit-1.0-SNAPSHOT.jar:?]
at com.mojang.brigadier.tree.ArgumentCommandNode.listSuggestions(ArgumentCommandNode.java:71) ~[brigadier-1.3.10.jar:1.21.8-60-29c8822]
at com.mojang.brigadier.CommandDispatcher.getCompletionSuggestions(CommandDispatcher.java:550) ~[paper-1.21.8.jar:?]
at com.mojang.brigadier.CommandDispatcher.getCompletionSuggestions(CommandDispatcher.java:530) ~[paper-1.21.8.jar:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl.sendServerSuggestions(ServerGamePacketListenerImpl.java:904) ~[paper-1.21.8.jar:1.21.8-60-29c8822]
at net.minecraft.server.network.ServerGamePacketListenerImpl.lambda$handleCustomCommandSuggestions0$2(ServerGamePacketListenerImpl.java:863) ~[paper-1.21.8.jar:1.21.8-60-29c8822]
The only workaround i have found is to split the input and resolve the argument myself but this forces me to respect a given order in my commands.
@Override
public @NotNull SuggestionProvider<BukkitCommandActor> defaultSuggestions() {
return (context) -> {
String[] args = context.input().source().split(" ");
String actorType = args[2];
return plugin.getQuestActorRegistry().getActorsByType(actorType).stream().map(QuestActor::getName).toList();
};
}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working