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
相关产品推荐
相关产品推荐

