MapMarker
地图标记模型(320 行)
基本信息
| 属性 | 值 |
|---|---|
| 路径 | com.gtnewhorizons.navigator.api.model.markers.MapMarker |
| 行数 | 320(api/model 包最大,全 mod 第 4 大) |
| 类型 | final class |
地图上的图标 + 标签标记。与
UniversalRenderStep(逐点绘制)不同,
MapMarker 是地图原生标记 —— 由地图模组自己渲染,
支持缩放、缩放级别可见性等原生能力。
4 个构造器(按图片来源)
| 构造器 | 行 | 来源 |
|---|---|---|
MapMarker(BufferedImage) |
:54-70 |
java.awt 图片(运行时生成) |
MapMarker(ResourceLocation, int textureWidth, int textureHeight) |
:72-81 |
整张纹理 |
MapMarker(ResourceLocation, TextureAtlasSprite) |
:83-~99 |
纹理图集里的 sprite |
MapMarker(ResourceLocation, int textureX, int textureY, int textureWidth, int textureHeight) |
:101-~115 |
纹理子矩形 |
⚠️ BufferedImage 构造器在 1.7.10 客户端是合法的(java.awt 存在),
但会占用堆内存与 CPU(ImageIO 编解码)。
用于动态生成图标(如按数量画数字)。
⚠️ TextureAtlasSprite 构造器(:83)与
TextureAtlasSpriteAccessor(EARLY mixin)呼应 ——
后者放开了 sprite 的 padding 状态,
让 Navigator 能知道图集里 sprite 的实际 padding(影响 1px 缝隙)。
⚠️ 4 个构造器都要求非空 ResourceLocation(除 BufferedImage 版),
且没有无参构造器。
11 个链式 setter(全部返回 this)
| 方法 | 行 | 参数 | 用途 |
|---|---|---|---|
setDisplaySize(double, double) |
:117-122 |
宽、高 | 显示尺寸(double) |
setDisplayZoomScale(double minScale, double maxScale, double minZoom, double maxZoom) |
:124-128 |
4 个 | 缩放区间 |
setLabel(@Nullable String) |
:130-140 |
文本 | 静态标签 |
setLabelSupplier(Supplier<String>) |
:142-152 |
Supplier | 动态标签 |
setTooltip(@Nullable List<String>) |
:154-158 |
列表 | tooltip |
setLabelColor(int) |
:160-164 |
颜色 | 标签颜色 |
setLabelScale(float) |
:166-170 |
缩放 | 标签缩放(float) |
setLabelZoomScale(double, double, double, double) |
:172-176 |
4 个 | 标签缩放区间 |
setLabelBackgroundOpacity(float) |
:178-182 |
不透明度 | 背景 |
setLabelOffsetY(int) |
:184-~193 |
偏移 | 标签 Y 偏移 |
setLabelMinZoom(int) |
:195-~200 |
最小缩放级 | 可见性 |
⚠️ setLabel 与 setLabelSupplier 二选一
(一个静态 String 一个 Supplier<String>)——
同时设置时行为取决于实现(可能后者覆盖前者)。
⚠️ 缩放参数有 4 个(minScale, maxScale, minZoom, maxZoom)
且同时存在于 setDisplayZoomScale 与 setLabelZoomScale ——
scale 与 zoom 是两套不同的量(像素缩放 vs 地图缩放级别),
参数命名极易混淆。
⚠️ setLabelScale 用 float 而 setDisplaySize 用 double ——
类型不统一。setLabelColor(int) 的打包顺序源码无注释。
⚠️ setLabelMinZoom(int)(:195)与
setLabelZoomScale(..., double minZoom, ...) 功能重叠 ——
一个用 int 缩放级别,一个用 double。
与 ILocationProvider 的关系
UniversalLayerRenderer 的
withMapMarker(Function<ILocationProvider, MapMarker>)(:65-69)
从数据点造标记,createMapMarker(ILocationProvider)(:79-87)取出。
⚠️ 每 tick 都会重新 create(若 hasMapMarker() 为真),
所以 setLabelSupplier 的 Supplier 会被高频调用 ——
Supplier 里做重活会有性能问题。
相关
- UniversalLayerRenderer - 生成方
- ILocationProvider - 输入数据点
- TextureAtlasSpriteAccessor - sprite padding 的读取来源