配置
Thaumic Boots 的配置文件由 Config 类(main/Config.java)管理,分 modules 与 boots 两个 category,共 8 项。玩家可通过设置界面或直接编辑 config/thaumicboots.cfg 修改。
配置在 preInit 阶段由 Config.Init()(Config.java:48-57)加载:先 configuration.load(),再 processConfigFile() → syncConfigs() → doModuleConfigs(),最后 save() 落盘。
modules 分类(5 项)
| 键 | 默认 | 实际作用 |
|---|---|---|
Thaumcraft |
true | ⚠️ 无任何效果,见「已知缺陷」 |
GTNHLib |
true | ⚠️ 无任何效果,见「已知缺陷」 |
Tainted-Magic |
true | 是否注册 Tainted Magic 兼容的 5 双靴(虚空彗星、流星虚空、电力/纳米/量子虚空行者) |
Electro-Magic-Tools |
true | 是否注册 EMT 兼容的 9 双电力靴 |
Thaumic_Exploration |
true | 是否注册 Thaumic Exploration 兼容的 4 双靴(流星彗星、冰霜流星、虚空彗星、流星虚空) |
注意键名大小写不一致:Tainted-Magic 与 Electro-Magic-Tools 用连字符,Thaumic_Exploration 用下划线——是手写笔误,但因 Forge 配置大小写不敏感,功能正常。
boots 分类(3 项)
| 键 | 默认 | 范围 | 作用 |
|---|---|---|---|
Default-Change-Rate |
0.25 | 0.01–1.0 | 按下跳跃/移速开关键时,每次变化的基础步长 |
Change-Rate-Modifier |
0.4 | 0.01–1.0 | 按下微调键时,对上述步长的乘数 |
Allow-Inertia-Canceling-Feature |
true | 布尔 | 是否启用惯性抵消(onArmorTick 中 motionX/Z *= 0.5) |
前两项组合决定玩家能通过按键把靴子数值调到的上限:0.25 × 0.4 = 0.1(每按一次微调键,步长 ×0.4)。
配置如何影响注册
配置不是简单的功能开关,而是与 Loader.isModLoaded() 组成双重门控:
兼容靴存在 ⟺ 第三方 mod 已安装 且 对应配置项为 true
因此玩家装了 EMT 但把 Electro-Magic-Tools 设成 false,9 双电力靴全部消失(包括相应配方与研究)。同理 Tainted-Magic = false 会连带隐藏 5 双虚空系靴。
已知缺陷
-
Thaumcraft与GTNHLib两项完全无效。Config.java:30的thaumcraftActive与:40的gtnhLibActive被配置读取并赋值,但全仓没有任何代码读取这两个布尔值。所有兼容判断走的是Loader.isModLoaded(...)(见TaintedHelper.java:17、ExplorationsHelper.java:35、EMTHelper.java:61)。玩家把这两项关掉不会发生任何事,属于纯粹的无效配置项。 -
配置变更后不会保存。
Config.onConfigurationChangedEvent(Config.java:61-67)写的是:if (event.modID.equalsIgnoreCase(VersionInfo.ModName)) { // ← 比的是 ModName
VersionInfo.ModName是"Thaumic Boots",而 Forge 传入的event.modID是"thaumicboots",永远不相等,所以该分支永不执行。应为VersionInfo.ModID。实际后果:玩家在游戏内设置界面改配置时,Forge 触发事件但本 mod 不响应,需重启游戏才生效。 -
Config.saveConfigs()是死方法(Config.java:69-71),全仓无调用点。配置仅靠Init()末尾的configuration.save()落盘。 -
allowInertiaCancelingFeature = false时没有提示。lang文件里有thaumicboots.inertiaCancelingConfigDisabledMessage(“Inertia Canceling Feature Disabled in Config”),但ItemBoots.onArmorTick(ItemBoots.java:156)只是直接跳过逻辑,从不显示这条消息——死键。