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<?>>)—— 省掉消费方的强转。

相关