ThaumicTinkerer
[!INFO] Git Commit:
e4c8acd| Updated: 2026-10-02
ThaumicTinkerer(Thaumic Tinkerer)是 Thaumcraft 4 的附属模组,由 nekosune、Pixlepix、Vazkii、mitchej123 等人维护,是 Elemental Tinkerer 的精神续作。源码头部与 mcmod.info 都自述为 “An addon to Thaumcraft 4, implementing new content”,并注明「本模组的研究在魔导书中以 [TT] 前缀标记」(src/main/resources/mcmod.info)。它为魔法世界补充了浮空运输、KAMI 维度体系、注水火焰、位移方块组、14 个自定义附魔,以及 ComputerCraft / OpenComputers 两套外设集成。
身份标识
本模组有 6 个身份字符串,其中 4 个与分类名不同,引用配置或调试时必须区分:
| 项目 | 值 | 与分类名 thaumictinkerer 是否相同 |
|---|---|---|
| modid | ThaumicTinkerer |
否(驼峰) |
| FML 容器 modid(coremod) | ThaumicTinkerer-preloader |
否 |
| 资源域 | ttinkerer |
否 |
| 分类名 | thaumictinkerer |
— |
| 目录名 | ThaumicTinkerer |
否(驼峰) |
| jar 名 | ThaumicTinkerer |
否(驼峰) |
- modid:
thaumic.tinkerer.common.lib.LibMisc.MOD_ID = "ThaumicTinkerer"(LibMisc.java:18),用于@Mod(modid = LibMisc.MOD_ID, …)(ThaumicTinkerer.java:45)。gradle.properties的modId同为ThaumicTinkerer。 - coremod:
thaumic.tinkerer.preloader.ThaumicTLoaderContainer实现IFMLLoadingPlugin+ GTNHLib 的IEarlyMixinLoader,getModId()返回ThaumicTinkerer-preloader(ThaumicTLoaderContainer.java:41-43),getName()返回Thaumic Tinkerer Core,getVersion()硬编码"0.1"(:53)。由gradle.properties的coreModClass = preloader.ThaumicTLoaderContainer声明。它不注入任何 ASM 转换器 ——getASMTransformerClass()返回null(:72-74),只负责提前注入 2 个 Mixin。 - 资源域:
assets/ttinkerer/(textures、lang、model均在此目录下)。 - jar 名:
gradle.properties的customArchiveBaseName处于注释状态,因此沿用默认的modId=ThaumicTinkerer。 - 显示名:
LibMisc.MOD_NAME = "Thaumic Tinkerer"(LibMisc.java:19,含空格)。注意relation.md中登记的显示名为ThaumicTinkerer(无空格),与源码内的MOD_NAME及gradle.properties的modName不同。
生命周期
@Mod 类只有 1 个:thaumic.tinkerer.common.ThaumicTinkerer(ThaumicTinkerer.java:45)。全部 334 个 .java 文件中 @Mod( 只出现这 1 次;@Mod 注解不重复统计 coremod(coremod 走 IFMLLoadingPlugin 而非 @Mod)。
注册经由 @SidedProxy 分发到 TTCommonProxy / TTClientProxy:
| 阶段 | 关键调用 | 位置 |
|---|---|---|
preInit |
工具材质、配置加载、维度素材辅助类、registry.preInit()、CC 外设、KAMI 稀有度枚举 |
TTCommonProxy.java:123-144 |
init |
附魔、药水、registry.init()、GUI handler、封包注册、事件订阅、OC 驱动、Multipart、NEI |
TTCommonProxy.java:147-186 |
postInit |
ResearchHelper.initResearch()、registry.postInit()、作物掉落表、聚焦黑名单 |
TTCommonProxy.java:190-195 |
serverStarting |
3 个服务端命令 + 药水效果处理器 | TTCommonProxy.java:197-207 |
依赖
宿主模组为 Thaumcraft,依据是 dependencies.gradle 中的 api('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev'),以及 mcmod.info 的 "dependencies": ["Thaumcraft"] 与 LibMisc.DEPENDENCIES 中的 required-after:Thaumcraft(LibMisc.java:24)。
Thaumcraft 本身不在
/Users/evlos/a/mirror/中(该目录只有thaumcraft4、thaumcraft-api、thaumcraft-research-tweaks、ThaumcraftMobAspects等)。因此本页对 Thaumcraft 侧的行为(要素语义、研究分类含义、Config.allowMirrors的具体效果)不做断言,只记录本仓库的调用点与版本串。
| 类型 | 依赖 | 版本 / modid | 依据 |
|---|---|---|---|
| 硬 | Thaumcraft | 1.7.10-4.2.3.5 |
dependencies.gradle api(...) + required-after:Thaumcraft |
| 硬 | Baubles Expanded | 2.2.21-GTNH,modid Baubles|Expanded |
dependencies.gradle api(...) |
| 硬 | Applied Energistics 2 (Unofficial) | rv3-beta-994-GTNH,modid appliedenergistics2 |
dependencies.gradle api(...) |
| 硬 | Thaumic Boots | 1.5.12,modid thaumicboots |
dependencies.gradle api(...) |
| 软 | ComputerCraft | curse.maven:computercraft-67504 |
compileOnly;另有 required-after 无版本约束 |
| 软 | IC2 | industrialcraft-2:2.2.828-experimental |
compileOnly;LibMisc.DEPENDENCIES 中为 after:IC2 |
| 软 | Waila | waila:1.19.30 |
compileOnly;after:Waila |
| 软 | ForgeMultipart | ForgeMultipart:1.7.10 |
compileOnly;after:ForgeMultipart |
| 软 | Tinkers’ Construct | TinkersConstruct:1.14.93-GTNH |
compileOnly |
| 软 | Botania | Botania:1.13.25-GTNH |
compileOnly |
| 软 | Ender IO / Ender Storage / EnderCore | 2.10.31 / 1.8.3 / 0.5.14 |
compileOnly |
| 软 | OpenComputers | OpenComputers:1.12.47-GTNH |
compileOnly |
| 软 | GT5-Unofficial | 5.09.54.01 |
compileOnly,并显式 exclude 自身的 ThaumicTinkerer 构件 |
| 软 | CoFH Core | cofh-core-69162 |
compileOnly |
| 仅开发 | AspectRecipeIndex | 1.1.3 |
devOnlyNonPublishable |
| 仅开发 | Electro-Magic-Tools | 1.7.24 |
runtimeOnlyNonPublishable,且被注释 |
LibMisc.DEPENDENCIES 完整串为:required-after:Forge@[10.12.1.1112,);required-after:Thaumcraft;before:advthaum;after:IC2;after:Waila;after:ForgeMultipart;after:ComputerCraft(LibMisc.java:24)。其中 before:advthaum 是唯一的负向依赖声明。Forge 的版本下界在此为 10.12.1.1112,低于 gradle.properties 中的构建版本 10.13.4.1614。
LoadedMods 另检测到 17 个软依赖运行时状态,完整清单见 软依赖与兼容层。
注册内容(仅计活的)
TTRegistry.preInit() 共 82 次注册调用(31 loadSimpleBlock + 3 loadMetaBlock + 46 loadSimpleItem + 2 loadMetaItem,TTRegistry.java:37-118)。每个类还要再过 shouldRegister() 判定:
| 类别 | 注册类数 | 无条件存活 | 条件存活 | 永不注册 |
|---|---|---|---|---|
| 方块 | 34 | 30 | 3(CC 2 + enableKami 1) |
1(BlockRPlacer) |
| 物品 | 48 | 26 | 22(enableKami) |
0 |
按 loadMeta* 展开后的实际游戏对象数为 83 个方块实例 + 50 个物品实例(含 BlockTravelSlab/BlockWardSlab/BlockDarkQuartzSlab 各多 1 个全砖,ItemGas 多 1 个形态,ItemIchorclothArmor 多 3 个部位)。
其他注册:14 个附魔、41 行附魔要素定价、15 个直注册研究 + 59 个由物品/方块自带的研究、10 个网络 ID(9 个类)、17 个 CC 外设类型、6 个 OC 驱动、3 个服务端命令、1 个自定义维度、0 个自定义 Aspect(只消费 Thaumcraft 的 Aspect 常量)。
已确认的代码事实
以下 5 项均以 grep 证据核实,不作为缺陷断言 —— 仓库内没有测试、注释或提交信息表明它们是有意为之:
BlockRPlacer是死注册:TTRegistry.java:51调用了loadSimpleBlock(new BlockRPlacer()),但BlockRPlacer.java:91-93的shouldRegister()无条件return false。连带后果是KEY_REMOTE_PLACER研究永不注册、PacketPlacerButton没有可交互目标。- 8 个附魔共用 Vampirism 的研究键:
EnchantmentManager.java:218-274为 Focused Strike、Dispersed Strikes、Valiance、Final Strike、Tunnel、Shatter、Shockwave、Pounce 全部传入KEY_ENCHANT_VAMPIRISM;LibResearch为它们各自定义的键只被ResearchHelper直注册,不作为解锁条件。 ModEnchantments.dispersedStrikes被注册两次:EnchantmentManager.java:225-231与:232-238参数完全相同;因registerData()按(effectId, level)覆盖写入,结果不受影响。ModEnchantments有 3 个声明后从未赋值的字段:filtration、imbued、resolute。BlockForcefield的 TileEntity 未注册:createTileEntity()与hasTileEntity()已实现(BlockForcefield.java:40-46),但未覆写ITTinkererBlock.getTileEntity(),故GameRegistry.registerTileEntity()从未为TileForcefield执行。对 34 个方块交叉核对后,它是唯一有运行时createTileEntity()却无getTileEntity()的方块。
另有 2 个未被引用的兼容类(OCCompat、FumePeripheral)与 1 个被 git 跟踪的 .orig 残留文件,见 软依赖与兼容层。
异常处理
| 位置 | 写法 | 是否吞异常 |
|---|---|---|
ContainerIchorPouch.java:41-43 |
catch (Exception ignored) {} |
是,空语句体,手持物非 ItemFocusPouch 时 stackList 保持未赋值 |
ReflectionHelper.java:65 |
catch (NoSuchMethodException ignored) {} catch (Exception e) |
良性探测写法,第二个分支重抛 |
TTCommonProxy.java:174-179 |
catch (Throwable e) |
否,log.error("Error registering multiparts", e) |
TileAnimationTablet.java:180 |
catch (Throwable e) |
部分,printStackTrace() 后走错误提示分支 |
EnumMobAspect.java:205-207 |
catch (Throwable e) |
否,throw new RuntimeException(e) |
TTClientProxy.java:197 |
catch (Throwable e) |
见该处 |
compat/BloodMagic.java:14-16 |
catch (ClassNotFoundException e) |
否,printStackTrace() |
Mixin
mixins.ThaumicTinkerer.json 的 mixins / client / server 三个数组全为空,mixins.ThaumicTinkerer.early.json 完全没有数组字段。真正的 Mixin 列表在 coremod 中硬编码:
| Mixin | 生效端 | 源码 |
|---|---|---|
AccessorItemInWorldManager |
客户端 + 服务端 | ThaumicTLoaderContainer.java:100-104 |
renderer.MixinRenderBlocks |
仅客户端 | ThaumicTLoaderContainer.java:104 |
getMixins() 先判 FMLLaunchHandler.side().isClient():非客户端只返回 AccessorItemInWorldManager,客户端返回两个(ThaumicTLoaderContainer.java:100-105)。两个 Mixin 类位于 thaumic.tinkerer.mixins / …mixins.early.renderer,与 gradle.properties 的 mixinsPackage = mixins 一致。
附魔列表
物品列表
- 施法聚焦 - 10 个法杖聚焦(普通系 7 + KAMI 系 3)
- 血凝工具 - 8 件血凝工具(基础 4 + 觉醒 4)与 ICHOR 工具材质
- 血凝布甲 - 8 件血凝布护甲(基础 4 + 觉醒 4)
- KAMI 材料与工具 - 8 种材料形态 + 5 件 KAMI 工具
- 护符与饰品 - 5 件 Baubles 饰品
- 气态光影方块 - 3 个气体方块及其物品形态
- 黑石英套件 - 5 个方块 + 1 个物品形态
- 工具与注墨物品 - 13 件工具、容器与注墨物品
方块列表
- 注水火焰 - 6 种元素火焰与三层可关机制
- 机器与功能方块 - 11 个方块(10 个注册 + 1 个死注册)
- 建筑方块与石板 - 3 组半砖双形态与旅行阶梯
- 位移方块组 - 位移接口与位移器
- KAMI 维度与浮空装置 - 4 个方块与 Bedrock 维度
- 注墨作物 - 2 个作物方块与 29 项生物要素表
研究列表
- 研究总览 - 91 个研究键的可达性审计、13 个无构造点的键与 KAMI 自动前置机制
配置列表
- 通用配置 -
general14 项 +potions4 项,含 0 死配置的审计过程 - KAMI 与暗影束配置 -
general.kami8 项 +balance.shadowbeam4 项 + 14 个附魔 ID
网络列表
- 网络封包 - 通道
ThaumicTinkerer|B与 ID 142–151 的 10 次注册
集成列表
API 列表
- API:模组间通信 - 2 个 IMC 键与 1 个零实现方的标记接口
版本证据
| 项目 | 值 | 证据 |
|---|---|---|
| Minecraft | 1.7.10 | gradle.properties 的 minecraftVersion = 1.7.10;mcmod.info 的 "mcversion": "${minecraftVersion}";ThaumicTLoaderContainer 的 @MCVersion("1.7.10") |
| Forge | 10.13.4.1614(构建)/ 10.12.1.1112(依赖下界) | gradle.properties 的 forgeVersion;LibMisc.DEPENDENCIES 的 required-after:Forge@[10.12.1.1112,) |
| 提交 | e4c8acdd4fa95ba6b80e165d248a3bd3f5392762 |
git rev-parse HEAD,经 git cat-file -t 确认为 commit 对象 |
| 提交日期 | 2026-09-20 | git log -1 --format=%cI |
不使用 git describe 作为版本闸门:该仓库是深度为 1 的浅克隆(git rev-parse --is-shallow-repository 为 true,git log --oneline | wc -l 为 1),git describe --tags 返回 2.12.33 —— 这是本模组自身的版本号,既不含 MC 版本也不含分支标识,与树内容无对应关系。