BlueMap 标志标记

BlueMap 标志标记

一个Fabric插件,用于BlueMap,从告示牌创建标记

管理

BlueMap 木牌标记

====================

概述

蓝地图(BlueMap)的 Fabric 插件,根据游戏内告示牌显示标记。

安装

将其与 BlueMap 一起放入你的 mods 文件夹。

仅限服务端。

使用方法

放置一个告示牌或悬挂式告示牌,并在正面或背面包含以下文字:

[poi]
<简短描述>

告示牌位置处将在地图上显示一个带有文字 <简短描述> 的标记。当告示牌被破坏时,该标记将从地图上移除。

请注意,前缀可以在配置文件中配置。

配置

该模组会在 config/bluemapsignmarkers 文件夹中创建一个 BMSM-Core.json 文件。此文件包含以下选项:

  • markerGroups - 标记组列表(详见下文);默认为包含一个为 [poi] 前缀配置的标记组的列表。

标记组

标记组是可以在 BlueMap UI 中切换显示/隐藏的标记集合。每个标记组配置包含以下选项:

  • prefix - 告示牌必须包含才能加入此标记组的前缀;必填;
  • matchType - 在检查第一个非空告示牌文本行时使用的匹配类型;可选;默认为 STARTS_WITH(区分大小写的精确匹配);
    • STARTS_WITH - 该行必须以该前缀开头;
    • REGEX - 该行必须匹配该正则表达式(使用 Java 正则表达式引擎);
  • name - 标记组的名称;必填;
  • type - 要显示的标记类型;可选;默认为 POI
    • POI - 每块告示牌一个点标记;
    • LINE - 共享此组前缀和相同首行标签的告示牌成为一条线标记的有序点(点按放置时间排序);需要至少 2 块告示牌才会显示;
    • SHAPE - 共享此组前缀和相同首行标签的告示牌成为一个填充多边形标记的有序点(点按放置时间排序,高度取自最高的成员);需要至少 3 块告示牌才会显示;
    • EXTRUDE - 与 SHAPE 的成员资格模型完全相同(相同前缀/标签分组,3+ 块告示牌,点按放置时间排序),但将多边形渲染为拉伸的实体体积:底面取自最低成员的 Y 坐标,顶面取自最高成员的 Y 坐标(如果所有成员共享相同的 Y,顶面将提高 1 个方块以避免零高度体积);
  • icon - 用于标记显示的图标路径或 URL;可选;默认为 null(BlueMap 默认 POI 图标);仅 POI
  • offsetX - 标记的 x 偏移;可选;默认为 0(对应 BlueMap 基础配置中的 anchor.x);仅 POI
  • offsetY - 标记的 y 偏移;可选;默认为 0(对应 BlueMap 基础配置中的 anchor.y);仅 POI
  • defaultHidden - 如果为 true,则标记集默认隐藏,用户可将其启用;可选;默认为 false
  • minDistance - 标记显示时与相机的最小距离;可选;默认为 0.0(浮点数,双精度)
  • maxDistance - 标记显示时与相机的最大距离;可选;默认为 10000000.0(浮点数,双精度)
  • lineWidth - 线/形状/拉伸边框的宽度(像素);可选;默认为 2;仅 LINE/SHAPE/EXTRUDE
  • lineColor - 线/形状/拉伸边框的十六进制颜色(含透明度),例如 #FF0000FF;可选;默认为 #FF0000FF;仅 LINE/SHAPE/EXTRUDE
  • fillColor - 形状或拉伸体积内部的十六进制颜色(含透明度),例如 #FF000033;可选;默认为 #FF000033(半透明红色);仅 SHAPE/EXTRUDE
  • sorting - 标记集在地图图层菜单中的顺序(数值小者优先);可选;默认为 0
  • toggleable - 玩家是否可隐藏/显示此标记集;可选;默认为 true
  • depthTest - 地形是否可以遮挡标记(设为 false 以保持地下路径/区域透过地形可见);可选;默认为 true;仅 LINE/SHAPE/EXTRUDE
  • cssClasses - 添加到标记元素的 CSS 类列表,用于通过 BlueMap 的 custom.css 进行样式设置;可选;默认为空列表;仅 POI

在不适用该字段的组类型上设置字段(例如在 LINE/SHAPE/EXTRUDE 组上设置 icon,在 POI/LINE 组上设置 fillColor,在 POI 组上设置 depthTest,或在 LINE/SHAPE/EXTRUDE 组上设置 cssClasses)不会导致错误;模组会记录警告并忽略该字段。

示例

{
  "markerGroups": [
    {
      "prefix": "[poi]",
      "name": "兴趣点"
    },
    {
      "prefix": "[store]",
      "name": "商店",
      "icon": "assets/store.png"
    },
    {
      "prefix": "\\[[vV][iI][lL][lL][aA][gG][eE]\\]",
      "matchType": "REGEX",
      "name": "村庄"
    },
    {
      "prefix": "[trail]",
      "name": "小径",
      "type": "LINE",
      "lineWidth": 3,
      "lineColor": "#00A2FFFF"
    },
    {
      "prefix": "[region]",
      "name": "区域",
      "type": "SHAPE",
      "lineWidth": 2,
      "lineColor": "#FFA500FF",
      "fillColor": "#FFA50040"
    },
    {
      "prefix": "[building]",
      "name": "建筑",
      "type": "EXTRUDE",
      "lineWidth": 2,
      "lineColor": "#4682B4FF",
      "fillColor": "#4682B440"
    }
  ]
}

此示例配置创建了 6 个标记组:一个用于 [poi] 告示牌,一个用于 [store] 告示牌,一个用于前缀与村庄正则表达式匹配的告示牌(例如 [Village][VILLAGE]),一个用于 [trail] 告示牌,一个用于 [region] 告示牌,以及一个用于 [building] 告示牌。

故障排除

  • 编辑标记组的前缀(尤其是 REGEX 前缀)会使现有告示牌失效。 在运行此修复之前版本的服务端上,更改组的前缀文本可能会导致已放置的告示牌在 /bluemap reload 后从地图上消失,并且它们不会自行恢复。重新编辑告示牌文本(即使重新输入相同的文本)或重启服务端即可修复。在此修复版本中创建或重新编辑的告示牌会在 /bluemap reload 时自动自我修复 - 此后无需手动修复。
  • 标记在设置了排除它们的 render-mask 的地图上会隐藏。 告示牌的标记仅在告示牌位置位于该 BlueMap 地图自己的 render-mask(在 config/bluemap/maps/<id>.conf 中配置)内时才会显示在该地图上 - 例如,一个 min-y: 127 的地狱屋顶地图不会显示放置于 y=127 以下的告示牌标记。没有 render-mask 的地图不受影响。升级到包含此修复的版本后,请运行一次 /bluemap reload 以清除任何先前在其渲染边界之外的地图上显示的标记 - 仅重启服务端不会触发此清除。

[poi]村庄 标记组使用默认的 POI 图标,而 [store] 标记组使用位于 assets/store.png 的自定义图标。

带有 [poi] 前缀的告示牌将显示在"兴趣点"标记组中。带有 [store] 前缀的告示牌将显示在"商店"标记组中。匹配村庄正则表达式的告示牌将显示在"村庄"标记组中。带有 [trail] 前缀且共享相同描述行的告示牌,在存在 2 个或更多此类告示牌后,将按放置顺序连接成"小径"标记组中的一条线。带有 [region] 前缀且共享相同描述行的告示牌,在存在 3 个或更多此类告示牌后,将按放置顺序连接成"区域"标记组中的一个填充多边形。带有 [building] 前缀且共享相同描述行的告示牌,在存在 3 个或更多此类告示牌后,将按放置顺序连接成"建筑"标记组中的一个实体体积,范围从最低告示牌的高度延伸到最高告示牌的高度(如果所有成员共享相同高度,则为 1 个方块高)。