module-all
基本信息
| 属性 | 值 |
|---|---|
| modid | unimixins |
| Java 文件 | 2 |
| 加载插件 | io.github.legacymoddingmc.unimixins.all.AllCore |
| 产出 | …-all-1.7.10.jar |
| 启用版本 | Minecraft 1.7.10 |
功能
聚合包(bundle)。把多个 UniMixins 子模块打包成单个 jar, 让它们在 mod 列表 GUI 里显示为一个 mod。
两个类
AllModule
/**
* This is only here so unimixins shows up in the mod list GUI as a single mod.
*/
@Mod(modid = "unimixins", version = "@VERSION@", acceptableRemoteVersions = "*")
public class AllModule {
}
⚠️ 空类,零字段零方法。@Mod 存在的唯一目的就是源码注释所说的
「在 mod 列表 GUI 中显示为单个 mod」。
⚠️ version = "@VERSION@" 是构建期占位符,源码里不是真实版本号。
AllCore
@MCVersion("1.7.10") 的 IFMLLoadingPlugin。构造时:
- 从资源
/META-INF/unimixins-all.EmbeddedFMLCorePlugins.txt读类名列表(空格分隔)。 - 对每个类名
Class.forName并newInstance(),存入embeddedCorePluginInstances。 - 任何异常都包成
RuntimeException抛出(catch(Exception e) { throw new RuntimeException(e); })。
实现要点
⚠️ EmbeddedFMLCorePlugins.txt 由构建脚本生成,源码树中不存在。
module-all/build.gradle 里:
def path = "build/tmp/unimixins-all.EmbeddedFMLCorePlugins.txt"
file(path).text = getModuleJars().findResults { getManifest(it).getValue("FMLCorePlugin") }.join(' ')
即它扫描所有子模块 jar 的 manifest、取 FMLCorePlugin 属性拼成一行。
所以只有带 FMLCorePlugin 的子模块会被聚合 ——
module-spongemixins 与 module-mixingasm
没有该属性,不会被 AllCore 加载(它们靠 MixinConfigs 生效)。
⚠️ 静态初始化块读取该资源;文件缺失会直接导致 RuntimeException,
即 unimixins-all jar 损坏时是硬失败,无降级。
⚠️ 'MixinConfigs' 里 mixins.gtnhmixins.json 重复出现两次(源码既有问题),
详见 模块总览。
相关条目
- 模块总览 - 10 模块 / 10 modid 对照
- module-mixin - 被聚合的成员之一
- SanityCheckHelper - 聚合包的前置检查