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 实体。
相关条目
- CodeChickenCorePlugin - 声明本类为 ModContainer 的 coremod 入口
- CodeChicken 生态契约 - 上表 6 个依赖的用途与实际消费方
- 客户端运行时与事件 -
init()中注册的CCCEventHandler