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。
相关
- Mixins -
JOURNEYMAP_V5构建器 - FullscreenAccessor - 同目标类的字段访问器
- LayerManager - 被调用的图层侧
- JourneyMapV6Plugin - JM6 的对应实现