module-mixin
基本信息
| 属性 | 值 |
|---|---|
| modid | unimixins-mixin |
| Java 文件 | 4 |
| 加载插件 | io.github.legacymoddingmc.unimixins.mixin.MixinCore |
| 产出 | …-mixin-1.7.10.jar |
| 启用版本 | Minecraft 1.7.10 |
功能
Mixin 库 fork。UniMixins 系列的根基 —— 其它模块都依赖它提供的
Mixin 0.8 运行时。它本身就是 mcmod.info 里的
「UniMixins module that provides the @MIXIN_SOURCE_CAPITALIZED@ fork of Mixin」。
4 个类
| 类 | 行数 | 作用 |
|---|---|---|
MixinCore |
58 | IFMLLoadingPlugin,Mixin 环境平台相关初始化 |
MixinModule |
4 | 空 @Mod 标记类 |
MixinSanityCheck |
54 | 环境自检 |
MixinModidDecorator |
146 | 用 modid 装饰 mixin 报错信息 |
MixinCore
@IFMLLoadingPlugin.MCVersion("1.7.10")。getASMTransformerClass()
返回 new String[0] —— 本模块自身不注册 ASM transformer。
其静态初始化块在自检开启时依次检查 3 件事:
MixinSanityCheck.checkMixinHasInitialized(),
MixinSanityCheck.checkMixinContainer(),
SanityCheckHelper.checkIfJarPrefixesExist(
Arrays.asList("gasstation-", "mixinbooterlegacy-", "spongemixins-"))
MixinModule
/**
* An empty mod class provided to make it impossible to load multiple editions
* of the module at the same time.
*/
@Mod(modid = "unimixins-mixin", version = "@VERSION@", acceptableRemoteVersions = "*")
public class MixinModule {}
⚠️ 用途与 AllModule 不同:
AllModule 是「GUI 里显示为一个 mod」,
MixinModule 是「阻止同时加载多个版本」。
两者都写成 @Mod 但目的相反,容易混淆。
MixinSanityCheck
2 个检查:
checkMixinHasInitialized()—— 检查Launch.blackboard是否含mixin.initialised键;缺则提示「dev 环境需用--tweakClass传入 MixinTweaker」。checkMixinContainer()— 对比两个类各自所在 jar 名:MixinCore.class与org/spongepowered/asm/launch/MixinTweaker.class。 不同名即说明「加载了别的 Mixin 版本」。
⚠️ checkMixinContainer 的提示里有个实用技巧:若怀疑是文件名排序问题
(UniMixins 的 jar 名按字母序排在后面),建议在文件名前加 ! 字符使其排到最前。
MixinModidDecorator
146 行,参考 Fabric Loader 的 FabricMixinBootstrap。为 mixin 配置装饰 modid,
使报错信息里显示 modid 而非 jar 名。
用 Launch.blackboard 键 unimixins.mixinModidDecorator.refresh 注册了一个
Runnable 句柄,供「之后新增 mixin 配置」时触发刷新。
实现要点
⚠️ 本模块没有 MixinConfigs(manifest 中该属性缺省),
它不提供 mixin,只提供 mixin 运行时。
⚠️ manifest 额外声明 Implementation-Version: mixinVersion,
以及 Premain-Class / Agent-Class = MixinAgent、
Can-Redefine-Classes / Can-Retransform-Classes = true
—— 即可作为 Java agent 启动。
⚠️ 注释里明确说明 ASM 刻意不 relocate(「We want to not relocate ASM in the bridge classes」),改用多步构建流程处理。
相关条目
- 模块总览 - 10 模块对照
- SanityCheckHelper -
checkIfJarPrefixesExist的实现 - module-all - 聚合本模块
- ASMRemapperTransformer - 配套的 ASM 包名适配