配置项
本 mod 有两个配置文件,都在 config/SuperTiC/ 下(SuperTic.java:37-38)。
一、main.cfg
| 属性 | 值 |
|---|---|
| 路径 | config/SuperTiC/main.cfg(SuperTic.java:38) |
| 读取时机 | postInit(SuperTic.java:53) |
| 无 GUI | @Mod 未声明 guiFactory,只能手改文件 |
Compat_Thaumcraft 分类
| 键 | 类型 | 默认值 | 取值范围 | 源码注释 | 源码 |
|---|---|---|---|---|---|
Thaumcraft |
boolean | true |
— | “Enables/Disables Thaumcraft support” | Config.java:76 |
ThaumcraftLevel |
int | 2 |
1 ~ 3(读取后再双向 clamp) |
“Difficulty for Thaumcraft modifier” | Config.java:79 |
Compat_Bloodmagic 分类
| 键 | 类型 | 默认值 | 取值范围 | 源码注释 | 源码 |
|---|---|---|---|---|---|
Bloodmagic |
boolean | true |
— | “Enables/Disables Bloodmagic support” | Config.java:77 |
RitualLP |
int | 100000 |
1 ~ 80000000 |
“LP amount for the Spell of the diligent Tinkerer” | Config.java:80-86 |
⚠️ 分类名大小写不一致:boolean 用
Compat_Bloodmagic(小写 m,Config.java:77), int 用Compat_BloodMagic(大写 M,Config.java:82)。Forge 的Configuration分类名 是大小写敏感的,因此 main.cfg 里会出现两个不同的小节,玩家很容易只改到其中一个。
二、effects.cfg
| 属性 | 值 |
|---|---|
| 路径 | config/SuperTiC/effects.cfg(SuperTic.java:37) |
| 读取时机 | postInit,在 mainConfig 之前(SuperTic.java:52-53) |
| 结构 | 每个 TConstruct 材料一个分类,分类名 = TConstructRegistry.toolMaterials.get(i).materialName |
每个材料分类下的 4 个键
| 键 | 类型 | 默认值 | 范围 | 源码注释 | 源码 |
|---|---|---|---|---|---|
Effect |
int | 0 |
-255 ~ 255 |
“Effect id (if negative gets applied to player)” | Config.java:29-35 |
Duration |
int | 200 |
1 ~ Integer.MAX_VALUE |
""(空注释) |
Config.java:38-44 |
Amplifier |
int | 1 |
1 ~ Integer.MAX_VALUE |
""(空注释) |
Config.java:47-53 |
Probability |
int | 1 |
1 ~ Integer.MAX_VALUE |
“Chance effect gets applied 1 in X” | Config.java:56-62 |
材料遍历范围
Config.idConfig 的循环是 for (int i = 0; !(i == 3000); i++),即遍历材料 id 0 ~ 2999
(Config.java:26)。每轮:
- 若
TConstructRegistry.toolMaterials.get(i) != null→ 读上面 4 个键入 map - 否则 → 四个值全部硬编码为
0并入 map(Config.java:63-68)
Duration = 0 / Amplifier = 0 / Probability = 0 这些 0 值仍会被写入 map。
由于 addEffect 只在 id_eff != 0 时被调用(PotionEventHandler.java:57-76),
未配置材料的 0 值不会被使用;但如果某个材料只把 Effect 改成非 0 而 Probability
仍是 0,nextInt(0) 会抛 IllegalArgumentException——见
工具材料触发药水效果。
旧配置迁移
preInit 里若 event.getSuggestedConfigurationFile()(即旧的 config/SuperTic.cfg)
存在,用 com.google.common.io.Files.move 移动到 config/SuperTiC/effects.cfg
(SuperTic.java:40-45)。
⚠️ 这是无条件覆盖移动:若目标
effects.cfg已存在,Files.move会抛IOException,被 catch 后仅printStackTrace()(SuperTic.java:43-45), 旧配置既没迁移成功也没有任何用户可读的报错(只有堆栈)。 且迁移目标只指向effects.cfg,main.cfg没有对应的迁移逻辑。
配置与兼容模块的联动
postInit 里两个兼容模块的启用条件是 Loader.isModLoaded(X) && Config.开关 双条件
(SuperTic.java:54-55):
if (Loader.isModLoaded("AWWayofTime") && Config.BM) BMCompat.bloody();
if (Loader.isModLoaded("Thaumcraft") && Config.TC) TCCompat.thaumic();
即:装了对应 mod 且开关为 true 才注册。这两个 Loader.isModLoaded 的 modid
(AWWayofTime、Thaumcraft)与 @Mod 注解 dependencies 里写的
after:AWWayofTime / after:Thaumcraft(SuperTic.java:23)一致——
血魔法在这里用的是 Blood Magic 1.7.10 fork 的 modid AWWayofTime。
配置类字段的可见性问题
Config.TC / Config.BM 是 package-private static(Config.java:17-18),
idConfig / mainConfig 两个方法也是 package-private(Config.java:23、72),
外部包无法调用;TC_lvl / BM_LP 则是 public static(Config.java:20-21)。
TC_lvl / BM_LP 在 mainConfig 之前是 0,任何早于 postInit 读取它们的代码
都会拿到 0——InfusionModifierRecipe 依赖 TC_lvl,因此必须在 postInit 之后构造。