结构资源管理器

结构资源管理器

追踪玩家发现的结构,你也可以查看自己、其他玩家及排行榜的追踪情况。

冒险

结构探索者

这个模组激励玩家去尝试发现世界中存在的所有结构!

我想制作一个服务器,鼓励玩家探索世界的各个角落,而且每隔几个月就会有新的结构被添加,但我找不到任何能追踪已发现结构的模组。很久以前我曾尝试为自己制作这个模组但失败了,但这次我再次尝试,并在两天内完成了它。

它的工作方式是默认每5秒自动检查一次移动中的玩家,看他们是否处于某个结构内,并将该结构添加到该玩家已发现结构的列表中。 自动发现结构

⌨ 命令

主命令:/explorer - 别名:/discoveries

命令 描述
/explorer page? <n> 你已发现的结构。页码可选
/explorer player <name> page? <n> 查看其他玩家的发现。页码可选
/explorer structure <id> 谁发现了某个特定结构
/explorer instances <id> page? <n> 你对某个特定结构的记录实例。页码可选
/explorer here 显示你当前所在结构的信息面板
/explorer leaderboard page? <n> 按发现数量排名的顶级玩家。页码可选
/explorer playerinstances <player> <id> [OP] 查看任何玩家的实例
/explorer reload [OP] 重新加载配置和翻译

📝 配置文件 - structure_explorer.json

位置:config/structure_explorer/structure_explorer.json

默认值 描述
checkIntervalMs 5000 模组检查玩家是否进入结构的频率(毫秒)。数值越低 = 响应越快,但服务器负载略高。
showNthDiscoverer true 是否在聊天通知中显示发现者徽章,例如 [首位发现者!][第3位发现者]
useMonthDayYear false 时间戳格式。false = DD/MM/YYYY HH:MM:SS - true = MM/DD/YYYY HH:MM:SS
trackInstances true 是否记录每个已访问结构实例的坐标和时间戳。当为 false 时,仅追踪已发现的结构类型
sounds.newDiscoverySound true 发现新结构时播放音效。
sounds.newInstanceSound true 发现新实例时播放音效。

🛠 模组制作指南

结构探索者可以通过两种方式获取结构名称 - 选择最适合你的方式。

选项 1 - 语言文件 (最简单)

如果你的模组已有语言文件,结构探索者会自动读取。只需使用以下键格式添加条目:

"structure.<namespace>.<path>": "显示名称"

assets/mymod/lang/en_us.json 为例:

{
  "structure.mymod.cool_dungeon": "酷炫地牢"
}

无需额外文件 - 名称会自动获取(具体显示方式请参见下方场景)。

注意: 这仅适用于直接打包在模组 JAR 内的语言文件(assets/<namespace>/lang/en_us.json)。结构探索者在服务器端运行,无法读取资源包语言文件 - 那些仅存在于客户端,服务器永远看不到。如果你的语言条目位于单独的资源包中而不是模组 JAR 中,请改用下面的选项 2。

选项 2 - translations.json (完全控制)

要完全控制前缀、后缀、颜色和精确名称,请在模组 JAR 内的 data/<your_modid>/structure_explorer/translations.json 打包一个文件,使用与服务器管理员配置相同的翻译文件格式。它会在 config/translations/ 文件之前加载,因此服务器管理员始终可以覆盖它。


两者如何交互

假设 Katter's Structures 在其语言文件中有 "structure.kattersstructures.sky_dungeo": "天空地牢"。最终显示名称的确定方式如下:

场景 1 - 完全没有语言条目和翻译条目

例如:kattersstructures:ancient_ruins 在任何地方都没有定义 结果:Ancient Ruins [Kattersstructures] 结构路径和命名空间都会被自动美化(下划线 → 空格,每个单词首字母大写)并组合 - 这是原始回退方案。

场景 2 - 存在语言名称,但任何地方(模组打包或服务器配置)都没有该命名空间的翻译条目

结果:天空地牢 [Kattersstructures] 命名空间被自动美化并以方括号附加,因为没有自定义设置。

场景 3 - 翻译条目覆盖了此特定结构的名称

{
  "translations": {
    "kattersstructures": {
      "suffix": " [Katter's Structures]",
      "suffix_color": "gray",
      "structures": { "sky_dungeo": "大型天空堡垒" }
    }
  }
}

结果:大型天空堡垒 [Katter's Structures] 使用覆盖名称,应用样式,自动方括号消失。

场景 4 - 翻译条目为命名空间设置了样式但未覆盖此结构

{
  "translations": {
    "kattersstructures": {
      "prefix": "Katter's: ",
      "prefix_color": "red"
    }
  }
}

结果:Katter's: 天空地牢 sky_dungeo 没有覆盖条目,因此使用语言名称作为基础 - 应用样式,无自动方括号。


如果有人想为其他模组制作非官方支持,数据包也可以 - 捆绑一个 data/<your_namespace>/structure_explorer/translations.json,就像上面的选项 2 一样。这些会在 config/translations/ 文件之前加载,因此服务器管理员始终可以覆盖它们。


🗣 翻译

原版结构名称默认会被翻译 - 例如 minecraft:fortress下界要塞。要为任何命名空间自定义名称,请将 JSON 文件放置在:

config/structure_explorer/translations/ - 文件可以任意命名(例如 minecraft.jsoncustom.json),并会在内置和模组打包翻译之后加载,因此它们始终具有最高优先级。随时使用 /explorer reload 重新加载(需要 OP 权限)。

翻译文件格式

{
  "replace": false,
  "translations": {
    "namespace": {
      "prefix": "",
      "prefix_color": "",
      "suffix": "",
      "suffix_color": "",
      "name_color": "",
      "structures": {
        "structure_path": "Display Name"
      }
    }
  }
}

以下是一个示例,使用 Minecraft 原版位置

默认值 描述
replace false false 与现有翻译合并(冲突时新文件优先,前缀/后缀/颜色仅在非空时覆盖)。true 丢弃该命名空间的所有内置/先前翻译 - 只有你在此定义的内容会存在。
prefix / suffix "" 显示在结构名称之前/之后的文本,例如 "prefix": "Minecraft: "Minecraft: Stronghold
prefix_color / suffix_color / name_color (金色) 分别应用于每个部分的颜色。参见 颜色
structures (无) 结构路径 → 显示名称的映射。路径是结构 ID 中冒号后面的部分 - 例如 minecraft:stronghold → 路径为 stronghold

颜色

命名颜色(不区分大小写):black dark_blue dark_green dark_aqua dark_red dark_purple gold gray dark_gray blue green aqua red light_purple yellow white

十六进制颜色(CSS 风格,以 # 为前缀):"#FF5500" "#00AAFF" "#FFFFFF"


免责声明:本模组的各个部分使用了 AI 辅助。

如果没有修改和学习 TelepathicGrunt 制作的 WITS 模组,我无法开始制作这个模组。