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):

  1. 遍历 WDMlaClientRegistration.instance().getAllProvidersWithoutInfo()——即所有不提供基础信息的 provider(基础信息由 core 插件独占,见 核心插件)
  2. 为每个 provider 设语言键
  3. 调 isProviderEnabled 写入/读取启用开关
  4. 把优先级写入 WDMlaCommonRegistration.instance().priorities
  5. 若 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)。

相关条目