[IMB]输入法冲突修复 (IMBlocker) - MC百科
概述
此模组是 游戏中中文输入法冲突修复(1.7.2-1.12.2)的 1.14.4+ 版本,能够在游戏中自动切换输入法开关状态。
功能
修复在正常游戏的时候和中文,日文,韩文输入法冲突的现象,让你在开着输入法的时候也可以正常进行游戏,操控游戏,不会冲突;
监测聊天栏文本是否为命令格式并自动切换中英文状态;
修复输入法候选词框无法定位至文本框的问题(当前仅支持 Windows);
令输入法候选词框可以在 Windows 全屏模式下显示;
修复 Linux 下候选词显示时控制按键泄漏至游戏的问题。
模组已支持 Fabric 1.17+,其它 Fabric 支持版本请移步 输入法冲突修复。
原理
决定输入法状态的根本因素:
在一个标准的图形界面框架中,有且仅有一个组件会接收并响应非全局键盘事件,它被称为焦点组件;
当持有焦点时,一部分组件希望接收到文本字符(如各种文本框),另一部分组件则希望接收到原始键盘输入(如游戏操作界面、按钮、列表等),它们的首选按键接收类型决定了输入法的首选状态;
在 Minecraft 的界面实现中,虽然没有统一的焦点管理机制,但总会仅存在一个组件可以接收并响应键盘输入,称之为等效焦点组件;
在 Minecraft 中,并非所有组件的焦点变化请求都是有效的,本模组会根据情况过滤无效请求。
IMBlocker 的输入状态识别:
通过 Mixin 注入的方式为已知组件的焦点状态变化添加回调机制;
构建焦点管理系统,将各种组件焦点状态的变化按照标准焦点管理规范,将实际焦点变化结果映射到全局焦点路径中,并据此调整输入法状态。
例外情况:
有些 GUI 屏幕(比如书与笔和告示牌)显示时直接处理输入字符而不产生焦点请求;
作者将这些屏幕视为等效焦点组件并放入白名单,显示与关闭时显式产生焦点变化请求;如果你需要开启输入法的地方看起来像一个屏幕而非文本框类组件,请尝试使用屏幕记录功能识别并将其添加到白名单。
问题:
未被注入的文本框组件无法被焦点管理系统监听,若某模组拥有自己的组件框架实现,此模组可能无法自动为其调整输入法状态,此时请将它们提交到 议题 #13 供开发者处理;
GLFW 窗口系统在 Windows 下有一个已知漏洞:如果游戏窗口被创建时未获得焦点则第一次获得焦点不会触发焦点回调,此时可能出现锁键现象,解决方法:使游戏窗口失去再获得一次焦点;
欢迎提出建议或反馈。
已原生兼容的模组
原版游戏及以下拥有独立界面框架的模组的文本框组件,均已原生支持输入法切换和候选框定位:
Roughly Enough Items;
EMI;
Axiom;
Replay Mod;
FTB Library;
Meteor Client(注:此模组仅汉化版支持输入中文);
LibGui;
Reese's Sodium Options;
BlockUI;
SuperMartijn642's Core Lib;
Notes;
Essential Mod。
如果你的模组未在此列出且其中的文本框无法在获得焦点后激活输入法,请先将屏幕白名单用作临时方案并进行反馈。
反馈注意事项
为方便问题的跟踪与管理,请尽量前往 GitHub 仓库通过提交议题(Issue)的方式进行反馈,否则不能保证及时受理;
在提交漏洞型议题时请至少附带游戏日志或崩溃报告这样最基本的信息,未包含任何有效信息的此类议题将会被立即关闭;
提交任何类型的议题时请确保其基于模组的最新版本,若议题中的功能建议已实现或漏洞已修复开发者将会在验证后关闭该议题。
替代品
(Neo)Forge
游戏内输入法(1.7.10-1.16.5)(停更);
游戏内输入法续更版 / 游戏内输入法 Forge 重置版(Forge 1.16.4-1.20.1 & NeoForge 1.20.1)(停更);
输入法冲突修复(Forge 1.14.4-1.20.4 & NeoForge 1.20.6+)(活跃);
游戏中中文输入法冲突修复(1.7.2-1.12.2)(停更);
caramelChat(Forge1.19.4-1.21.8 & NeoForge 1.20.1+)(活跃)。
Fabric
游戏内输入法(1.14.4-1.19.2)(停更);
游戏内输入法续更版 / 游戏内输入法 Forge 重置版(1.16.4-1.20.1)(停更);
游戏内输入法 XPlus 版(1.21+)(活跃);
输入法冲突修复(1.17+)(活跃);
输入法冲突修复 Fabric 版(1.14-1.20.1)(停更);
游戏内输入法 Super(1.20.6+)(活跃);
caramelChat (1.19.4+) (活跃)。