Mixin 加载与 Access Transformer
基本信息
| 属性 | 值 |
|---|---|
| Coremod 类 | net.sxmaa.headlessnh.EarlyMixinLoader |
| 声明位置 | gradle.properties 的 coreModClass = EarlyMixinLoader |
| Mixin 声明类 | net.sxmaa.headlessnh.mixins.Mixins(实现 com.gtnewhorizon.gtnhmixins.builders.IMixins) |
| AT 文件 | src/main/resources/META-INF/headlessnh_at.cfg |
| Mixin 集数量 | 5 |
| Java 文件数 | 13 |
HeadlessNH 用的是 GTNH 的 gtnhmixins 框架:不手写 IFMLLoadingPlugin 的 mixin 列表,而是用枚举 + Builder 声明,由 EarlyMixinLoader 交给框架组装。
5 个 Mixin 集
| 枚举常量 | 阶段 | 条件 | 承载类 |
|---|---|---|---|
JOIN_WORLD_ON_MAINMENU_LOAD |
EARLY | 无 | MinecraftMixin |
JOIN_WORLD_ON_MAINMENU_LOAD_CMM |
LATE | 必须有 Custom Main Menu | GuiCustomMixin |
NOTIFY_OF_FINISHED_WORLD_LOAD |
EARLY | 排除 Angelica | WorldRendererMixin |
NOTIFY_OF_FINISHED_WORLD_LOAD_ANGELICA |
LATE | 必须有 Angelica | CeleritasWorldRendererMixin |
PREVENT_OUT_OF_FOCUS |
EARLY | 无 | EntityRendererMixin |
条件通过 MixinBuilder 的 addRequiredMod / addExcludedMod 表达,判定依据是 TargetedMod 枚举,它封装了 Loader.isModLoaded(modId)。
TargetedMod 两个值:_ANGELICA(coreModClass com.gtnewhorizons.angelica.loading.AngelicaTweaker,modid angelica)、CUSTOM_MAIN_MENU(modid custommainmenu)。
3 个 mixin 配置 JSON
| 文件 | package | 消费者 |
|---|---|---|
mixins.headlessnh.early.json |
...mixins.early |
EarlyMixinLoader.getMixinConfig() |
mixins.headlessnh.late.json |
...mixins.late |
LateMixinLoader |
mixins.headlessnh.json |
...mixins |
框架通用配置(package 本身不含具体 Mixin) |
三者共享 "refmap": "mixins.headlessnh.refmap.json"、"compatibilityLevel": "JAVA_8"、"minVersion": "0.8.5-GTNH"。只有 early 配置额外声明 "mixinextras": {"minVersion": "0.5.0"}——因为 EntityRendererMixin 用了 @ModifyExpressionValue。
[!NOTE]
getASMTransformerClass()返回new String[0],getModContainerClass()/getSetupClass()/getAccessTransformerClass()均返回null,injectData是空实现。AT 不是通过这个 coremod 挂上去的,而是靠gradle.properties的accessTransformersFile = headlessnh_at.cfg由构建脚本打包进META-INF/。
Access Transformer:12 条
全部是放宽 1.7.10 中为 private 的 GUI 成员,目的只有一个——让 MinecraftMixin 能合成按钮并直接写字段。
| 目标 | 开放成员 | 用途 |
|---|---|---|
GuiMainMenu |
func_146284_a |
派发单人/多人按钮 |
GuiSelectWorld |
func_146284_a |
派发「创建新世界」 |
GuiCreateWorld |
func_146284_a |
派发「创建」 |
GuiCreateWorld |
field_146333_g |
世界名文本框(textField1) |
GuiCreateWorld |
field_146335_h |
种子文本框(textField2) |
GuiMultiplayer |
func_146284_a |
派发「直接连接」 |
GuiMultiplayer |
field_146806_v |
addingServer 标志 |
GuiMultiplayer |
field_146811_z |
selectedServer |
GuiMultiplayer |
field_146809_s |
btnSelectServer |
GuiScreenServerList |
field_146302_g |
textBox(服务器地址) |
GuiScreenServerList |
field_146301_f |
serverData |
GuiScreenServerList |
field_146303_a |
btnJoinServer |
GuiIngameMenu |
func_146284_a |
派发「返回游戏」 |
共 13 行规则(12 个不同类成员,func_146284_a 在 5 个界面上各一条)。
相关条目
- MinecraftMixin - 这些 AT 的实际消费方
- 世界加载检测 - Angelica 条件如何切换实现
- Custom Main Menu 适配 - LATE 阶段的 mixin
- 失焦暂停菜单抑制 - MixinExtras 依赖