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 不注册任何物品——它做的事是:

  1. 用 effects.cfg 让任意匠魂工具材料在攻击时附带药水效果
  2. 附魔 / 血魔法仪式两条途径给匠魂工具多加一个升级槽
  3. 给工具提示(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),且全代码库无任何读取点—— 是死字段。

游戏内内容 / 机制列表

本 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 构建机上极易出问题。