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

Java新手求助:特定事件下控制Minecraft玩家潜行状态的问题

问题分析与解决方法

先梳理你代码里的几个关键问题:

  • 变量命名不规范且易混淆:BlockPos BlockPos 不符合Java小驼峰命名规范,改成BlockPos feetPos更清晰
  • 语法错误:1.0 D里的空格要去掉,正确写法是1.0D
  • 冗余代码:else if的判断条件和if完全一致,属于无效逻辑,直接删除即可
  • 核心问题:直接修改keyBindSneak.pressed无法被Minecraft的输入系统正确识别,游戏有自身的状态处理逻辑,应该调用玩家实体的专属方法来控制潜行

修正后的代码

if (item.getItem() instanceof net.minecraft.item.ItemBlock) {
    // 先取消潜行状态
    this.mc.thePlayer.setSneaking(false);
    
    // 获取玩家脚下的方块位置,修正语法与变量名
    BlockPos feetPos = new BlockPos(this.mc.thePlayer.posX, this.mc.thePlayer.posY - 1.0D, this.mc.thePlayer.posZ);
    
    // 判断脚下是否为空气方块,是则开启潜行
    if (this.mc.theWorld.getBlockState(feetPos).getBlock() == Blocks.air) {
        this.mc.thePlayer.setSneaking(true);
    }
}

额外提示

  • 如果你使用的是1.12及以上版本的Minecraft,thePlayer和theWorld已被标记为过时,建议替换为mc.player和mc.level
  • 确保这段代码在正确的事件回调中执行(比如玩家 Tick 事件、物品持有检测事件),否则可能无法触发或出现线程安全问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:15:33