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

Windows平台Java版Minecraft后台模拟按住左键问题求助

后台运行Minecraft时模拟按住鼠标左键的问题与解决思路

问题根源分析

你遇到的问题不是GLFW的通用bug,而是Minecraft对GLFW输入处理的特殊逻辑叠加后台窗口状态导致的:

  • GLFW默认有个行为:当窗口失去焦点时,会自动重置所有按键/鼠标的按下状态(相当于发送弹起事件)。你的boing示例是前台运行,窗口一直有焦点,所以没触发这个逻辑;但后台运行的Minecraft窗口失焦,GLFW会自动“补”一个WM_LBUTTONUP事件,导致挖矿中断。
  • 即使关闭了rawMouseInput,Minecraft仍会额外检查鼠标是否在窗口客户区内。后台模拟时鼠标位置大概率不在MC窗口里,MC的输入处理模块会判定左键已松开,直接终止操作。

可行解决方法

1. 强制GLFW保持焦点状态

启动Minecraft时添加JVM参数:-Dglfw.focused=true,让GLFW始终认为窗口处于激活焦点状态,这样就不会在后台时自动重置输入状态。

2. 同步鼠标位置到MC窗口内

发送WM_LBUTTONDOWN前,先发送WM_MOUSEMOVE消息把鼠标坐标移到MC窗口的客户区范围内(比如窗口左上角偏移(10,10)的位置)。Minecraft会检查鼠标是否在窗口内,位置正确后才会持续处理按住事件。

3. 直接用GLFW API模拟输入

绕过Windows消息机制,直接调用GLFW的原生接口模拟鼠标按键:

  • 通过反射获取Minecraft的GLFW窗口句柄:Minecraft.getInstance().getWindow().getHandle()
  • 调用glfwSetMouseButton(windowHandle, GLFW_MOUSE_BUTTON_LEFT, GLFW_PRESS)模拟按住,需要松开时再调用GLFW_RELEASE。
    这种方式直接和GLFW交互,完全绕开Windows消息的中间层问题,也能避开Minecraft对窗口状态的额外检查。

4. 修改Minecraft的输入检查逻辑

如果能修改客户端代码或用Mod注入,可以找到MouseHandler类(Minecraft处理鼠标输入的核心类),注释掉其中对窗口焦点、鼠标位置的校验逻辑。不过这种方式需要对MC的代码结构有一定了解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:15:05