KeyInputHandler
切换键:在主配置与「2 号配置」间轮换
基本信息
| 属性 | 值 |
|---|---|
| 路径 | com.github.lunatrius.ingameinfo.handler.KeyInputHandler |
| 行数 | 79 |
| 键位数量 | 1(KEY_BINDING_TOGGLE) |
唯一的键位绑定(:18-21)
private static final KeyBinding KEY_BINDING_TOGGLE = new KeyBinding(
Names.Keys.TOGGLE, // "ingameinfoxml.key.toggle"
Keyboard.KEY_NONE, // ⚠️ 默认未绑定
Names.Keys.CATEGORY); // "ingameinfoxml.key.category"
⚠️ 默认键码是 Keyboard.KEY_NONE ——
即出厂未绑定,玩家必须在「选项 → 按键设置 → 模组」里自己按一个键。
本 mod 不占用任何默认按键。
⚠️ 分类名与绑定名都用 ingameinfoxml 前缀,
而资源域是 ingameinfo(见 Names)。
构造器注册(:23-25)
public KeyInputHandler() { ClientRegistry.registerKeyBinding(KEY_BINDING_TOGGLE); }
由 ClientProxy.init(:54)
register(new KeyInputHandler()) 触发。
onKeyInput(:27-34)
if (KEY_BINDING_TOGGLE.isPressed()) {
if (Minecraft.getMinecraft().currentScreen == null) toggleHud();
}
⚠️ 只在 currentScreen == null(无 GUI 打开)时响应 ——
所以在聊天框、物品栏里按该键无效。
toggleHud 的三级逻辑(:36-65)
不是简单的开/关,而是在两个配置文件之间轮换:
| 情形 | 行为 |
|---|---|
| ① 存在「2 号配置」文件?否 | 退化为纯开关:showHUD = !showHUD + 存盘 |
② showHUD 当前为 false |
打开 HUD + 存盘 + 切回主配置 + 重载 |
| ③ 当前正用「2 号配置」 | 关闭 HUD(showHUD = false)+ 存盘 |
| ④ 其余(开着 HUD 且用主配置) | 切到2 号配置 + 重载(showHUD 保持 true) |
所以按键序列是: 主配置(显示) → 2号配置(显示) → 隐藏 → 主配置(显示) → …
⚠️ 情形 ③ 的判定是
currentConfig != null && secondaryConfig.equalsIgnoreCase(currentConfig) ——
依赖 getBaseConfigFileName() 返回的值。
InGameInfoCore.setConfigFileWithLocale(:95)
在选本地化文件时把 baseName 记为无语言后缀的原名,
所以比较是稳定的。
getSecondaryConfigName(:67-78)
「2 号配置」名的推导规则:
| 主配置名 | 推导结果 |
|---|---|
null 或空 |
InGameInfo2.xml(硬编码) |
无 . |
primaryConfig + "2" |
InGameInfo.xml |
InGameInfo2.xml(在最后一个点前插 2) |
a.b.xml |
a.b2.xml(lastIndexOf('.'),只处理最后一个点) |
⚠️ 无点号的分支产生 InGameInfo2(无扩展名),
而 InGameInfoCore.setConfigFile(:118-124)
按扩展名选解析器 —— 无扩展名会全部落空,
最终用兜底的 XmlParser(:129)。所以无扩展名的配置只能用 XML 语法。
⚠️ 硬编码的 "InGameInfo2.xml"(:69)绕过了 Names.Files 常量,
与其他地方不一致。
hasConfigFileWithLocale 的存在性检查
toggleHud(:40)用
core.hasConfigFileWithLocale(secondaryConfig) 判断 2 号配置是否存在,
该方法(InGameInfoCore 的 :79-90)
同时检查本地化名与原名。
三个调用点都走 saveHUDsettingToFile
toggleHud 的 4 条路径里有 3 条调
ConfigurationHandler.saveHUDsettingToFile()(情形 ③④ 除外),
即每次按键都立即写盘。第 ④ 条只切配置不写盘。
相关
- ConfigurationHandler -
showHUD与存盘方法 - InGameInfoCore -
hasConfigFileWithLocale/getBaseConfigFileName - Ticker -
showHUD的另一处消费方 - InGameInfoCommand -
/igi enable|disable等价操作