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 分派与治疗 / 克隆 / 注入三种用途
物品列表
生物实体列表
- 生物实体 - 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 门控与身份字符串大小写分歧