Mixin 配置

基本信息

属性 值
类型 mixin 配置文件与构建期开关
配置文件 src/main/resources/mixins.foundation.early.json、src/main/resources/mixins.foundation.json
实际被加载的配置 仅 mixins.foundation.early.json
UniMixins 最低版本 0.8.5-GTNH
refmap mixins.foundation.refmap.json(构建期生成,不在源码仓库内)
资源目录文件总数 3(两个 JSON + mcmod.info)

行为

mixins.foundation.early.json(被 coremod 加载)

{
  "required": true,
  "minVersion": "0.8.5-GTNH",
  "package": "com.gtnewhorizons.foundation.mixins.early",
  "refmap": "mixins.foundation.refmap.json",
  "target": "@env(DEFAULT)",
  "compatibilityLevel": "JAVA_8"
}

由 FoundationCore.getMixinConfig() 返回(源码 core/FoundationCore.java:56), 通过 IEarlyMixinLoader 交给 UniMixins 在早期挂载。

mixins.foundation.json(未被任何代码引用)

{
    "required": true,
    "minVersion": "0.8.5-GTNH",
    "refmap": "mixins.foundation.refmap.json",
    "target": "@env(DEFAULT)",
    "compatibilityLevel": "JAVA_8"
  }

该文件只比 early 版少了 package 一行。全仓库对 mixins.foundation.json 的引用为 零——grep -rn "mixins.foundation" src/main/java 唯一命中是 FoundationCore.java:56 的 mixins.foundation.early.json。它是 GTNH 约定插件 (com.gtnewhorizons.gtnhconvention)按默认命名生成的常规 mixin 配置,占位存在但本 coremod 不会请求它:Foundation 全部 6 个 mixin 都是 EARLY,没有 LATE 阶段。

关键点:mixin 类不在 JSON 里枚举

两个 JSON 都没有 "mixins" 数组(grep '"mixins"' 在 src/main/resources/*.json 零命中)。实际类清单在 Java 侧枚举 Mixins 中,通过 IMixins.getEarlyMixins(Mixins.class, loadedCoreMods) 动态生成,见 Mixin 清单。

因此 early JSON 里的 "package": "com.gtnewhorizons.foundation.mixins.early" 在当前 代码路径下并不承担类名解析职责——Mixins 枚举里的类名是相对 com.gtnewhorizons.foundation.mixins 的(如 client.MixinChunk、 MixinS21PacketChunkData),由 GTNHLib 补全为全限定名。

JSON 字段对照

字段 mixins.foundation.early.json mixins.foundation.json 说明
required true true 配置缺失或应用失败时直接启动失败
minVersion 0.8.5-GTNH 0.8.5-GTNH UniMixins 最低版本
package com.gtnewhorizons.foundation.mixins.early 无
refmap mixins.foundation.refmap.json mixins.foundation.refmap.json 源码仓库内不存在(find -name "*refmap*" 无结果),由构建期注解处理器生成
target @env(DEFAULT) @env(DEFAULT) 默认环境(同时含客户端与服务端)
compatibilityLevel JAVA_8 JAVA_8
mixins 无此键 无此键 类清单改由 Mixins 枚举提供

Gradle 开关(gradle.properties)

构建脚本 build.gradle.kts 全文只有 plugins { id("com.gtnewhorizons.gtnhconvention") }, 所有行为由 gradle.properties 驱动。与 mixin / coremod 相关的项:

属性 值 作用
usesMixins true 启用 mixin 支持,并自动加入 UniMixins 依赖
usesMixinDebug true 追加调试参数(verbose 输出 + class 导出)
mixinsPackage mixins 允许放置 mixin 的包,构建期校验越界即失败
coreModClass core.FoundationCore coremod 入口(配合 modGroup 解析为 com.gtnewhorizons.foundation.core.FoundationCore)
mixinPlugin (空) 不使用自定义 IMixinConfigPlugin
separateMixinSourceSet (空) mixin 不拆独立 source set,与主源码同编译单元
forceEnableMixins false 不为依赖本 mod 的其他 mod 强制开启 mixin
containsMixinsAndOrCoreModOnly false 本 mod 有普通 @Mod 类(Foundation),不是纯 mixin/coremod
accessTransformersFile (空) 不使用 Access Transformer(与 getAccessTransformerClass() 返回 null 一致)
modGroup com.gtnewhorizons.foundation 根包
apiPackage api 对外 API 包 com.gtnewhorizons.foundation.api
generateGradleTokenClass com.gtnewhorizons.foundation.Tags 生成含 VERSION 的类(Tags 本身不在源码仓库,由构建生成)
minecraftVersion 1.7.10
forgeVersion 10.13.4.1614
mappingsVersion 12(channel = stable)
enableModernJavaSyntax true 经 Jabel 使用 Java 17 语法,仍以 JVM 8 为目标
enableGenericInjection true 向反编译源码注入泛型

数值

数值 值
资源目录文件数 3
JSON 配置文件数 2
被 coremod 实际加载的 JSON 1
声明 "mixins" 数组的 JSON 0
源码仓库内的 refmap 文件 0

相关条目