CodeChickenCoreModContainer

基本信息

属性 值
类全名 codechicken.core.asm.CodeChickenCoreModContainer
父类 cpw.mods.fml.common.DummyModContainer
源码行数 79
模组名 CodeChicken Core(CodeChickenCoreModContainer.java:33)
modId CodeChickenCore(CodeChickenCoreModContainer.java:34)

功能

FML 的 coremod 没有 @Mod 注解就无法出现在模组列表里。CodeChickenCoreModContainer 就是为此存在的:它继承 DummyModContainer,让本模组在 Forge 模组列表、依赖解析与生命周期事件中表现得像一个普通模组。

getModContainerClass() 返回本类(CodeChickenCorePlugin.java:76-78),因此容器在所有 ASM 转换器之前被构造。

元数据在构造器中写死(CodeChickenCoreModContainer.java:31-37):

  • name = "CodeChicken Core"
  • modId = "CodeChickenCore"
  • version = Tags.VERSION

version 来自构建期生成的 codechicken.core.asm.Tags 类(gradle.properties:77 generateGradleTokenClass、:80 gradleTokenVersion = VERSION)。该常量在本仓无 .java 源文件,其运行时取值无法从源码核实;本 clone 中唯一的 tag 是轻量 tag 1.4.22。

生命周期

registerBus()(CodeChickenCoreModContainer.java:54-57)把自己注册到 FML 事件总线,随后两个 @Subscribe 方法生效,且都只在客户端执行:

事件 行 行为
FMLPreInitializationEvent :60-62 客户端调用 LiquidTextures.init()
FMLInitializationEvent :65-73 客户端调用 ClientUtils.enhanceSupportersList("CodeChickenCore")、ClientUtils.registerLocalizedColourReloadListener(),并把同一个 CCCEventHandler 实例同时注册到 FMLCommonHandler.instance().bus() 与 MinecraftForge.EVENT_BUS

版本范围

acceptableMinecraftVersionRange()(CodeChickenCoreModContainer.java:76-78)返回 VersionParser.parseRange(CodeChickenCorePlugin.mcVersion),即 [1.7.10] —— 与 CodeChickenCorePlugin 的 @IFMLLoadingPlugin.MCVersion 声明互相独立、取值相同,构成版本门的第二处源码证据。

依赖声明

getDependants()(CodeChickenCoreModContainer.java:40-51)返回 6 条硬编码的版本引用,条件是 !getVersion().contains("$")(即版本字符串里没有 $ 占位符,开发构建下不声明依赖):

依赖 版本范围
Forge [10.13.3,)
NotEnoughItems [1.0.5,)
EnderStorage [1.4.7,)
ChickenChunks [1.3.4,)
Translocator [1.1.2,)
WR-CBE|Core [1.4.1,)

这份列表是 ChickenBones 时代的历史包袱:mcmod.info 的 authorList 为 ["ChickenBones", "GTNH Team"],description 为 Base common code for all chickenbones mods(src/main/resources/mcmod.info:5-9),而这些依赖在 dependencies.gradle 中一个都没有声明。换言之,这 6 条是 FML 侧声明的运行时约束,而非 Gradle 构建依赖。

实际注册内容

GameRegistry.*、registerBlock、registerItem、registerTileEntity、EntityRegistry 在整个 src/main/java 下的命中数为 0(grep -rn 'GameRegistry\.\|registerBlock\|registerItem\|registerTileEntity\|EntityRegistry' --include='*.java' src/main/java/ → 0 行)。本模组注册 0 方块、0 物品、0 实体。

相关条目