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()(情形 ③④ 除外), 即每次按键都立即写盘。第 ④ 条只切配置不写盘。

相关