Skip to content

String type parameter types not resolved in defaultSuggestions() ExecutionContext #147

@IbanEtchep

Description

@IbanEtchep

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();
        };
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions