You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Minecraft 1.16.5 Fabric环境下代码执行游戏命令报错如何解决?

问题核心原因

  • 你自行实例化了空白的CommandDispatcher,该实例未注册任何Minecraft内置命令,无法识别所有输入的指令
  • 传入执行的命令带了前缀/,Brigadier框架的execute方法不需要额外添加斜杠前缀
  • 未做服务端环境判断,inventoryTick会在客户端、服务端同时触发,客户端侧没有完整的命令注册列表,执行命令本身无效

正确实现代码

@Override
public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) {
    // 仅在服务端侧执行,排除客户端逻辑
    if (world.isClient || !(entity instanceof PlayerEntity player)) {
        return;
    }
    if (player.getEquippedStack(EquipmentSlot.CHEST) == stack) {
        MinecraftServer server = world.getServer();
        // 命令无需加/前缀
        final String command = "time set 0";
        try {
            // 用服务器自带的已完成所有命令注册的命令管理器执行
            // 若需要以玩家自身权限执行,将server.getCommandSource()替换为player.getCommandSource()即可
            server.getCommandManager().execute(server.getCommandSource(), command);
        } catch (CommandSyntaxException e) {
            e.printStackTrace();
        }
    }
}

额外注意事项

  • 当前逻辑每游戏刻(每秒20次)都会触发,如果你只需要穿戴时执行一次,建议给物品添加NBT标记做冷却判断,避免重复执行命令
  • 用server.getCommandSource()执行默认拥有OP等级2的权限,可以执行所有作弊类命令,如果需要限制为玩家自身权限,替换为玩家的命令源即可

内容的提问来源于stack exchange,提问作者IAFEnvoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:54:00