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 同属「强约束」风格。
相关
- Mixins -
JOURNEYMAP_V5构建器 - MapMarker -
BufferedImage构造器 - TextureAtlasSpriteAccessor - 另一个纹理相关 mixin