voxkbd-1.0.3-26.3-neoforge.jar
Curse Maven Snippet
What's new
1.0.3
键盘拦截范围限制到 Minecraft 窗口内,同时修掉 1.0.1 遗留的三个致命问题。
关于键鼠拦截(平台审核要求)
1.0.1 及更早的包在 Windows 上装的是系统级键盘钩子(WH_KEYBOARD_LL),钩子常驻,MC 不在前台时也照样挂着。平台审核判定它"会拦截电脑上所有程序的按键",直接退回。
1.0.3 做了两层限制:
- 只对 Minecraft 自己生效。 钩子回调里加了一步前台窗口校验(
GetForegroundWindow+GetWindowThreadProcessId):当前台窗口不属于 Minecraft 所属进程,事件原样放行,既不拦截也不记录。 - 窗口失焦即卸载钩子。 钩子生命周期跟随窗口焦点,切出去就卸载,切回来重新装。不在前台的时候,系统里根本没有这个钩子。
这两条覆盖 Windows 桌面后端;安卓后端本来就在 MC 进程内工作,不涉及系统级钩子。
修复
- ZL2 / FCL 上切换键盘后键值不变。 这两个启动器在安卓进程里跑的是完整桌面版 JVM,不是 Dalvik,模组靠虚拟机名字判断平台,判断落空后整个翻译管线没有启动。现在按启动命令行特征补了兜底判定(
-Dos.version=Android-*、pojav.path.*、glfwstub.*、/system/build.prop),桌面 Linux 不可能同时命中。 - Forge 1.20.1 加载时弹"未能加载有效的 ResourcePackInfo"。 Forge 1.20.1 要求模组 jar 里有 pack.mcmeta,1.0.1 的包全部缺这个文件。已补。
- "始终显示"悬浮标在 1.20 ~ 1.21.11 上从未显示过。 悬浮标的 mixin 参数和各版本
Gui.render的真实签名对不上(1.20 系缺float partialTick,1.21 系缺DeltaTracker),编译期不报错、运行期静默失效。本轮逐版本对照官方映射文件全部修正。 - Forge / NeoForge 没有安卓注入桥。 1.0.1 的桥类只打在 Fabric 包里,Forge 和 NeoForge 玩家在 FCL / ZL2 上翻译管线是死的。已按版本族补齐 17 个包。
- 切换键可能被自己的钩子吞掉。 判断"这个键归模组所有"时拿 Windows 虚拟键码去比 GLFW 键码表,两套编号不同,按
`或[]时有几率切不出键盘。已统一成 GLFW 键码。
新增
- 更新检测。 启动后查一次 GitHub Releases(每实例每天最多一次,失败静默),进世界后在聊天栏提示新版本号与下载地址。
支持范围
Forge 补上了 26.3,三个加载器合共覆盖 Minecraft 1.20 ~ 26.3,28 个包。
| 加载器 | 版本范围 | 包数 |
|---|---|---|
| Fabric | 1.20 ~ 26.3 | 9 |
| Forge | 1.20 ~ 26.3 | 10 |
| NeoForge | 1.20.1 ~ 26.3 | 9 |
关于 26.3 和安卓
Minecraft 26.3 移除了 GLFW 改用 SDL3,安卓注入桥重写为直接拦截 KeyboardHandler#keyPress,不再依赖启动器的注入接口;焦点检测从回调改为轮询。1.20 ~ 26.2 沿用原来的回调包装方案,1.21.9+ 已核实内部调用点仍然存在。
这些链路做过逐版本签名核对(官方映射文件级),但安卓真机与 26.3 桌面端尚未实机验证。遇到问题请带上 latest_game.log 反馈。
已知限制
- 1.20 ~ 1.21.11 的包内置 JNA;26.x 用 JDK 内置的 FFM,不内置。
- 1.20 系的安卓桥读默认键码表,改过键码表配置的玩家在安卓上会错位(1.21 起读配置)。
- 只有简体中文和英文两套翻译。
This mod has no additional files

