JourneyMap 集成
把两个 Navigator 图层以原生多边形的形式画到 JourneyMap 6 的全屏地图与小地图上。
基本信息
| 属性 | 值 |
|---|---|
| 依赖模组 | JourneyMap 6 |
| 依赖类型 | 可选软依赖,compileOnly |
| 声明方式 | compileOnly('info.journeymap:journeymap-api-forge:1.7.10-2.0.0')(dependencies.gradle:5) |
| 实现类 | mcp.mobius.opis.gui.overlay.ChunkPolygonJM6 |
| 载体 | 依附于 Navigator 图层,不独立存在 |
| API 导入 | journeymap.api.v2.client.display.PolygonOverlay 等 6 个 v2 类型 |
功能
触发条件
JM6 覆盖不能独立使用,必须先满足 Navigator 集成 的全部条件(Navigator 存在且 ≥ 1.1.7,且玩家执行过 /opis)。ChunkTimeLayerManager.addLayerRenderer 与 LoadedChunkLayerManager.addLayerRenderer 中是同一段判断:
if (mod == SupportedMods.JourneyMap && Util.isJourneyMapV6Installed()) {
renderer.withJourneyMapV6Overlays(
location -> ChunkPolygonJM6.create(location, ((ChunkTimeLocation) location).getColor(),
modOpis.overlayAlphaTiming / 255f),
true);
}
两个条件同时满足才挂 JM6 覆盖:当前地图后端是 JourneyMap(SupportedMods.JourneyMap)且 JM6 已安装(Util.isJourneyMapV6Installed())。第二个 true 参数含义在本仓不可核实(Navigator 的 API 源码不在本仓内)。
ChunkPolygonJM6 的类注释说明了它的独特定位:Chunk-sized native JourneyMap 6 overlay, the only way onto its minimap. Loaded only when JM6 is present. —— 即它是唯一能把数据画上 JM6 小地图的途径。ChunkTimeLayerManager.java:63 的注释同样强调:Native overlays are the only route onto the JM6 minimap.
多边形构造
ChunkPolygonJM6.create(ILocationProvider, int fillColor, float fillOpacity)(ChunkPolygonJM6.java:21-40):
- 取
Math.floor(location.getBlockX())与getBlockZ()向下取整得到区块角点 - 构造
ShapeProperties:填充色用图层传入的颜色,填充不透明度用图层传入的opacity,描边固定为黑色0x000000、不透明度1f、线宽1f - 构造一个 16×16 的
MapPolygon,四个顶点全部固定在 y = 64:(x, 64, z)→(x+16, 64, z)→(x+16, 64, z+16)→(x, 64, z+16) - 包成
new PolygonOverlay("Opis", location.getDimensionId(), shape, area) - 设置
setOverlayGroupName(location.getClass().getName())—— 用图层 Location 类的类名做分组名,两个图层因此自动分组为ChunkTimeLocation与LoadedChunkLocation setActiveUIs(Context.UI.Fullscreen, Context.UI.Minimap)—— 同时对全屏地图与小地图生效- 返回
Collections.singletonList(overlay),每次调用只产生 1 个多边形
数值
| 数值名 | 值 |
|---|---|
CHUNK_SIZE |
16(ChunkPolygonJM6.java:17) |
| 多边形顶点的固定 Y 坐标 | 64 |
| 描边颜色 | 0x000000 |
| 描边不透明度 | 1f |
| 描边线宽 | 1f |
| 覆盖层名称 | "Opis" |
| 生效的 UI | Context.UI.Fullscreen + Context.UI.Minimap |
| 每次创建的覆盖数量 | 1 |
| 填充不透明度 | overlay.alpha.timing / 255f 或 overlay.alpha.loaded / 255f |
交互
| 触发 | 行为 |
|---|---|
| Navigator + JM6 同时就绪 | 区块数据同时画在 Navigator 与 JM6 上 |
| 仅有 Navigator 无 JM6 | 只画 Navigator 原生覆盖 |
overlay.alpha.timing 调低 |
JM6 上耗时图层更透明(Navigator 原生层用的是 0–255 整数,不受影响) |
| 在 JM6 小地图上 | 两个图层的区块多边形均可见 |
透明度在两套渲染路径上语义不同:overlay.alpha.* 配的是 0–255 整数,传给 Navigator 原生渲染时直接用;传给 JM6 时要除以 255 转成 0–1 的浮点。因此同一个配置值在两条路径上表现一致,但代码里是两处独立转换(ChunkTimeRenderStep.java:35 / ChunkTimeLayerManager.java:68,LoadedChunkRenderStep.java:31 / LoadedChunkLayerManager.java:67)。