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 个界面上各一条)。

相关条目