WDMla 通用配置界面

基本信息

属性 值
入口声明 @Mod(guiFactory = "com.gtnewhorizons.wdmla.gui.GuiFactory")(WDMla.java:31)
GuiFactory com.gtnewhorizons.wdmla.gui.GuiFactory,实现 IModGuiFactory(GuiFactory.java)
主界面类 GuiFactory.mainConfigGuiClass() 返回 ModsMenuScreenConfig.class(GuiFactory.java:20-22)
打开方式 按 key_cfg(默认小键盘 0)→ new ModsMenuScreenConfig(null)(KeyEvent.java:53-60)
客户端专属 全部 GUI 类均在客户端加载路径中

功能

WDMla 的配置界面把四个来源的配置汇总到一个屏幕,根分类共 5 个:

# 分类 来源 生成方式
1 wdmla_general General 类 GTNHLib getConfigElementsMulti(true, General.class, …)
2 plugins PluginsConfig 类 同上,同一次调用
3 plugins_autogen WDMlaConfig new ConfigElement<>(WDMlaConfig.instance().getCategory(Identifiers.CONFIG_AUTOGEN))
4 Waila 旧版 general ConfigHandler.instance().config ConfigElement<>(…getCategory(Configuration.CATEGORY_GENERAL))
5 Waila 旧版 modules 同上 ConfigElement<>(…getCategory(Constants.CATEGORY_MODULES))

1–2 来自 ConfigurationManager.getConfigElementsMulti(true, General.class, PluginsConfig.class)(ModsMenuScreenConfig.java:49-50),3–5 由 categories.addAll(Arrays.asList(…)) 追加(ModsMenuScreenConfig.java:51-57)。因此旧版 Waila 的两个配置分类也被暴露出来,方便从同一处关闭它们。

界面的标题行为 "WDMla",副标题为 "Waila Replacement Mod"(ModsMenuScreenConfig.java:31)。

交互

ModsMenuScreenConfig 继承自自建的 LiveEditGuiConfig 而非直接用 FML 的 GuiConfig。类注释说明了原因:Custom Config Gui that uses hacky solution to force configID enabled(LiveEditGuiConfig.java:11-13)——它把 configID 传成字符串 "liveeditconfig",并把 entryList 替换为自建的 LiveEditGuiConfigEntries(LiveEditGuiConfig.java:15-24)。

LiveEditGuiConfigEntries 在构造时遍历条目列表,把每个 CategoryEntry 换成 LiveEditCategoryEntry(LiveEditGuiConfigEntries.java:18-23);后者的 buildChildScreen 再递归构造一个 LiveEditGuiConfig(LiveEditGuiConfigEntries.java:33-45),并逐层向上传递 requiresWorldRestart / requiresMcRestart(LiveEditGuiConfigEntries.java:40-41),同时把面包屑追加为 标题 > 分类名(LiveEditGuiConfigEntries.java:42)。这就是「进入子分类后仍是同一套 live-edit 界面」的实现方式。

LiveEditGuiConfig.initGui 只在 entryList == null 或 needsRefresh 时重建条目列表(LiveEditGuiConfig.java:26-33)。

配置预览:WDMlaTickHandler.screenRender 在绘制任意 GuiScreen 后检查,若当前界面是本 mod 的 GuiConfig 且 General.previewInCfg 为真,就在右侧渲染一个示例提示框(WDMlaTickHandler.java:62-80)。预览内容是三行硬编码的本地化文本 hud.msg.wdmla.cfg.dummy.1/2/3(WDMlaTickHandler.java:72-74),第三行为斜体并使用当前主题的 MOD_NAME 颜色(WDMlaTickHandler.java:74-77)。

旧版 Waila 配置的落盘由 ModsMenuScreenConfig.drawScreen 每帧检查 hasChanged() 后 save() 保证(ModsMenuScreenConfig.java:40-45)——因为 WDMla 自己的三份配置走 GTNHLib 事件,旧版这份不在事件链上。

数值

GuiFactory 的另外两个方法都返回 null:runtimeGuiCategories() 与 getHandlerFor()(GuiFactory.java:24-32)。即 WDMla 不提供 Forge 的运行时选项分类,只用经典 GuiConfig 屏幕。

配置保存后触发的重载链见 通用配置(general.cfg) 的「交互」段:ConfigChangedEvent → 保存 WDMlaConfig → reloadConfig() → loadComplete() 重排优先级 → ConfigHandler.instance().reloadDefaultConfig()(ClientProxy.java:74-84)。

相关条目