UniversalLayerRenderer
地图中立渲染器
基本信息
| 属性 | 值 |
|---|---|
| 路径 | com.gtnewhorizons.navigator.api.model.layers.UniversalLayerRenderer |
| 行数 | 146 |
| 继承 | extends LayerRenderer(:22) |
| 子类 | UniversalInteractableRenderer |
README.md 的推荐实现路径核心:
Extend ButtonManager and LayerManager (or InteractableLayerManager) … Extend UniversalRenderStep for rendering
两个构造器
| 构造器 | 行 | 参数 |
|---|---|---|
UniversalLayerRenderer(LayerManager) |
:31-~39 |
只传 manager |
(super) |
LayerRenderer(LayerManager, SupportedMods)(layerrenderer :40) |
— |
⚠️ 本类构造器只传 manager,而父类要 (manager, mod) ——
所以 mod 参数由本类内部固定或从别处取。
146 行里必然有一处决定「本渲染器属于哪个地图模组」的逻辑
(地图中立渲染器要对全部地图模组服务)。
链式配置器(5 个 with*)
| 方法 | 行 | 用途 |
|---|---|---|
withRenderStep(Function<ILocationProvider, UniversalRenderStep<?>>) |
:41-49 |
数据点 → 渲染步骤 |
withRenderPriority(int) |
:51-59 |
渲染优先级 |
withMapMarker(Function<ILocationProvider, MapMarker>) |
:65-69 |
数据点 → 地图标记 |
withJourneyMapV6Overlays(Function<ILocationProvider, Collection<?>>) |
:89-99 |
JM6 叠加层 |
withJourneyMapV6Overlays(Function, boolean) |
:101-107 |
同上 + 替换渲染步骤 |
⚠️ 全部返回 UniversalLayerRenderer(this) ——
builder 风格链式调用。
⚠️ withRenderStep 返回 UniversalLayerRenderer 而非泛型 this ——
所以子类用它链式配置后类型退化为基类,
再赋给 UniversalInteractableRenderer 变量会 ClassCastException。
子类应各自覆写返回自己的类型(covariant override)。
三个 has* + 三个 create*
| 配对 | 行 |
|---|---|
hasMapMarker() / createMapMarker(ILocationProvider) |
:71-77 / :79-87 |
hasJourneyMapV6Overlays() / createJourneyMapV6Overlays(ILocationProvider) |
:109-115 / :117-120 |
journeyMapV6OverlaysReplaceRenderSteps() |
:122-126 |
⚠️ create* 返回 @Nullable —— 配了 Function 才会非 null。
⚠️ journeyMapV6OverlaysReplaceRenderSteps()(:122)
是一个行为开关:JM6 的叠加层替代渲染步骤而非叠加。
即同一次绘制要么走叠加层要么走渲染步骤,二选一。
JM6 叠加层是 JM6 独有
withJourneyMapV6Overlays 的泛型是
Function<ILocationProvider, Collection<?>> ——
Collection<?>(完全未指定元素类型),
因为 JM6 的 overlay 类型由 JM6 插件 API 决定,本 API 不暴露它。
⚠️ 这是有意擦除类型以避免公开 API 依赖 JM6 的类型
(虽然 compileOnlyApi(rfg.deobf('maven.modrinth:journeymap:5.2.20'))
只引了 JM5,本 API 刻意不引 JM6)。
三个覆写
| 方法 | 行 | 说明 |
|---|---|---|
generateRenderStep(ILocationProvider) |
:128-135 |
调 withRenderStep 的 Function |
getRenderPriority() |
:137-141 |
返回 withRenderPriority 设的值 |
getRenderSteps() |
:143-~146 |
收窄为 List<UniversalRenderStep<?>> |
⚠️ getRenderSteps() 的协变收窄(父类返回
List<? extends RenderStep>,本类返回 List<UniversalRenderStep<?>>)——
省掉消费方的强转。
相关
- LayerRenderer - 父类
- UniversalInteractableRenderer - 子类
- UniversalRenderStep - 产出的步骤类型
- MapMarker -
withMapMarker的产物 - LayerManager - 宿主