早期配置(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 数线性增长。
相关条目
- Debug 配置 - 运行期的诊断开关
- Coremod 引导 - 读取
noNukeBaseMod的 coremod - RetroFuturaBootstrap 插件 - 读取
noLeanerForgeConfiguration/noFasterForgeEventTransformer/ 两个-D调试项