TC4Tweaks

[!INFO] Git Commit: 见 relation.md | Minecraft 1.7.10 / Forge 10.13.4.1614-1.7.10 | Thaumcraft 4.2.3.5

Thaumcraft 4 的功能增强与修复合集(coremod + 普通 mod)。

简介

TC4Tweak(modid tc4tweak,单数)是 1.7.10 的 Thaumcraft 4 附属, 描述语 Magic with ease。它是双模 jar:

  • coremod —— SortingIndex = 2000,63 条 ASM 变换覆盖 Thaumcraft / Forge / 其它 mod 的 53 个类。
  • 普通 mod —— dependencies = "required-after:Thaumcraft"(唯一硬依赖)。
  • 12 个功能模块 —— 配方查找、要素缓存、研究浏览器、灌注改写等。
  • 3 条网络消息 —— 全部单向(服务端 → 客户端)。
  • NEI 集成 + 3 个数据导出器。

概念总览

概念 摘要 关联条目
变换注册真源 63 条 Map<String, TransformerFactory> TC4 Transformer
加载插件 SortingIndex 2000 + 两个互斥检测 Loading Plugin
配置 6 个分组,ConfigurationVersion 分步迁移 Configuration Handler
网络 自克隆 SimpleNetworkWrapper,未知消息不崩 MyNet

Coremod 列表

核心与代理

设置

  • Configuration Handler — general / client / client.browser_scale / general.infusion_recipes / general.infusion_recipes.nbtcarryover / general.saved_link
  • Configuration Version — 枚举式分步迁移,LEGACY 直接抛异常
  • GuiFactory — IModGuiFactory,后两方法返回 null
  • GuiModConfig — 只显示无 . 的顶层分类

模块列表(12 个包)

网络

NEI 与 API

依赖范围

依赖 收录状态
Thaumcraft(required-after) ✅ 已登记(分类 thaumcraft)
Baubles(1.7.10-1.0.1.10,devOnly) ✅ 已登记(分类 baubles-expanded)
MineTweaker3(compileOnly,非运行时依赖) ✅ 已登记(分类 minetweaker-gregtech-5-addon 之外的 MT 主体见 relation.md)
NotEnoughItems(软依赖,NEI 集成) ✅ 已登记(分类 notenoughitems 未收录 → 见下)
TabbyChat(Class.forName 可选) ❌ 不在收录范围
NotEnoughThaumcraftTabs / ThaumicFixer ❌ 不在收录范围,且被显式排斥

notenoughitems 在 relation.md 中无行 —— NEI 主体不在收录范围。

源码缺陷

  1. LoadingPlugin.injectData() —— 硬性排斥 NotEnoughThaumcraftTabs 与 ThaumicFixer,检测到即 throw new RuntimeException 终止启动。 错误信息在日志中重复 3 次(夹在 9 行 # 横幅中),属调试遗留。
  2. ConfigurationVersion.LEGACY.step() —— 直接抛 IllegalStateException。 依赖 identify() 永不返回 LEGACY 才安全;若配置缺失版本标记 被识别为 LEGACY,迁移第一步即崩。
  3. @Mod 缺少 dependencies —— @Mod(dependencies = "required-after:Thaumcraft") 已声明 Thaumcraft,但 MineTweaker3(compileOnly)、NotEnoughItems、 TabbyChat 均未声明。TabbyChat 有 Class.forName 探测,尚安全; MineTweaker 无探测路径,靠 MT 侧调用时机。
  4. 硬编码第三方类名/字段名反射 —— ThaumcraftApi.groupedObjectTags、GameData.customItemStacks、 VisNetHandler.cache/nearbyNodes、ParticleEngine.particles、 GuiResearchBrowser.player/selectedCategory、Mouse.readBuffer。 上游改名即 NoSuchFieldException,无版本分支。
  5. IndexedCodec 静态 import FML 包级常量 INBOUNDPACKETTRACKER —— 绕过访问控制依赖 FML 内部结构,FML 变更即编译失败。
  6. ConfigurationHandler 字段声明无显式初值 —— 22 个 boolean 字段靠 Java 默认 false 起步,实际值取决于 loadConfig 读到的配置; 仅 browserHeight=230 / browserWidth=256 / infusionMatrixLimitDrift=12f 等 7 个有源码级初值。
  7. InfusionOreDictMode 命名与严格度非单调 —— Default 只用第一个 ore ID, Strict 要求集合全等,Relaxed 只要求有交集,易被反读。
  8. 调试路径泄漏资源 —— LoadingPlugin.getDebugOutputDir() 里 catch (IOException ignored) {} 空吞;.asm 目录每次启动被 FileUtils.deleteDirectory 清空。