如何获取玩家朝向(北、东、西、南)?我的Mod冲刺功能代码失效
解决Minecraft Mod玩家朝向冲刺问题
你的代码核心问题有两个:一是朝向判断的区间没覆盖边界值(比如yaw=-45、45等情况会导致pdir为空,无法触发冲刺);二是可以用更高效的方式直接计算冲刺速度,不用先转换为字符串方向。
修正原代码(保留四方向判断)
把区间判断改成包含边界,确保所有yaw值都能匹配到方向:
String pdir = ""; Minecraft mc = Minecraft.getMinecraft(); float yaw = mc.player.getRotationYawHead(); // 覆盖所有边界值,避免pdir为空 if (yaw >= 135 || yaw <= -135) { pdir = "north"; } else if (yaw <= -45) { pdir = "east"; } else if (yaw >= 45) { pdir = "west"; } else { pdir = "south"; } // 应用冲刺速度 if (pdir.equalsIgnoreCase("north")) { mc.player.motionZ -= Speed; } else if (pdir.equalsIgnoreCase("east")) { mc.player.motionX += Speed; } else if (pdir.equalsIgnoreCase("west")) { mc.player.motionX -= Speed; } else if (pdir.equalsIgnoreCase("south")) { mc.player.motionZ += Speed; }
更优方案(支持全方向冲刺)
如果想让玩家朝任意方向(比如东北、西北)都能正确冲刺,不用局限于四个正方向,可以用三角函数直接计算速度分量,更准确高效:
Minecraft mc = Minecraft.getMinecraft(); float yaw = mc.player.getRotationYawHead(); double speed = Speed; // 将角度转换为弧度 double yawRadians = Math.toRadians(yaw); // 根据朝向计算X、Z轴的速度 mc.player.motionX -= Math.sin(yawRadians) * speed; mc.player.motionZ += Math.cos(yawRadians) * speed;
原理:Minecraft中yaw值对应绕垂直轴的旋转,通过三角函数可以直接算出朝向对应的X/Z轴速度分量,这样不管玩家朝哪个方向,冲刺都会精准对应。
内容的提问来源于stack exchange,提问作者VanProBRO
相关产品推荐
相关产品推荐

