CodeChickenCorePlugin
基本信息
| 属性 | 值 |
|---|---|
| 类全名 | codechicken.core.launch.CodeChickenCorePlugin |
| 实现接口 | cpw.mods.fml.relauncher.IFMLLoadingPlugin |
| 声明方式 | gradle.properties:125 coreModClass = core.launch.CodeChickenCorePlugin + gradle.properties:14 modGroup = codechicken 拼合 |
| 目标 MC | 1.7.10(CodeChickenCorePlugin.java:34 @IFMLLoadingPlugin.MCVersion("1.7.10")) |
| 版本区间 | [1.7.10](CodeChickenCorePlugin.java:39 mcVersion = "[1.7.10]") |
| 源码行数 | 225 |
功能
它是本模组的 coremod 入口,运行在 FML 加载期、早于任何 @Mod 类。该类本身不注册任何方块、物品或实体。
注解声明了两件事(CodeChickenCorePlugin.java:34-36):
@IFMLLoadingPlugin.MCVersion("1.7.10")—— 供 FML 核对@IFMLLoadingPlugin.TransformerExclusions({ "codechicken.core.asm", "codechicken.obfuscator", "codechicken.lib.asm", "codechicken.lib.config" })—— 4 个包被排除在本模组自己注册的转换器之外,避免自举修改导致重复注入
构造器(CodeChickenCorePlugin.java:49-58)在 FML 注入数据中取出 minecraftDir(FMLInjectionData.data()[6])与当前 MC 版本(data()[4]),并创建配置文件 config/CodeChickenCore.cfg(:53-54)。若 JVM 属性 -Dccc.dev.deobfuscate=true,还会反射注入 MCPDeobfuscationTransformer.LoadPlugin(:55-57、:98-117)。
转换器注册
getASMTransformerClass()(CodeChickenCorePlugin.java:61-64)先做版本校验,随后固定返回 2 个转换器:
| 顺序 | 类名 |
|---|---|
| 1 | codechicken.lib.asm.ClassHeirachyManager |
| 2 | codechicken.lib.asm.RedirectorTransformer |
getAccessTransformerClass()(:67-73)仅在 -Dccc.dev.runtimePublic=true 时返回 codechicken.core.asm.CodeChickenAccessTransformer,否则返回 null(默认关闭)。
getModContainerClass()(:76-78)返回 codechicken.core.asm.CodeChickenCoreModContainer;getSetupClass()(:81-83)返回 null。
启动钩子
injectData()(CodeChickenCorePlugin.java:86-96)做两件事:
- 读取
checks配置组,若checkRAM为true则执行内存检查 - 调用
TweakTransformer.load()(:94)与DelegatedTransformer.load()(:95)
两个 load() 都是条件注册:若最终没有任何转换项,TweakTransformer.load() 会打 debug 日志并直接返回(TweakTransformer.java:35-39),DelegatedTransformer.load() 同理(DelegatedTransformer.java:59-63),此时 Launch.classLoader.registerTransformer 不会被调用。
版本校验
versionCheck(String, String)(CodeChickenCorePlugin.java:119-147)用 VersionParser.parseRange 比对 FMLInjectionData.data()[4]。不匹配时:写 error 日志 → 弹出 JOptionPane 对话框 → System.exit(1)。该方法被本类的 getASMTransformerClass() 调用(:62),也因此被 ForgeMultipart 等同族模组在自己的 coremod 里复用(见 CodeChicken 生态契约)。
辅助工具方法
| 方法 | 行 | 用途 |
|---|---|---|
parseSize(String) |
:149-162 |
把 3GB / 512M 一类字符串解析为字节数 |
humanReadableByteCountBin(long) |
:164-177 |
字节数转 KiB/MiB/GiB 文本 |
systemCheck(ConfigTag) |
:179-224 |
内存不足时拼装 HTML 错误页并 exitJava(-98, true) |
静态字段
| 字段 | 行 | 说明 |
|---|---|---|
mcVersion |
:39 |
[1.7.10],被 ModContainer 复用 |
version |
:42 |
@Deprecated,转发 Tags.VERSION(构建期生成) |
config |
:44 |
全局 ConfigFile 实例 |
minecraftDir |
:45 |
游戏目录 |
currentMcVersion |
:46 |
运行时 MC 版本字符串 |
logger |
:47 |
Log4j logger,名称 CodeChickenCore |
相关条目
- DummyModContainer - 本类通过
getModContainerClass()暴露的 FML 容器 - TweakTransformer - 由
injectData()调用的两个条件转换器之一 - DelegatedTransformer - 由
injectData()调用的两个条件转换器之一 - CodeChickenCore.cfg - 本类创建的配置文件