ThaumicHorizons

[!INFO] Git Commit: 21ab7900 | Updated: 2026-10-02

ThaumicHorizons(驼峰式命名,无空格)是 Thaumcraft 4 的大型附属 mod,由 Kentington 编写、GTNewHorizons 维护并重新许可(原作者 MIT,其余人 LGPL v3.0+)。它把神秘学(Thaumcraft)与另外三个体系缝合在一起:Alchemite 炼金石傀儡、Essentia 要素网络、Creature Infusion 生物注入,并新增一整个 Pocket Plane 口袋平面维度。研究页在游戏内给出的定位是一句双关的副标题:「Pushing the boundaries of magic」(src/main/resources/mcmod.info 的 description 字段)。

本分类只收录 Minecraft 1.7.10 / Forge 这一个版本,未发生跨版本合并(已按 ROADMAP §0.11 核对:gradle.properties 的 minecraftVersion = 1.7.10、forgeVersion = 10.13.4.1614,仓内无任何 NeoForge / Fabric 1.20+ 变体)。

身份字符串

本模组的身份分散在多个字符串上,其中三处大小写不一致,引用时须分别对待:

字符串 实际值 证据
modid ThaumicHorizons(首字母大写) common/ThaumicHorizons.java:275 的 MODID 常量;gradle.properties 的 modId = ThaumicHorizons(注释自述为 case-sensitive)
FML 容器 modid 同上(无独立 coremod) gradle.properties 的 coreModClass = 为空;无 IFMLLoadingPlugin 实现
资源域 thaumichorizons(全小写) 目录 src/main/resources/assets/thaumichorizons/
分类名 thaumichorizons(全小写) relation.md 的行,转换方式标注为「驼峰转小写」
目录名 thaumichorizons/ 本 wiki 的镜像路径
jar 名 ThaumicHorizons.jar gradle.properties 中 customArchiveBaseName 未设置(第 204 行为注释),故沿用默认 modName

此外还有三处同样用大写或小写、容易被误当作 modid 的字符串:网络通道名是 "ThaumicHorizons".toLowerCase() 即 thaumichorizons(common/lib/networking/PacketHandler.java:60,作者显式转换,说明该分歧是有意为之);创造标签字符串是 thaumichorizons(:4073);方块的贴图域有 23 处写成大写 ThaumicHorizons:,而 150 处 registerIcon 全用小写。

版本判定

不使用 git describe 作为版本闸门。 本仓 git describe --tags 返回 1.8.25 —— 这是模组自身的版本号,与 Minecraft 版本无任何对应关系;用它判断 1.7.10 会得出错误结论。三种闸门形式的实测结果:

形式 结果
① acceptedMinecraftVersions = "…" 空(全仓 0 命中,模组未声明该参数)
② mcmod.info 命中 —— "mcversion": "${minecraftVersion}"(占位符),追溯到 gradle.properties 的 minecraftVersion = 1.7.10
③ @Mod(version = …) 不适用 —— VERSION = "GRADLETOKEN_VERSION"(:276)是模组版本占位符,由 replaceGradleTokenInFile = ThaumicHorizons.java 替换,不含 MC 版本

故 MC 版本取 1.7.10,依据是形式 ② 追溯到 gradle.properties 的声明值。Forge 目标版本 10.13.4.1614 同源。

关于反编译:331 个 .java 文件中 325 个带有 // Decompiled by Procyon v0.5.30 头部(未带该头部的 6 个为 common/ThaumicHorizons.java、common/blocks/BlockGatewayPortal.java、client/audio/VortexSound.java、common/handlers/BehaviorDispenseBoat.java、common/lib/PageFormatText.java、common/lib/networking/PacketRainState.java)。但本仓不是纯反编译 jar 快照:它有完整的 GTNH 构建体系(build.gradle 使用 com.gtnewhorizons.gtnhconvention、gradle.properties、CI 工作流),源码是被导入 RFG 工程后再行修改的。因此本分类仍然引用 commit 21ab7900 —— 提交历史真实存在且与当前源码树对应,git cat-file -t 验证为 commit。这与 harvestcraft / thaumcraft 那种「源即反编译产物、无有效提交可引」的情形不同。

提交 21ab790045ae65fc22ea9d1f5ff2c81111f97763(2026-09-18,update+gradle+bs+deps+gitignore fix curse auto uploader)是 master 分支的 HEAD,也是本次全部条目的源码基准。

依赖

宿主 mod 是 Thaumcraft 4,从两处独立读出且一致:@Mod(dependencies = "required-after:Forge@[10.13.2,);" + "required-after:Thaumcraft@[4.2.3.4,)")(common/ThaumicHorizons.java:271)与 dependencies.gradle 的 api('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev')。这是从依赖文件读出的结论,不是从模组名或邻居推断的。

强度 依赖 依据
硬 Forge ≥ 10.13.2、Thaumcraft ≥ 4.2.3.4 @Mod 依赖串(:271)
硬(虽未写进 @Mod) Baubles-Expanded 2.2.24-GTNH 8 个文件共 11 条无守卫的 import baubles.*,2 个物品在类声明上 implements IBauble
软 GregTech 5(5.09.54.168,compileOnly) 唯一一处 Loader.isModLoaded("gregtech") 门控,带完整原版回退分支
仅构建期 AspectRecipeIndex 1.1.5 runtimeOnlyNonPublishable,源码 0 引用

注册内容统计

以下均为存活注册(排除被注释的注册与死代码):

类别 数量 注册位置
方块 40 :598-637(无一行被注释)
物品 45 :638-686(无一行被注释)
TileEntity 22 :742-763
实体 31 :687-741(ID 0–31,缺号 8)
研究 74 构造于 :820-:3162,注册于 :844-:3189,id 全部唯一
网络封包 15 PacketHandler.java:28-56
自定义维度 1(Pocket Plane,ID 69) :501-502
奥术合成配方 8 ThaumcraftApi.addArcaneCraftingRecipe
注入合成配方 31 ThaumcraftApi.addInfusionCraftingRecipe
坩埚转化配方 22 ThaumcraftApi.addCrucibleRecipe
无序矿物词典配方 6 本模组自有的 shapelessOreDictRecipe(:4008)
原版无序合成配方 2 GameRegistry.addShapelessRecipe(:2582、:2593)
自定义工作台配方 2 GameRegistry.addRecipe(:1720 RecipesFocusIlluminationDyes、:2019 RecipeVoidPuttyRepair)
熔炼配方 2 :789(生肉→熟肉)、:2650(goldEgg→Items.gold_nugget)
生物 / 自身注入配方 40 critterRecipes.add ×30 + selfRecipes.add ×10(:3198-3636),见注入配方
要素标签 56 addAspectsToAllTheThings()(:3759-3916),见要素标签
自定义 RecipeSorter 条目 2 :775-784
派发器行为 1 registerDispenserBehavior()(:3918,由 :3646 调用)
wand 方块触发器 3 :3193、:3195、:3197
自定义药水 5 initPotions()(:3680-3742)
GUI ID 9(ID 1–9) common/CommonProxy.java:70-104,见GUI 处理器
配置项 9 syncConfig()(:4020-4062)

配方计数经两种独立方式交叉验证(逐行 grep 与全文空白归一化后计数),两法结果一致:8 / 31 / 22。

本模组不注册任何新的 Aspect —— 全仓无 registerAspect 或 new Aspect(...)。它只用 TC4 的 40 种既有要素,但会在自己的 39 个物品 / 方块和 17 个实体上注册要素标签(registerObjectTag / registerEntityTag),这与「注册新要素」是两回事,见要素标签。所引 40 个要素常量已逐个与 mirror/thaumcraft4 的 Aspect 枚举对照,全部命中。

死代码(不计为注册内容)

对象 证据
blockSoulJarItem 在 :565 实例化,但全仓仅 :333(声明)与 :565(实例化)两处引用,从不注册
PacketGetCowData 类存在于 common/lib/networking/,但类名在 PacketHandler.java 中 0 命中
PacketCowUpdate 同上;其唯一引用者是同样未注册的 PacketGetCowData.java:51
recipeEnchantClay 仅在 :461 声明,全仓无赋值点
recipeEssentiaBrew 仅在 :438 声明,全仓无赋值点
recipeSilverwoodSapling 仅在 :437 声明,全仓无赋值点
EntityItemInvulnerable 工具类,未出现在 31 个 registerModEntity 调用中

lightSolar / cloudGlowingTH / portalTH 三个方块不是死代码 —— 它们有真实的 registerBlock 调用,只是缺少独立语言条目,原因见 方块列表。

方块列表

  • 方块列表 - 40 个注册方块的总表,含注册名 / 未本地化名 / TileEntity 映射
  • 治疗槽多方块结构 - Curative Vat 的 metadata→TE 分派与治疗 / 克隆 / 注入三种用途

物品列表

  • 法杖配件与透镜 - 6 个透镜(ILens 家族)+ 5 个 wand 焦点 + 1 套自定义 wand 杆帽
  • 注入与消耗品 - 注射器、样本、营养剂、傀儡粉、平面道具、食物与调试物品

生物实体列表

  • 生物实体 - 31 个注册实体的总表,ID 0–31 缺号 8,含 8 条家畜注入线的对应关系

研究列表

  • 研究列表 - 74 条研究合为一页表格,含复杂度、网格坐标、要素消耗与 5 条条件注册项

要素列表

  • 要素标签 - 56 条注册要素标签(对象 39 + 实体 17),本模组不自定义要素

配方列表

  • 注入配方 - 40 条注入配方(生物注入 30 + 自身注入 10)合为一页两张表

GUI 列表

  • GUI 处理器 - 9 个 GUI ID 的容器/界面配对与打开路径

维度列表

  • 口袋世界 - Pocket Plane(ID 69)的环境参数、内容门控与传送门方块

设置列表

  • 配置 - 9 个配置项(general 4 / potions 5)与药水 ID 的二次重排机制

网络列表

  • 网络封包 - 通道名 thaumichorizons 与 15 个存活封包(另 2 个未注册的死代码封包)

集成列表

  • 第三方模组集成 - Thaumcraft 4 宿主判定、Baubles 硬依赖、GregTech 5 门控与身份字符串大小写分歧