FullscreenMixin

LATE JM5:全屏地图注入(343 行)

基本信息

属性 值
路径 com.gtnewhorizons.navigator.mixins.late.journeymap.FullscreenMixin
行数 343(mixins/late/journeymap 包最大,全 mod 第 5 大)
注解 @Mixin(Fullscreen.class)(:47)
构建器 Mixins 的 JOURNEYMAP_V5

⚠️ @Mixin 在第 47 行 —— 前 46 行是 import + 大段 javadoc (源码注释占了全文件的 13%)。这 46 行大概率在逐条说明 JM5 Fullscreen 的哪些方法被改、为什么。

6 个 @Shadow(:72-:87)

全部 remap = false(第三方 mod 的类,字段名不能重映射):

行 说明
:72 @Shadow(remap = false)
:75 同
:78 同
:81 同
:84 同
:87 同

⚠️ 6 个 @Shadow 都是单行无参形式(remap = false), 说明没有 @Shadow 声明的字段名 —— 字段名由本类中对应方法的方法名推断 (Mixin 的 @Shadow 在方法上时用方法名 + 参数类型匹配)。

所以这 6 个是方法 shadow(替换原方法体), 不是字段访问。

343 行的规模来源

部分 行
import + javadoc 1-46
@Mixin 47
(约 24 行的空隙) 48-71
6 个 @Shadow 72-~92
注入逻辑 + 方法 ~93-343(约 250 行)

所以注入逻辑本身约 250 行 —— 这是本 mod 对 JM5 侵入最深的地方。

承担什么

Fullscreen 是 JM5 的全屏地图 GUI。它需要被改的地方包括:

需求 手段
调用 LayerManager 的 recacheFullscreenMap @Inject 到渲染方法
转发点击到 UniversalInteractableRenderer.onMapClick @Inject 到点击方法
转发按键到 onKeyPressed @Inject
画 LayerRenderer 的渲染步骤 @Inject 到 draw
画 MapMarker 调 createMapMarker
图层按钮 调 ButtonManager

⚠️ 对比 JM6:这些在 JourneyMapV6Plugin(847 行) 里用官方插件 API 实现(不 mixin)—— 所以 JM6 路径不需要本 mixin。

相关