配置
基本信息
| 属性 | 值 |
|---|---|
| 配置类 | net.minecraftforge.common.config.Configuration(由 Forge 提供) |
| 初始化位置 | ThaumicHorizons.preInit → intitializeConfig(common/ThaumicHorizons.java:484) |
| 读取实现 | ThaumicHorizons.syncConfig(common/ThaumicHorizons.java:4020-4062) |
| 配置节 | general(4 项)、potions(5 项) |
| 配置项总数 | 9 |
| 随包提供的 .cfg | 无 —— src/main/resources/ 下没有任何 .cfg 或 .properties,配置在首次运行时由 config.load() 触发生成(common/ThaumicHorizons.java:4015-4016) |
| 热重载 | 支持。onConfigChanged 订阅 OnConfigChangedEvent,仅当 modID 等于 "ThaumicHorizons"(首字母大写,与 modid 常量一致)时重新 syncConfig()(common/ThaumicHorizons.java:4064-4069) |
数值
general 节:
| 键 | 默认值 | 写入的字段 | 需重启 | 说明(源码 comment 原文) |
|---|---|---|---|---|
pocket_plane_dim |
69 | dimensionPocketId |
否 | 无 comment |
alternateGolemBell |
true | useAlternateBell |
是 | Enable alternate golemancer’s bell recipe (in case of mod conflict). |
enablePocketPlane |
true | enablePocket |
是 | Enable pocket plane content (currently incomplete - many aspects will not generate the cool stuff they are supposed to). World backups are highly suggested. |
warpedTumorValue |
50 | warpedTumorValue |
是 | Points of warp held by warped tumor. |
potions 节(5 项全部 setRequiresMcRestart(true)):
| 键 | 默认值 | 写入的字段 |
|---|---|---|
visboostPotionID |
24 | potionVisBoostID |
visregenPotionID |
25 | potionVisRegenID |
vacuumPotionID |
26 | potionVacuumID |
shockPotionID |
27 | potionShockID |
synthesisPotionID |
28 | potionSynthesisID |
行号依据:general 四项见 common/ThaumicHorizons.java:4021、:4023、:4027、:4031;potions 五项见 :4036、:4041、:4046、:4051、:4056。
功能
syncConfig 对每一项执行 config.get(节, 键, 默认值) → 写入 Property.comment → setRequiresMcRestart → 赋给静态字段,末尾统一 config.save()(common/ThaumicHorizons.java:4061)。
9 个配置项全部满足「声明 → 赋值 → 有读取方」三段验证,读取方如下:
| 字段 | 读取方(file:line) | 读取位置性质 |
|---|---|---|
dimensionPocketId |
blocks/BlockPortalTH.java:97、:179、:181;blocks/BlockVortex.java:141;tiles/TileTransductionAmplifier.java:51;tiles/TileVortex.java:97 |
跨类读取(6 处,均带 ThaumicHorizons. 前缀) |
useAlternateBell |
common/ThaumicHorizons.java:819 |
仅同类读取(见下) |
enablePocket |
tiles/TileVortex.java:199;common/ThaumicHorizons.java:2064 |
跨类 1 处 + 同类 1 处 |
warpedTumorValue |
lib/EventHandlerEntity.java:139、:356;common/ThaumicHorizons.java:3110 |
跨类 2 处(带前缀)+ 同类 1 处 |
potionVisBoostID |
common/ThaumicHorizons.java:3694 起 |
同类(initPotions) |
potionVisRegenID |
tiles/TileBloodInfuser.java:74;lib/EventHandlerEntity.java:512、:514 |
跨类 3 处(带前缀) |
potionVacuumID |
tiles/TileBloodInfuser.java:74 之后同段 :75;lib/EventHandlerEntity.java:550、:552 |
跨类 3 处(带前缀) |
potionShockID |
tiles/TileBloodInfuser.java:76;lib/EventHandlerEntity.java:470、:481 |
跨类 3 处(带前缀) |
potionSynthesisID |
tiles/TileBloodInfuser.java:77;lib/EventHandlerEntity.java:611、:613 |
跨类 3 处(带前缀) |
useAlternateBell 的读取是同类裸引用,不是缺陷。 该字段声明于 common/ThaumicHorizons.java:475(private static boolean),赋值于 :4026,唯一读取点是 postInit 内同类的 :819:
819: if (useAlternateBell) {
820: alcheponics = new ResearchItem(
821: "alternateGolemBell",
该读取控制的是「Golemancer’s Bell」那条替代配方是否注册,属于本类内部的初始化分支,不存在「配置项被声明却无人使用」的问题。仅需注意 :820 复用的局部变量名 alcheponics 与 :872 真正的 alcheponics 研究同名——这是变量命名遗留,并非重复注册:两处构造出的 ResearchItem 的 id 分别是 alternateGolemBell(:821)和 alcheponics(:873),键不同,74 条研究 id 实测全部唯一。
数值:药水 ID 的二次重排
initPotions()(common/ThaumicHorizons.java:3680-3742)在读取配置 ID 后还会再做一次冲突避让:
- 先把
Potion.potionTypes数组扩容 5 格并用反射写回(:3682-:3690); - 对每种药水,若
Potion.potionTypes[配置的ID]已被占用,则调用getNextPotionId(...)顺延到下一个空位,再把结果回写到对应的静态字段(例::3694-3700处理potionVisBoostID)。
因此配置文件里写的 ID 是期望值,实际生效 ID 在冲突时会被自动改写。五种药水的颜色常量(PotionVisBoost 6697847、PotionVisRegen 5701759、PotionVacuum 4210752、PotionShock 11513861、PotionSynthesis 3253280)见 common/ThaumicHorizons.java:3700、:3708、:3718、:3728、:3738。注意 PotionSynthesis 的 isNegative 参数为 false,其余四种为 true。
交互
| 触发 | 行为 |
|---|---|
| 配置文件不存在 | config.load() 首次运行自动生成 .cfg,9 个键按默认值写入 |
| 游戏内 Mod 配置界面 | 由 guiFactory = "com.kentington.thaumichorizons.common.lib.THGuiFactory" 提供(common/ThaumicHorizons.java:272);THGuiFactory.mainConfigGuiClass() 返回 THConfigGUI.class(common/lib/THGuiFactory.java:19-21) |
| 运行中改配置 | FML 触发 OnConfigChangedEvent → syncConfig() 重读。注意 8 项标了 setRequiresMcRestart(true),热重载只更新静态字段,不会重建已放置方块 |