shared/AngelicaRedirector
基本信息
| 属性 | 值 |
|---|---|
| 类 | com.gtnewhorizons.angelica.loading.shared.transformers.AngelicaRedirector |
| 路径 | src/main/java/com/gtnewhorizons/angelica/loading/shared/transformers/AngelicaRedirector.java |
| 行数 | 13 |
| 类型 | public final class,私有构造函数(:11),纯静态工厂 |
| 唯一方法 | public static ModRedirector create()(:7-9) |
完整实现
全部 13 行只有 2 个成员:一个 public static 工厂方法与一个私有构造函数:
// :7-9
public static ModRedirector create() {
return new ModRedirector(AngelicaClassDump.INSTANCE, "com.gtnewhorizons.angelica.transform");
}
// :11
private AngelicaRedirector() {}
它是什么
两条加载路径的交汇点。4 个 shared/transformers/ 类中最小的一个,但被两个方向的 wrapper 共用:
| 调用方 | 行 | 包装类型 |
|---|---|---|
| AngelicaRedirectorTransformer | :9 |
IClassTransformer(LaunchWrapper) |
| RFBAngelicaRedirector | :10 |
RfbModRedirector(RFB) |
两边拿到的是同一个工厂方法产出的 ModRedirector 类型(实现类在 glsm 子项目)。
第二个构造参数:重定向目标包
"com.gtnewhorizons.angelica.transform" 是被重定向到的包名,不是包名前缀黑名单。含义:所有指向 LWJGL GL 类的调用,被改写为指向这个 Angelica 自己的 transform 包(即 GLStateManager 的实现层)。
这个字符串在仓库内共出现 3 次,全部是字面量重复:
| 出现位置 | 行 |
|---|---|
| 本类 | :8 |
| EarlyRedirectorTransformer | :20(new EarlyRedirectorCore("com.gtnewhorizons.angelica.transform")) |
CeleritasBlockTransform :98 |
getTransformerExclusions() 的第 3 项 |
已知问题
- 无 Javadoc、无注释:13 行里没有一个字的说明。
"com.gtnewhorizons.angelica.transform"的语义(重定向目标包)完全不可从本文件推断。 - 字面量三处重复且无共享常量:第 3 处(CeleritasBlockTransform
:98)把它列为 classloader 排除项——即「不要把重定向目标包本身再重定向一遍」。这层互斥关系是正确性的关键,却没有任何注释说明;三处字符串若不同步修改,会产生无限重定向或漏重定向。 AngelicaClassDump.INSTANCE硬传入(:8):把 dump 设施与 redirector 构造耦合。ModRedirector拿到的是共享单例,无法按 RFB/FML 路径分别配置。- 私有构造函数 +
final:正确的工具类写法,无继承/实例化漏洞。
相关条目
- AngelicaRedirectorTransformer - LaunchWrapper 侧包装
- RFBAngelicaRedirector - RFB 侧包装
- CeleritasBlockTransform - 同一字面量的第 3 处出现
- AngelicaClassDump - 传入的 dump 单例
- shared/package-info - 本包的类加载约束
- FML Transformers -
shared/与两条路径的映射图