首页 > 解决方案 > Minecraft 1.15.2 中的修改命令在给出参数时不断显示未知命令

问题描述

我目前正在尝试为 1.15.2 开发一个简单的 Minecraft mod。我试图创建的是一个匿名化你的消息的命令,例如在假选举期间。它基本上接收您编写的消息,然后匿名发送给服务器中的每个人。

这是处理该行为的命令类的代码:

public class CommandVote {
    public static void register(CommandDispatcher<CommandSource> dispatcher) {
        LiteralArgumentBuilder<CommandSource> builder = Commands.literal("vote").requires(source -> source.hasPermissionLevel(0));
        builder.executes(context -> vote(context))
                    .then(Commands.argument("message", MessageArgument.message()))
                        .executes(context -> voteArgs(context));
        dispatcher.register(builder);
    }

    private static int vote(CommandContext<CommandSource> context) throws CommandSyntaxException {
        ServerPlayerEntity player = context.getSource().asPlayer();
        player.sendMessage(new StringTextComponent("Por favor, introduzca su opcion en la votacion"));
        return Command.SINGLE_SUCCESS;
    }

    private static int voteArgs(CommandContext<CommandSource> context) throws CommandSyntaxException {
        ServerPlayerEntity player = context.getSource().asPlayer();

        player.server.getPlayerList().sendMessage(MessageArgument.getMessage(context, "message"));
        return Command.SINGLE_SUCCESS;
    }
}

命令注册并显示在游戏中。当我尝试执行它时出现问题,例如:“/vote hello”。每次将参数添加到命令时,Minecraft 只会告诉我命令不存在或“未知命令”

我不太明白我在这里搞砸了什么。任何正确方向的建议都非常感谢。

先感谢您

标签: javaminecraftminecraft-forge

解决方案


感谢你的提问!这可以作为顶级函数的主体更好地工作:

LiteralArgumentBuilder<CommandSource> builder = Commands.literal("vote")
                .then(Commands.argument("number", IntegerArgumentType.integer())
                        .then(Commands.argument("message", MessageArgument.message())
                                .executes(context -> {
                                    System.out.println("Level 3 " + context.getInput());
                                    return Command.SINGLE_SUCCESS;
                                }))
                        .executes(context -> {
                            System.out.println("Level 2 " + context.getInput());
                            return Command.SINGLE_SUCCESS;
                        }))
                .executes(context -> {
                    System.out.println("Level 1 " + context.getInput());
                    return Command.SINGLE_SUCCESS;
                });
dispatcher.register(builder);

推荐阅读