EarlyRedirectorTransformer

基本信息

属性 值
类 com.gtnewhorizons.angelica.loading.fml.transformers.EarlyRedirectorTransformer
路径 src/main/java/com/gtnewhorizons/angelica/loading/fml/transformers/EarlyRedirectorTransformer.java
行数 27
类型 public class ... implements IClassTransformer(:19)
内部实现 EarlyRedirectorCore(glsm 子项目)

它是什么

生命周期最短的 transformer:coremod 构造期注册,运行期被移除。全类只有一个字段 + 一个方法 + 一段 Javadoc。

Javadoc 是本类最重要的文档(:7-18)

A scoped redirector that only transforms classes from known-misbehaving (core)mod packages.

Some mods prematurely load classes that call GL functions during coremod discovery/injectData.
Those classes get missed by the late-registered AngelicaRedirectorTransformer, so their
GL calls permanently bypass GLSM.

Registered in AngelicaClientTweaker constructor. Removed by AngelicaLateTweaker
once the full redirector is in its proper post-mixin position.

即:某些 mod 在 coremod discovery/injectData 阶段就提前加载了会调 GL 函数的类。完整版 AngelicaRedirectorTransformer 注册得太晚(要在 mixin 之后),这些类一旦已被加载就再也拦不住,GL 调用永久绕过 GLSM。本类作为「早期保险」先挂上。

挂在哪个阶段

阶段 位置
注册 AngelicaClientTweaker 构造函数(Javadoc :14 明确),手工 classloader 排除式注册
排序 早于 mixin(EcosystemNarrowRules.EARLY_REDIRECTOR_TARGETS,见 @see :17)
移除 AngelicaLateTweaker.getLaunchArguments :55-71,removeIf 匹配 EARLY_REDIRECTOR_CLASS 常量(:18)
移除条件 仅在 RFB 未加载 时——RFB 路径根本不追加 AngelicaLateTweaker

transform(:22-25)把 transformedName 传给 EarlyRedirectorCore("com.gtnewhorizons.angelica.transform")。

已知问题

  1. 「已知行为不良」是硬编码名单:EcosystemNarrowRules.EARLY_REDIRECTOR_TARGETS(在 glsm 子项目)列出的包才被本类处理。名单外的提前加载行为无法覆盖,且扩充名单需改 glsm 子项目。
  2. 替换时机依赖 AngelicaLateTweaker,而后者在 RFB 路径下不存在——本类与完整版 redirector 不会同时存在(RFB 路径由 RFBAngelicaRedirector 独立承担),所以 RFB 用户完全拿不到本保险。这是两条路径的行为差异,不是缺陷。
  3. 无 dump:与 AngelicaRedirectorTransformer 同样不调用 AngelicaClassDump。
  4. EARLY_REDIRECTOR_CLASS 常量在 AngelicaLateTweaker 里重复定义(:18),本类自身没有暴露自己的类名字符串——字符串重复两处,有失同步风险。

相关条目