WaypointsIngameRendererMixin

LATE:Xaero 游戏内路点

基本信息

属性 值
路径 com.gtnewhorizons.navigator.mixins.late.xaerosminimap.WaypointsIngameRendererMixin
行数 50
注解 @Mixin(value = WaypointsIngameRenderer.class, remap = false)(:21)
构建器 Mixins 的 XAEROS_MINIMAP_WAYPOINT

唯一的 @Inject(:24-30)—— 最复杂的 @At

@Inject(
    method = "render",
    at = @At(
        value = "INVOKE",
        target = "Lxaero/common/minimap/waypoints/render/WaypointsIngameRenderer;renderWaypointsList(Ljava/util/Collection;DDDLnet/minecraft/entity/Entity;Lnet/minecraft/client/renderer/Tessellator;DDDDFFDIFFLnet/minecraft/util/Vec3;D)V",
        from = @At(...)),
    ...)

目标描述符(:28)逐段拆解

Lxaero/common/minimap/waypoints/render/WaypointsIngameRenderer;
renderWaypointsList(
    Ljava/util/Collection;     ← Collection 路点集合
    DDD                        ← 3 个 double(x, y, z)
    Lnet/minecraft/entity/Entity;   ← 玩家实体
    Lnet/minecraft/client/renderer/Tessellator;  ← 渲染器
    DDDD                       ← 4 个 double(旋转/缩放)
    FFD                        ← 2 个 float + 1 个 double
    IFF                        ← int + 2 个 float
    Lnet/minecraft/util/Vec3;  ← 向量
    D                          ← 1 个 double
)V

⚠️ from = @At(...)(:30) —— 这是本 mod 里唯一使用 @At(from = ...) 的地方。

@At(from = ...) 与 @At(target = ...) 的区别:

  • target = 在调用该方法之前注入
  • from = 在该方法被调用之后注入

⚠️ 实际上 from 通常与 target 配对使用(@At(value="INVOKE", target=X, from=Y)), 表示「在 X 被调用的紧邻位置,且在 Y 之后」。 这里是单用 from(:30 的参数列表里有 from,而 target 在 :28)—— 即同时指定了 target(:28)与 from(:30)。

⚠️ method = "render" 是极短名(无描述符), 而 target 用了完整描述符 —— 两者精度不一致。

单模组要求

Mixins 的 XAEROS_MINIMAP_WAYPOINT(:44-48) 只调 1 次 addRequiredMod(TargetedMod.XAEROMINIMAP) —— 与 MinimapRendererMixin 的双模组要求不同。

所以只装 Xaero Minimap(不装 World Map)时本类会应用。

与 MapChatMixin 的 @At 对比

mixin from 参数
本类 有(:30)
MapChatMixin 无
TextureCacheMixin 无
MinimapRendererMixin 无

⚠️ 本类是全 mod 唯一用 from 的 —— 说明它需要在 「Xaero 画完它自己的路点之后」再插 Navigator 的路点。

相关