TextureCacheMixin

LATE JM5:纹理缓存

基本信息

属性 值
路径 com.gtnewhorizons.navigator.mixins.late.journeymap.TextureCacheMixin
行数 71
注解 @Mixin(value = TextureCache.class, remap = false)(:21)
构建器 Mixins 的 JOURNEYMAP_V5

唯一的 @Inject(:25-30)—— 带完整描述符

@Inject(
    method = "getThemeTexture(Ljourneymap/client/ui/theme/Theme;Ljava/lang/String;IIZFZ)Ljourneymap/client/render/texture/TextureImpl;",
    at = @At(
        value = "INVOKE",
        target = "Ljourneymap/client/io/FileHandler;getIconFromFile(Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/awt/image/BufferedImage;)Ljava/awt/image/BufferedImage;"))

⚠️ 本 mod 注入点最长的一处 —— method 与 target 都是完整 JVM 描述符:

描述 展开
getThemeTexture(Theme, String, int, int, boolean, float, boolean) 7 参数,返回 TextureImpl
FileHandler.getIconFromFile(File, String, String, String, BufferedImage) 5 参数,返回 BufferedImage

⚠️ getThemeTexture 的参数里有 float(F)与 两个 boolean(Z)—— 参数顺序无法从描述符看出语义(描述符只给类型), 所以要靠方法名 + 类型列表唯一匹配。

⚠️ getThemeTexture 的描述符没有尾部 ; 问题 —— …)Ljourneymap/client/render/texture/TextureImpl; 结尾的 ; 是 返回类型的 JVM 终止符,不是笔误。

注入点含义

@At(value = "INVOKE", target = "…getIconFromFile…") —— 在即将调用 FileHandler.getIconFromFile 之前注入。

而 getIconFromFile 返回 BufferedImage —— 这与 MapMarker 的 MapMarker(BufferedImage) 构造器(:54)呼应: Navigator 用运行时生成的 BufferedImage 图标 替换/补充 JM5 主题的图标,并由本 mixin 让 JM5 的 TextureCache 接受它。

精度要求

⚠️ getThemeTexture 与 getIconFromFile 的完整描述符若与 实际 JM5 版本不符,@Inject 会在应用时报错。 与 MiniMapMixin 的 require = 1 同属「强约束」风格。

相关