UniMixins
UniMixins 是一个面向 Minecraft 1.7.10(并对 1.8.9~1.12.2 提供部分支持)的 Mixin 加载器,旨在实现最大的兼容性。它的目标是尽可能整合更多 Mixin 加载器的功能,并且由于其模块化特性,如果需要,也可以与其他加载器一同使用。
背景
1.7.10 上存在许多 Mixin 加载器,而它们除了提供 Mixin 之外,还各自提供了一组不同的额外功能,我们将其称为 “extras”。
由于这些加载器都是单体式的,不同加载器之间因为不可避免的功能重叠而无法同时使用。为了解决这个问题,UniMixins 将每项功能都作为一个独立模块提供(不过为了方便,仍然提供了一个整合 jar)。
对比表
下面是一个已知 Mixin 加载器功能集的对比表。
注意:此表的更详细版本可在这里查看。

*
:不执行任何操作。(issue)
*
:可作为单独的 mod 提供。
使用方法
下载 -all jar,并将其放入你的 mods 目录中。移除任何其他冲突的 Mixin 加载器(参见上表)。
> 注意:非常重要的一点是,该 jar 的命名需要保证它在按字母排序时排在最前面,以避免与内嵌 Mixin 的 mod 出现排序问题。这也是为什么该 jar 以 + 字符开头。如果你在重命名后的 jar 上遇到问题,可能需要将其改为 ! 字符。
>
> 作为参考,以下是一些常见字符的排序顺序:! [仅 1.7.10]</div>
:提供对 SpongeMixins extras 的模拟实现。
- MixinBooterLegacy
:提供对 MixinBooterLegacy extras 的模拟实现,以及一个重定位后的 MixinExtras。
- MixinExtras:提供 MixinExtras。
- GasStation
:提供对 GasStation extras 的模拟实现。
- 依赖 SpongeMixins。
- 依赖 MixinBooterLegacy。
- 依赖 MixinExtras
- GTNHMixins
:提供对 GTNHMixins extras 的模拟实现,以及一个重定位后的 MixinExtras。
- 依赖 SpongeMixins。
- Compat:各种兼容性调整:
- 重映射 mod 中对 Mixin 类(特别是 shaded ASM)的无效引用。
- 在崩溃报告中添加关于 mixin 的信息。
- Mixingasm:提升 Mixin 与 ASM transformer 的兼容性。
可选
- Future Compat
:使许多模块可以在 1.8.9+ 上使用。在 1.8+ 上运行此 mod 所必需。(Mixingasm 不需要。)
非常可选
这些模块不会包含在发布版本中,主要用于测试目的。(注意:同一时间你只能使用一个 Mixin 模块。)
- Mixin (SpongePowered):提供 the upstream fork 的 Mixin。
- Mixin (Fabric):提供 the Fabric fork 的 Mixin。
- Mixin (GasMix):提供 the GasStation fork 的 Mixin。
- Mixin (GTNH):提供 the GTNH fork 的 Mixin。
常见问题
为什么还要做另一个 mixin 加载器?你没看过那张 xkcd 漫画吗?
在 UniMixins 被创建之前,1.7.10 上的 Mixin 加载器生态过于碎片化,不同 mod 需要不同且互不兼容的加载器。这部分是因为开发者之间的冲突,另一部分则是技术原因(这些加载器采用单体式设计,天然容易产生不兼容)。而这个项目不存在这两类问题。
为什么你们使用 Mixin 的 Fabric 分支?这不是一个 Forge mod 吗?
Mixin 的 Fabric 分支比上游分支维护得更活跃,并且包含一些额外修复。Fabric 分支中的大多数改动都不是 Fabric 特有的。
那些 “extras” 到底是做什么的?
- SpongeMixins、Grimoire、MixinBooterLegacy、GasStation 和 GTNHMixins 提供了多种方式,让你可以向非 coremod 的类应用 mixin。(这是 Mixin 原生不支持的,因为它的所有阶段都发生在 Forge 发现非 coremod 并将其加入 classpath 之前。)
- MixinBooterLegacy、GasStation 和 GTNHMixins 添加了一个“late” mixin 阶段,该阶段会在第一个 mod 构造事件分发之前触发。到这个时候,所有 mod 都已经被发现。
- SpongeMixins 允许你通过文件名手动将 mod 提前加入 classpath。这是一种老旧且比较 hacky 的解决方案。
- 我们推荐新 mod 使用 GTNHMixins,因为它是目前使用最广泛且维护最活跃的选项。
- Mixingasm 修复了 a Mixin issue,该问题会因为 Mixin 改变 ASM transformer 的调用方式而导致部分 ASM transformer 损坏。
- MixinExtras 添加了新的 Mixin 功能,使 mod 能编写侵入性更低的 mixin。
Mixin?mixin?SpongeMixins?SpongePowered?它们有什么区别?
- Mixin:一个 Java 库,让你可以用流畅的方式转换 Java 类。
- SpongePowered:创建了 Mixin 的组织(他们还开发了一个名为 Sponge 的 modding API)。
- mixin:一种特殊的 Java 类,用于定义应当应用到某个类上的“更改”。这些更改由 Mixin 应用。
- SpongeMixins:由 TimeConqueror 创建的一个 Mixin 加载器,它的名字非常通用。
许可证
UniMixins 采用 Unlicense 许可证,但某些模块除外。完整细节请参见 LICENSE。