Salis Arcana

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

Salis Arcana 是一套面向 Thaumcraft 4 的配置、工具与缺陷修复集合,由 rndmorris 与 Midnight145 维护。它不是独立玩法模组——自身只注册 1 个方块、2 个物品与 4 条研究,全部实质内容是对泰奥神秘时代 4 的 153 条字节码补丁、204 项可配置开关、10 条服务端命令与 9 个网络消息。

工作方式是 coremod + mixin + ASM:以 FML 核心模组身份在所有模组的 preInit 之前运行,读取配置、再用 SalisArcanaClassTransformer 与 204 个 mixin 类改写 Thaumcraft 4 的字节码。所有补丁由 SalisBuilder 以枚举方式集中注册,每个补丁用 applyIf(...) 绑定到某一项配置开关——关掉开关即让对应补丁失效,Thaumcraft 代码原样运行。

依赖:Thaumcraft 4(唯一硬依赖,modid Thaumcraft,Gradle 坐标 thaumcraft:Thaumcraft:1.7.10-4.2.3.5)+ UniMixins 0.1.23+。tc4tweak(需 ≥1.5.32)与 gtnhtcwands 为软依赖,另有 11 个模组为仅编译期依赖。

身份标识

以下字符串互不相同,均从源码读出而非从目录名推断:

身份 值 来源
modid salisarcana(无连字符) SalisArcana.java:27,gradle.properties 的 modId
分类目录名 salis-arcana(有连字符) relation.md 注释「驼峰转小写」
显示名 Salis Arcana gradle.properties 的 modName;SalisArcana.java:22
Modrinth slug salis-arcana Updater.java:47 拼接的更新 URL
仓库目录名 Salis-Arcana git ls-files 与 os.listdir 双重确认
FML 容器类 core.SalisArcanaCore gradle.properties 的 coreModClass;内部常量 MODID = "salisarcana"
modGroup dev.rndmorris.salisarcana gradle.properties
资源域 salisarcana assets/salisarcana/**
第二个资源域 baubles assets/baubles/textures/items/empty_bauble_slot_focus_pouch.png — 属于另一个模组的域,本模组只借用其路径放一张贴图
注册域 salisarcana GameRegistry.registerBlock/registerItem 传入未限定名,由 FML 自动加 modid 前缀
jar 名 取决于 modId = salisarcana gradle.properties 的 customArchiveBaseName 被注释掉,故由 modId 推导

@Mod 注解类有且仅有 1 个:dev.rndmorris.salisarcana.SalisArcana。全仓有 64 个文件命中字符串 @Mod,但其中 63 个是 MixinExtras 注入器注解(@ModifyArg、@ModifyConstant、@ModifyExpressionValue、@ModifyReceiver、@ModifyVariable)的字面前缀碰撞——这正是「短 token 子串匹配」的典型陷阱。真正的 @Mod( 注解只有 1 处。

MC 版本

Minecraft 1.7.10 / Forge 10.13.4.1614,四重独立证据一致:

  • gradle.properties:minecraftVersion = 1.7.10、forgeVersion = 10.13.4.1614
  • SalisArcana.java:23:acceptedMinecraftVersions = "[1.7.10]"
  • SalisArcanaCore.java:17:@IFMLLoadingPlugin.MCVersion("1.7.10")
  • 加载器为 cpw.mods.fml(Forge 1.7.10 专属 API),构建用 RetroFuturaGradle(com.gtnewhorizons.gtnhconvention)

本条目不依据 net.neoforged / net.fabricmc 字符串判断版本。

模组版本:无法核实

模组自身的版本号无法从本镜像核实,三种版本形式全部落空:

  1. gradle.properties 中没有 modVersion 键(全文件无任何 modVersion 引用)
  2. src/main/resources/mcmod.info 的 "version" 字段是未解析的占位符 "${modVersion}"
  3. SalisArcana.java:21 引用 Tags.VERSION,而 dev/rndmorris/salisarcana/Tags.java 由 gradle 的 generateGradleTokenClass 在构建期生成,源码仓库中不存在

原因是镜像为浅克隆:git rev-parse --is-shallow-repository 为 true,git log 只有 1 个提交,git tag 为 0 个。RetroFuturaGradle 的版本号依赖 git 标签,此处无从取得。

因此本条目不引用 git describe:该仓库上 git describe --tags 直接失败——fatal: No names found, cannot describe anything.;而 git describe --always 返回的只是裸哈希 c9d264d,不是版本号。改引已用 git cat-file -t c9d264d 验证为 commit 对象的提交哈希(完整值 c9d264d0f1c9bcd805cb4854ec63274ee1787d35,日期 2026-09-21)。

这不属于「反编译 jar」例外:仓库有完整的 gradle 构建(build.gradle、settings.gradle、gradle.properties、gradlew),源码是真实源码。属浅克隆这一种特殊情况,据实记录,不编造版本号。

注册内容

以下全部为实际生效的注册,已排除死代码与注释掉的注册:

类别 数量 说明
FML 模组容器 1 SalisArcana.java
FML 核心模组 1 SalisArcanaCore(IFMLLoadingPlugin + IEarlyMixinLoader)
ASM 类变换器 1 SalisArcanaClassTransformer(SalisArcanaCore.java:31)
混入配置 3 mixins.salisarcana{,.early,.late}.json
混入枚举常量 153 mixins/Mixins.java,实现 IMixins
混入类 204 206 处引用去重;与磁盘 .java 双向零差
方块 1 salisarcana:blockCustomPlank(2 个元数据变种)
物品 2 salisarcana:capPlaceholder、salisarcana:rodPlaceholder
研究条目 3 REPLACEWANDCAPS、REPLACEWANDCORE、CHESTSCAN
焦点升级类型 1 DisenchantFocusUpgrade(研究 FOCUS_DISENCHANTING)
服务端命令 10 经 XxxCommand::new 方法引用注册
网络消息 9 判别符 1–9
配置设置 204 7 个分组
矿石字典名 5 api/OreDict.java
目标模组 13 mixins/TargetedMod.java
访问变换器条目 8 META-INF/salisarcana_at.cfg

混入类的双向校验结果:注册表引用的 204 个类全部在磁盘上存在(悬空 0),磁盘上的 204 个 mixin 文件全部被引用(孤儿 0),且阶段归属全部正确。

配置列表

补丁列表

方块列表

  • 类生木木板 - 行为正常的生木/银木木板,兼作泰奥纳米肯的展示条目

物品列表

研究列表

命令列表

  • 命令 - 10 条 /salisarcana-* 服务端命令,权限 0 或 2,含一条子权限

核心列表

模组兼容列表

  • 模组兼容 - 13 个 TargetedMod 目标、4 个专用兼容类、依赖的硬/软/仅引用分层

网络列表

  • 网络消息 - 9 条消息,5 条服务端、4 条客户端

API 列表

  • 公开 API - 4 个实现接口与 5 个矿石字典常量

未收录范围

以下内容经核查后有意不单独立页,在此说明取舍:

  • lib/ 包的 32 个工具类(R、KnowItAll、WandHelper、AspectHelper、ArrayHelper 等)——纯内部工具,不对外承诺 API,逐个立页无玩家价值
  • common/compat/nei/ 3 个 NEI 处理器——已并入 模组兼容 的 NEI 小节
  • common/recipes/ 6 个配方类——配方内容分散在多个设置开关下,已在 补丁注册框架 与各设置页说明
  • 204 项设置逐条立页——按「同类合并为一页 + 表格」惯例收敛为 7 个分组页
  • 204 个混入类逐条立页——按配置分组收敛为 3 个补丁页,每页一张完整表
  • client/handlers、notifications/——事件处理器与更新器,无独立玩家可见行为