Mixin 注册机制总览

基本信息

属性 值
注册枚举 me.eigenraven.lwjgl3ify.mixins.Mixins
枚举条目数 12
覆盖的唯一 mixin 类数 22
目录下 mixin 源文件数 22
早期加载器 Lwjgl3ifyCoremod(IEarlyMixinLoader)
晚期加载器 Lwjgl3ifyLateMixins(@LateMixin + ILateMixinLoader)
目标模组枚举 me.eigenraven.lwjgl3ify.mixins.TargetedMod(6 项)

LWJGL3ify 的 mixin 列表不在 JSON 里。三个 mixins.lwjgl3ify*.json 的 mixins / client / server 数组全部缺失(详见下文),真实列表由 Mixins 枚举经 GTNH Mixins 的 MixinBuilder DSL 动态生成。

功能

三个 mixin JSON 均为空壳

src/main/resources/ 下的三个配置文件实测内容(全文):

文件 package 特殊字段 数组
mixins.lwjgl3ify.early.json me.eigenraven.lwjgl3ify.mixins.early mixinextras.minVersion = 0.5.0 无
mixins.lwjgl3ify.json me.eigenraven.lwjgl3ify.mixins 无 无
mixins.lwjgl3ify.late.json me.eigenraven.lwjgl3ify.mixins.late 无 无

三者共有 "required": true、"minVersion": "0.8.3-GTNH"、"refmap": "mixins.lwjgl3ify.refmap.json"、"target": "@env(DEFAULT)"、"compatibilityLevel": "JAVA_8"。

数组为空是设计而非缺陷:条目列表由 IMixins.getEarlyMixins(Mixins.class, loadedCoreMods) 在运行时计算(Lwjgl3ifyCoremod.java:74),结果作为 getMixins() 的返回值传给 Mixin 引导器,根本不经过 JSON 数组。

12 个枚举条目

Mixins.java:13-80(整段被 // spotless:off / // spotless:on 包裹):

# 条目 Phase 门控 mixin 数
1 FORGE_JAVA9 EARLY — 4
2 STB_TEXTURE_LOADING EARLY 配置 2
3 TEXT_FIELD_SDL_INPUT EARLY — 5
4 OPEN_URL_WITH_SDL EARLY — 4
5 FLOAT_MOUSE_MOVEMENT EARLY — 2
6 MINECRAFT_SCALE_FULLSCREEN_CORRECTLY EARLY — 1
7 XAEROS_MINIMAP_SCROLL LATE modId 1
8 XAEROS_WORLDMAP_SCROLL LATE modId 1
9 OPENCOMPUTERS_KEYBOARD_INPUT_FIX EARLY coreMod+modId 1
10 STB_TEXTURE_STITCHING EARLY 配置 + 排除模组 1
11 STB_TEXTURE_STITCHING_FORCE EARLY 配置 + 必需模组 1
12 STB_TEXTURE_STITCHING_FOR_FASCRAFT EARLY 配置 + 2 必需模组 1

注意 game.MixinStitcher 在条目 10/11/12 中被引用 3 次(Mixins.java:67,72,77),故 12 个条目共引用 24 次、覆盖 22 个唯一 mixin 类——与目录下 22 个 .java 文件一一对应,无遗漏、无多余。

计数交叉验证

方法 结果
枚举常量正则 ^ [A-Z][A-Z_0-9]*\( 12
new MixinBuilder 出现次数 12
.add(Common|Client)Mixins( 出现次数 12
唯一 mixin 名字符串(多段式正则) 22
git ls-files 中 mixins/** 排除 Mixins.java/TargetedMod.java 后 22

注:FORGE_JAVA9 含数字 9,若用 [A-Z_]+ 字符类会漏计为 11。本条目采用含 0-9 的字符类并已二次核对。

两个加载器

  • 早期:Lwjgl3ifyCoremod 同时实现 IFMLLoadingPlugin 与 IEarlyMixinLoader(Lwjgl3ifyCoremod.java:22),getMixinConfig() 返回 mixins.lwjgl3ify.early.json(:69)。
  • 晚期:Lwjgl3ifyLateMixins 标注 @LateMixin(Lwjgl3ifyLateMixins.java:14),getMixinConfig() 返回 mixins.lwjgl3ify.late.json(:19),getMixins 调 IMixins.getLateMixins(:25)。

mixins.lwjgl3ify.json 的归属

该文件未被任何 Java / Kotlin / Gradle 源文件按字符串引用(全仓 grep "mixins.lwjgl3ify.json" 无命中)。同样的模式在 GTNHLib 镜像中同样存在:mixins.gtnhlib.json 存在但 grep '"mixins\.gtnhlib\.json"' 亦无命中,而 mixins.gtnhlib.early.json 被 GTNHLibCore.java:171 引用、mixins.gtnhlib.late.json 被 GTNHLibLateMixinLoader.java:16 引用。

因此这是 GTNH 构建体系下各 mod 共同的目录约定产物,并非 lwjgl3ify 独有的缺陷。究竟由谁加载这个裸配置——无法核实:UniMixins 侧的扫描/引导逻辑不在本仓库内。UniMixins 虽有本地镜像(/Users/evlos/a/mirror/UniMixins),但本次未对其做源码核验,因此不给出具体的加载器类名,也不下"该文件是死文件"的结论。

数值

数值 值
mixin JSON 文件数 3
含非空 mixins 数组的 JSON 0
枚举条目数 12
唯一 mixin 类数 22
EARLY 阶段条目 10
LATE 阶段条目 2
addCommonMixins 条目 1(FORGE_JAVA9)
addClientMixins 条目 11
TargetedMod 枚举项 6
setApplyIf 配置门控条目 4

交互

触发 行为
早期 mixin 加载 走 Lwjgl3ifyCoremod.getMixins,Phase.EARLY 条目被求值
晚期 mixin 加载 走 Lwjgl3ifyLateMixins.getMixins,Phase.LATE 条目被求值
条目设了 addRequiredMod 且目标模组未加载 整条跳过
条目设了 addExcludedMod 且目标模组已加载 整条跳过
条目设了 setApplyIf 且谓词为假 整条跳过
目标模组由 coremod 类判定(如 FastCraft、OptiFine) 通过 setCoreModClass 在 loadedCoreMods 集合中查找

相关条目