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。构造时:

  1. 从资源 /META-INF/unimixins-all.EmbeddedFMLCorePlugins.txt 读类名列表(空格分隔)。
  2. 对每个类名 Class.forName 并 newInstance(),存入 embeddedCorePluginInstances。
  3. 任何异常都包成 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 重复出现两次(源码既有问题), 详见 模块总览。

相关条目