WDMla 自动生成配置(plugins_autogen.cfg)
基本信息
| 属性 | 值 |
|---|---|
| 配置文件 | config/WDMla/plugins_autogen.cfg |
| 实现类 | com.gtnewhorizons.wdmla.config.WDMlaConfig(不用 GTNHLib,直接继承 Forge Configuration) |
| 创建位置 | ClientProxy.preInit,new File(配置目录, "WDMla") 下新建 plugins_autogen.cfg(ClientProxy.java:42-44) |
| 顶层分类 | plugins_autogen(Identifiers.java:65) |
| 副作用 | 客户端专属:WDMlaConfig 的实例字段带 @SideOnly(Side.CLIENT)(WDMlaConfig.java:28-29) |
功能
这是 WDMla 唯一由代码生成内容的配置文件,也是控制「每个 provider 是否显示、显示在第几位」的唯一入口。
与 general.cfg / plugins.cfg 的分工写在类注释里:GTNHLib 无法为每个插件单独生成文件,因此启用开关与优先级改由本文件承载(WDMlaConfig.java:22-25)。根分类 plugins_autogen 的语言键 option.wdmla.autogen.category 写作 “Autogenerated Plugin Options”(en_US.lang:326);core 子分类的键在 WDMlaConfig.reloadConfig() 里单独补设(WDMlaConfig.java:42-43),其余子分类的键由各插件的 registerClient() 用 setLanguageKey 写入。
生成流程(WDMlaConfig.reloadProviderAutogenConfigs(),WDMlaConfig.java:48-57):
- 遍历
WDMlaClientRegistration.instance().getAllProvidersWithoutInfo()——即所有不提供基础信息的 provider(基础信息由core插件独占,见 核心插件) - 为每个 provider 设语言键
- 调
isProviderEnabled写入/读取启用开关 - 把优先级写入
WDMlaCommonRegistration.instance().priorities - 若 provider 实现
ITimeFormatConfigurable,再写入时间格式
数值
每个 provider 子分类下最多三个键:
| 键 | 类型 | 默认值来源 | 读取方法 |
|---|---|---|---|
option.wdmla.autogen.enabled |
布尔 | provider.enabledByDefault() |
isProviderEnabled,WDMlaConfig.java:60-70 |
option.wdmla.autogen.priority |
整数 | provider.getDefaultPriority() |
getProviderPriority,WDMlaConfig.java:72-87 |
option.wdmla.autogen.time.format |
枚举 | instance.getDefaultTimeFormatter() |
getTimeFormatter,WDMlaConfig.java:89-95 |
语言键定义见 en_US.lang:327-329(Enabled / Priority / Time Format)。
两个关键分支:
- 优先级固定时不生成可写项:
getProviderPriority先查provider.isPriorityFixed(),为真则直接返回getDefaultPriority(),根本不调用get()(WDMlaConfig.java:73-75)——即该 provider 的优先级不落盘。 - 不可在 GUI 调整时隐藏而非禁用:
canToggleInGui()为假时调prop.setShowInGui(false)(WDMlaConfig.java:66-68);canPrioritizeInGui()为假时同理(WDMlaConfig.java:82-84)。键仍会写入文件,只是不出现在配置界面。
时间格式用 loadEnum 读取,它把枚举常量的 toString() 数组作为合法值列表传给 Forge getString(WDMlaConfig.java:110-122),因此配置文件里写错值会在 T.valueOf 处抛 IllegalArgumentException。
交互
WDMlaConfig 在客户端 postInit 中执行一次「重载 → 保存」(CommonProxy.java:67-68),并紧接着调用 OverlayConfig.updateColors()(CommonProxy.java:69)。此后每次配置变更事件都会「保存 → 重载 → 重排」(ClientProxy.java:76-80),loadComplete() 里的 priorities.sort() 只在客户端执行(CommonProxy.java:75-78)。
WDMlaConfig 的单例由构造函数赋值(WDMlaConfig.java:31-34),instance() 在 WDMlaConfig 尚未构造时返回 null。这决定了服务端不会触碰本文件——服务端 postInit 走的是 CommonProxy.postInit 的 Side.CLIENT 判定之外的分支(CommonProxy.java:61-70)。
相关条目
- WDMla 通用配置(general.cfg) - 全局外观设置
- 插件配置(plugins.cfg) - 插件内部细粒度开关
- WDMla 通用配置界面 - 本文件在游戏内的编辑入口
- 插件开发 API -
enabledByDefault/getDefaultPriority等方法的定义方