早期配置(EarlyConfig)

基本信息

属性 值
配置类 com.mitchej123.hodgepodge.core.shared.EarlyConfig
源文件 src/main/java/com/mitchej123/hodgepodge/core/shared/EarlyConfig.java(71 行)
配置文件 <游戏目录>/config/hodgepodgeEarly.properties(EarlyConfig.java:33)
日志 logger HodgepodgeEarly(EarlyConfig.java:22)
可配置项 3 项(noNukeBaseMod / noLeanerForgeConfiguration / noFasterForgeEventTransformer)
JVM 系统属性 3 项(hodgepodge.logConfigTimes / hodgepodge.logEnumValues / hodgepodge.dumpClass)
生效时机 Forge 加载前 —— 类路径必须早于 Forge,@Mod 阶段读取不到本文件

功能

EarlyConfig 是 Hodgepodge 唯一绕过 Forge 配置系统的配置通道。原因是:这三项要控制的是 coremod 自己的 transformer 注册行为,而 config/hodgepodge.cfg 要等 @Mod 实例化才存在 —— 那时 coremod 早就跑完了。

与主配置的关键区别

hodgepodge.cfg hodgepodgeEarly.properties
读取者 GTNHLib @Config 框架 java.util.Properties + 静态初始化块
读取时机 @Mod 构造期 coremod 静态初始化期
缺省值来源 @Config.Default* 注解 全部 Boolean.parseBoolean(null) → false
是否自动补全 是 是,静态块会回写补全(EarlyConfig.java:46/49/52)
是否有 GUI 有 无

⚠️ 三项的默认值全是 false:Boolean.parseBoolean(config.getProperty(...)) 在键缺失时返回 false(parseBoolean(null) 返回 false),静态块随后把 false 写回文件。所以这与 @Config.DefaultBoolean(true) 的主配置语义相反 —— 想启用必须显式写 =true。

读写行为

  • 文件不存在 → LOGGER.debug("No existing configuration file. Will use defaults")(:42)
  • 读失败(IOException)→ LOGGER.error("Error reading configuration file. Will use defaults", e)(:39),用默认值继续,不中断启动
  • config 目录不存在 → 主动 Files.createDirectory 创建,避免首次启动报错(:57-63)
  • 静态块结束前无条件回写文件,注释为 Configuration file for early hodgepodge class transformers(:66)

数值

配置文件项(hodgepodgeEarly.properties)

键 类型 缺省 读取位置 作用
noNukeBaseMod boolean false core/HodgepodgeCore.java:48 为 true 时不注册 ModContainerFactoryTransformer,即不移除 @Mod.BaseMod 注解的类(BaseMod 已被 FML 弃用)
noLeanerForgeConfiguration boolean false core/rfb/HodgepodgeRfbPlugin.java:29 为 true 时不安装 ForgeConfigurationTransformer,即不精简 Forge 的 ForgeConfig 载入流程
noFasterForgeEventTransformer boolean false core/rfb/HodgepodgeRfbPlugin.java:32 为 true 时不安装 ForgeEventSubscriptionTransformer

JVM 系统属性(启动参数 -D)

属性 类型 缺省 读取位置 作用
hodgepodge.logConfigTimes boolean false core/rfb/HodgepodgeRfbPlugin.java:34 安装 ConfigParsingTimeTransformer,输出各配置类的解析耗时
hodgepodge.logEnumValues boolean false core/rfb/HodgepodgeRfbPlugin.java:36 安装 EnumValuesTransformer,统计 Enum#values() 的重复复制
hodgepodge.dumpClass boolean false core/shared/HodgepodgeClassDump.java:9/16/25 把每个 transformer 改写前后的类分别导出为 <类名>_PRE / <类名>_POST

三项均用 Boolean.getBoolean(...) 读取(EarlyConfig.java:27-29),只认 JVM -D 参数,不读配置文件。注意这三项是打开 transformer 而非关闭,与上表三项语义相反。

一个易踩的坑

hodgepodge.dumpClass 打开后,每一个 Hodgepodge transformer 都会执行一次 HodgepodgeClassDump.dumpClass(...)(core/fml/transformers/ 下 15 处 + core/rfb/transformers/ 下 3 处),磁盘写入量随安装的 transformer 数线性增长。

相关条目