SuperTic
[!INFO] Git Commit:
518ab3c| Updated: 2026-10-01
modid:SuperTic(来自 SuperTic.java:26 static final String ModId = "SuperTic";,
由 @Mod(modid = SuperTic.ModId, ...) 在 SuperTic.java:20 引用。注意大小写混合,
与其它 GTNH mod 的全小写 modid 风格不同;gradle.properties 的 modId = SuperTic 一致)
显示名: SuperTic(@Mod(name = SuperTic.ModName),SuperTic.java:21、27)
mcmod.info 描述: "cpw" —— 模板占位符没改,不是真实描述
网址: https://github.com/GTNewHorizons/Super-TiC
作者: Zokonius;致谢: bartimaeusnek, GTNH
现状:三个独立功能挤在一个 10 文件的小 mod 里
10 个 Java 文件里:
| 项目 | 数量 |
|---|---|
| 方块 / TileEntity / 实体注册 | 0 / 0 / 0 |
| 注册的新物品 | 0 |
| 附魔 | 0 |
| 新维度 / 群系 | 0 |
| 指令 | 0 |
| 事件订阅 | 3(AttackEntityEvent、ItemTooltipEvent,同一 handler) |
| 神秘学附魔配方 | 26 个(每个 TConstruct 匠魂工具一个) |
| 血魔法仪式 | 1(SuperTiC_Modifier) |
| 配置文件 | 2(main.cfg + effects.cfg) |
| 第三方 mod 兼容分支 | 3(Thaumcraft / BloodMagic / TGregworks / Dreamcraft) |
本 mod 不注册任何物品——它做的事是:
- 用
effects.cfg让任意匠魂工具材料在攻击时附带药水效果 - 附魔 / 血魔法仪式两条途径给匠魂工具多加一个升级槽
- 给工具提示(tooltip)补充材料药水与 TGregworks 的 Stonebound / Jagged 说明
依赖声明
@Mod(dependencies = "required-after:TConstruct;after:ExtraTic;after:TGregworks;after:Thaumcraft;after:AWWayofTime")
(SuperTic.java:23)
| 依赖 | 级别 | 说明 |
|---|---|---|
TConstruct |
required-after | 唯一硬前置,本 mod 全部逻辑都建立在 ToolCore / TConstructRegistry 上 |
ExtraTic |
after | 软前置,装了会加载 |
TGregworks |
after | 软前置,用于 addGregTooltips 读 ToolMaterial.stonebound |
Thaumcraft |
after | 软前置,装了且 Config.TC 才注册附魔 |
AWWayofTime |
after | 软前置,装了且 Config.BM 才注册仪式 |
⚠️ modid 大小写陷阱:
AWWayofTime是 Blood Magic 在 1.7.10 fork 下的 modid, 不是BloodMagic。Config.BM_LP的注释却写 “Bloodmagic” (Config.java:82-86),main.cfg 分类名大小写也不一致(见 配置项)。dependencies.gradle里编译依赖倒是正确用了GTNewHorizons:BloodMagic:1.7.25:dev。
生命周期
| 阶段 | 动作 | 源码 |
|---|---|---|
| preInit | 建 config/SuperTiC/ 下的两个配置路径;把旧 SuperTic.cfg 移成 effects.cfg;EVENT_BUS.register(new SuperEventHandler()) |
SuperTic.java:36-48 |
| postInit | 读 effects.cfg → 读 main.cfg → 按 Loader.isModLoaded + 配置开关注册仪式 / 附魔 |
SuperTic.java:51-56 |
init 阶段未实现。@Instance 字段 public static SuperTic Instace
(SuperTic.java:30-31)拼写为 Instace(应为 Instance),且全代码库无任何读取点——
是死字段。
游戏内内容 / 机制列表
- 工具材料触发药水效果 - 攻击时按 Head/Handle/Accessory/Extra 四部件材料 id 施加药水;正数给目标、负数给自己,概率 1/X
- 配置项 -
main.cfg4 项(两大兼容性开关 + TC 难度 + 仪式 LP);effects.cfg每材料 4 项(Effect/Duration/Amplifier/Probability) - 神秘学附魔配方(TINKERSAUGMENTATION) - 26 个匠魂工具各一个 InfusionRecipe,升级槽 +1,三档难度
- 血魔法仪式:匠魂之咒 -
SuperTiC_Modifier仪式,399 tick 天劫后升级槽 +1,26 个仪式组件
本 mod 没有的内容(源码核实)
src/main/java 下 registerBlock、registerItem、registerEntity、registerTileEntity、
addCommand、keyBinding、new Enchantment、registerPotion、BiomeGen
各 0 命中。src/main/resources 只有 4 个文件:mcmod.info 与
assets/supertic/lang/{en_US,zh_CN}.lang——无任何贴图、模型、声音,
因为本 mod 不注册物品。
lang 目录名是
assets/supertic/(全小写),而 modid 是SuperTic。资源路径 大小写不符在某些资源加载路径下会出问题(FML 的资源映射对大小写敏感的场景), 源码中也无任何getResourceAsStream指向它——全靠 FML 的 lang 自动发现机制。
已知源码问题
- mcmod.info 描述是
"cpw"(src/main/resources/mcmod.info),ForgeForge 的模板 占位符没替换。模组列表里会显示为 “cpw”。 TC_lvl/BM_LP在mainConfig之前是0:Config.java:20-21的字段无初值, 而postInit里先idConfig再mainConfig(SuperTic.java:52-53), 再调TCCompat.thaumic()(SuperTic.java:55)。顺序正确,但任何第三方 mod 若在 更早阶段读Config.TC_lvl会拿到 0——两者都是public static。getListfromLevel/getInputfromLevel的形参lvl未使用 (Thaumcraft.java:43、55):方法体直接switch (Config.TC_lvl),签名里的参数是死参。InfusionModifierRecipe.getComponents()也重复了一遍同样的 switch(InfusionModifierRecipe.java:73-83)。- Dreamcraft 分支是死代码:
Thaumcraft.java:68-71重新赋值静态字段appleeasy/applehard,但input1/input2/input3三个数组在类静态初始化时 (Thaumcraft.java:34-37)就已用旧值构造完毕,重赋字段不回写数组。 详见 神秘学附魔配方。 TConstructRegistry.toolMaterials被硬索引到 2999 (Config.java:26的for (int i = 0; !(i == 3000); i++))。这个上界无注释、无常量名; 若某 mod 用了 id ≥ 3000 的材料,其配置项永远不会生成(getMaterialID返回该 id 时id_eff无键,PotionEventHandler.java:57的containsKey为 false,静默跳过)。nextInt(0)会抛异常:PotionEventHandler.java:83的nextInt(Config.id_prob.get(id)), 而id_prob对未配置材料被硬编码为0(Config.java:67)。正常路径不会命中 (id_eff也是 0,提前 return),但玩家若在 cfg 里只改Effect而把Probability写成 0,getInt的下界1会在首次读入时就把它钳到 1——然而若玩家手改文件绕过 Forge 校验则会崩。属于配置健壮性缺口。addEffect每次new Random()(PotionEventHandler.java:83),高频攻击下持续分配, 且结果由时间种子决定,不可用实体 RNG 复现。getLatin把0和1都映射成" I"(TooltipEventHandler.java:29):case 0, 1 -> " I"。Amplifier = 0(效果 I)与Amplifier = 1(效果 II)显示相同。Duration与Amplifier的源码注释是空字符串(Config.java:44、53), 生成出的 cfg 里这两项没有任何说明,玩家只能靠名字猜。- main.cfg 分类名大小写不一致:boolean 在
Compat_Bloodmagic(Config.java:77),RitualLP在Compat_BloodMagic(Config.java:82),会生成两个小节。 - 旧配置迁移可能静默失败且覆盖数据:
Files.move(config_old, idConfigFile)(SuperTic.java:42)在目标已存在时抛IOException,被 catch 后只printStackTrace()(SuperTic.java:43-45),旧配置丢失且玩家看不到任何提示。 @Instance字段拼成Instace(SuperTic.java:31)且无读取点,是死代码。Class名SuperTic与包名com.Zoko061602.SuperTic大小写混用 (目录是SuperTic,类声明public class SuperTic,包路径SuperTic), 在大小写敏感的 Linux 构建机上极易出问题。