NotFine AsmTransformers(NotFine 的 transformer 枚举)

基本信息

属性 值
类 jss.notfine.asm.AsmTransformers
路径 src/main/java/jss/notfine/asm/AsmTransformers.java
行数 33
类型 public enum AsmTransformers implements ITransformers(:12)
枚举项数 2
所属 modid notfine(不是 angelica)

2 个枚举项

枚举项 applyIf 条件 transformer 类名 行
RENDERBLOCKS AngelicaConfig.enableMCPatcherForgeFeatures && MCPatcherForgeConfig.CustomColors.enabled jss.notfine.asm.RenderBlocksTransformer :14-16
WORLDRENDERER NotFineConfig.renderPass jss.notfine.asm.WorldRendererTransformer :17-19

RENDERBLOCKS 是双重门控:既要求 Angelica 主配置的总开关,又要求 MCPatcherForge 的 custom_colors 分类开关。

WORLDRENDERER 恒为 false

NotFineConfig.renderPass 在 NotFineConfig.java:40 被无条件覆盖为 false(见 NotFine 的缺陷说明)。因此 WORLDRENDERER 的 applyIf 永远返回 false,WorldRendererTransformer 实际上永远不会被注册。

这是一处典型的「配置项存在但代码从不采用」:notfine.cfg 里的 renderPass 开关写了、注释写了、AsmTransformers 也绑定了,唯独 loadSettings() 在保存后把它抹成 false。

构造即建 Builder

:23-25:

AsmTransformers(Supplier<Boolean> applyIf, String transformer) {
    this.builder = new TransformerBuilder().setApplyIf(applyIf).addClientTransformers(transformer);
}

每个枚举项在类加载时就构造好一个 TransformerBuilder,并通过 addClientTransformers(client 限定)登记类名。

注册路径

由 AngelicaClientTweaker :119-121 消费:

final List<String> notFineTransformers = Arrays.asList(ITransformers.getTransformers(AsmTransformers.class));
if (!notFineTransformers.isEmpty()) Namer.initNames();
transformers.addAll(notFineTransformers);

ITransformers.getTransformers(...) 是 gtnhmixins 的框架方法,会按各枚举项的 applyIf 过滤。Namer.initNames() 只在结果非空时调用一次。

因为 WORLDRENDERER 恒 false,notFineTransformers 最多只含 1 项(RenderBlocksTransformer,且需两级开关都开)。

ASM 实现类

jss/notfine/asm/ 目录共 4 个 java 文件 + 1 个 mappings 目录:

文件 角色
AsmTransformers.java 本枚举
RenderBlocksTransformer.java 对应 RENDERBLOCKS
WorldRendererTransformer.java 对应 WORLDRENDERER(实际不可达)
ASMUtils.java ASM 辅助
mappings/ 混淆映射目录

与 Angelica 侧兼容 transformer 的区别

NotFine AsmTransformers Angelica CompatHandlers
项数 2 5
注册方式 gtnhmixins ITransformers 框架 手写 getTransformers() 返回类名
门控 逐项 Supplier<Boolean> 逐项 CompatConfig 开关
额外机制 无 handler 非空时追加 GenericCompatTransformer
过滤时机 getTransformers(AsmTransformers.class) 内部 getHandlers() 循环内

两套机制在 AngelicaClientTweaker.getASMTransformerClass() 里被合并到同一个 List<String>,因此 Namer 初始化只需一次。

相关条目