ASM 工具包(codechicken.lib.asm)
基本信息
| 属性 | 值 |
|---|---|
| 包名 | codechicken.lib.asm |
| 公开类型数 | 14 |
| 关联配置文件 | config/CodeChickenLib.cfg(见 CodeChickenLib.cfg) |
| ASM 版本标记 | Opcodes.ASM4(DependancyLister 使用,DelegatedTransformer.java:157) |
功能
这是整个 CodeChicken 生态的地基。上面所有 coremod 变换器——TweakTransformer、RedirectorTransformer——都建立在这 14 个类之上。它对外提供的是「用可读文本描述字节码改动、再自动映射到运行时混淆名」的能力。
类清单
| 类 | 作用 |
|---|---|
ASMBlock |
一段带标签的指令块,含标签解析与克隆(get / applyLabels) |
ASMHelper |
类读写、标签克隆、文本反编译转储;持有全局 ConfigFile |
ASMInit |
初始化入口 |
ASMReader |
解析 .asm DSL 文本 → Map<String, ASMBlock> |
CC_ClassWriter |
自定义 ClassWriter,用 ClassHeirachyManager 缓存解析继承关系 |
ClassConstantPoolParser |
常量池扫描,判断字节码是否引用过某 owner(重定向器的触发器) |
ClassHeirachyManager |
超级类缓存(见 重定向器) |
ImportantInsnVisitor / InsnListSection / LocalVariablesSorterVisitor |
指令级辅助访问器 |
InsnComparator |
指令序列匹配,核心方法 findOnce(...) |
ModularASMTransformer |
组合式转换器,内含 MethodReplacer / MethodTransformer / MethodWriter 三个策略 |
ObfMapping |
「类 / MCP 名 / 描述符」三元组,提供 toRuntime() / toSrg() 与 MCPRemapper |
关键机制
混淆名映射
ObfMapping 持有 MCP 名与运行时混淆名的双向映射,并从字段/方法映射表反查(ObfMapping.java:57-61)。MCPRemapper(ObfMapping.java:94)负责读取 packaged.srg、fields.csv、methods.csv,目录猜测顺序为 6 次自动 + 3 次询问(DIR_GUESSES = 6、DIR_ASKS = 3,:118-119),全部失败时抛 "Failed to select mappings directory, set it manually in the config"(:115)。
调试转储
ASMHelper.dump(...) 支持 Textifier(可读文本)与 ASMifier(ASM 语法)两种输出,由 config.getTag("textify") 切换(ASMHelper.java:160、:171)。ModularASMTransformer 另有 config.getTag("dump_asm") 开关(ModularASMTransformer.java:50)。
消费者实证
ForgeMultipart(独立仓库,不在本分类内)不直接 import 本包,但整条变换链都建立在此之上。它在自己的 dependencies.gradle:4 声明 implementation("com.github.GTNewHorizons:CodeChickenCore:1.4.19:dev")——注意两点:一是版本 1.4.19 与本分类所引用的源码版本不同,二是带 :dev classifier(该 classifier 具体对应哪套构建产物,本条目无法从源码核实)。
相关条目
- CodeChickenCore.cfg - 主配置文件
- CodeChickenLib.cfg - 本包使用的独立调试配置文件
- 重定向器 - 本包中两个被无条件注册的转换器