配置

基本信息

属性 值
配置类 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),热重载只更新静态字段,不会重建已放置方块

相关条目

  • 口袋世界 - pocket_plane_dim 与 enablePocketPlane 控制的目标维度
  • 网络封包 - 药水 ID 变更后由服务端经封包同步