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)。
相关条目
- 按键绑定 - 打开本界面的快捷键
- 通用配置(general.cfg) - 分类 1
- 插件配置(plugins.cfg) - 分类 2
- 自动生成配置(plugins_autogen.cfg) - 分类 3