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)做两件事:

  1. 读取 checks 配置组,若 checkRAM 为 true 则执行内存检查
  2. 调用 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

相关条目