QuestBridge

QuestBridge

将FTB Quests转化为一个支持整合包的任務引擎:提供实时数据导出功能以便创作、智能物品过滤器,以及带有沉浸式反馈的事件驱动自定义任务。

为 300 模组整合包编写 FTB 任务基本上全靠猜

你想做一个“吃五种不同食物”或“夜晚在营火旁休息”的任务,但 FTB Quests 只提供物品、击杀、生物群系、维度、结构、进度以及少数其他固定任务类型。其他所有东西都只能用勾选任务和名誉系统来伪造,而且每个物品任务仍然需要你在输入之前知道确切的注册表 ID 或标签。

QuestBridge 是一个 Fabric 服务端模组,为 FTB Quests 弥补了这一空白。它会导出你的整合包实际包含的内容,这样你就不用猜 ID;它为 FTB 物品任务提供宽泛的过滤器(“任何食物”、“任何带有 c:ingots 标签的物品”、“来自此模组的任何物品”),并让 FTB 自定义任务追踪真实的游戏行为——进食、睡觉、合成、驯服、繁殖、钓鱼、交易、放置或破坏方块、击杀一群生物、夜晚站在点燃的营火旁——而不只是一个名誉系统的勾选标记。它是为 Nytheria 构建并正在其中运行的,但它没有任何 Nytheria 专属的内容:所有功能都通过一个普通 JSON 文件工作,你可以为任何整合包编写。

它的功能

1. 用于任务编写的整合包数据导出

/questbridge dump 会快照正在运行的服务器的注册表,并在实例文件夹下写入一个带时间戳的导出文件:物品、方块、实体、Boss、生物群系、兴趣点、流体、状态效果、药水、附魔、结构、维度、进度、配方和统计数据,既按类别拆分也按模组命名空间拆分,另外还有 FTB Quests 编写目录(需求片段、盔甲套装捆绑、任务/奖励类型反射)。这是供你阅读的参考数据——QuestBridge 绝不会因一次导出而编辑 config/ftbquests。

2. 用于 FTB 物品任务的智能物品过滤器

/questbridge ftb filter give <type> 会给你一个标记物品,可插入任何普通的 FTB 物品任务。把它放进任务槽位后,该任务就会接受整个类别,而不是一个确切的物品:来自某个模组命名空间的任何物品、物品标签中的任何东西、带有给定数据组件的任何东西、任何食物、工具、盔甲部件、方块物品、可损坏物品、带有矿石/锭/种子标签的物品,或 Curios/Trinkets 风格的物品。没有自定义任务,没有 JSON——只是一个更智能的物品任务。

3. 事件驱动的需求,将真实操作转化为自定义任务进度

对于 FTB 内置任务无法表达的一切,在 config/questbridge/requirements/ 下编写一个小 JSON 文件,并给一个 FTB 自定义任务打上 questbridge_<id> 标签。QuestBridge 然后就会从游戏行为中为该任务提供真实进度:

  • 进食或饮用匹配的物品(可选用“N 种不同食物”计数)
  • 合成或钓到匹配的物品
  • 放置、破坏或使用匹配的方块
  • 使用或击杀匹配的实体,包括成组击杀(“任何亡灵”)
  • 驯服或繁殖动物,与村民交易
  • 在其计时期间站在匹配位置选择器的某处——夜晚在点燃的营火旁、在结构或结构标签内、雷暴期间、低于某个 Y 值、在生物群系或生物群系标签中——并带有 continuous 连击,当玩家离开条件时重置
  • 睡过夜晚、改变维度
  • 已完成的进度组和自定义统计阈值

每个需求都可以带有一个 feedback 块:一行带 {title}/{progress}/{max}/{percent}/{id} 占位符和 & 颜色代码的动作栏,一个带音量和音高的声音,一次完成粒子爆发,以及可选的团队范围通知——让进度感觉鲜活而不是无声。进度按 FTB 团队追踪,并保存在每个世界的存档文件中,可在重载后保留。

60 秒示例

把这段写入 config/questbridge/requirements/campfire_rest_at_night.json(或者直接运行 /questbridge examples,它会为你写出这个文件和其他七个现成文件):

{
  "id": "campfire_rest_at_night",
  "title": "Rest by the Fire",
  "description": "Stay within four blocks of a lit campfire for 30 seconds after dark.",
  "kind": "location_timer",
  "trigger": "location_tick",
  "selector": {
    "near_block": "minecraft:campfire",
    "radius": 4,
    "lit": true,
    "time": "night"
  },
  "duration_ticks": 600,
  "count": 600,
  "continuous": true,
  "progress_scope": "team",
  "ftb_task_mode": "custom_task",
  "feedback": {
    "actionbar": "&6Resting... &f{progress}&7/&f{max}",
    "sound": "minecraft:block.campfire.crackle",
    "on": "both",
    "particles": "minecraft:flame"
  }
}

运行 /questbridge reload,然后给任何 FTB 自定义任务打上 questbridge_campfire_rest_at_night 标签。当玩家夜晚坐在点燃的营火旁时,该任务现在就会填充进度,带有动作栏倒计时和噼啪声,并且如果他们在连击完成前走开就会重置。

命令概览

所有命令都需要权限等级 2。

命令 作用
/questbridge dump(别名 /moddump) 写入完整的注册表/编写导出
/questbridge reload 重载需求、奖励池和设置
/questbridge examples 写入八个现成的需求示例
/questbridge ftb inspect 检查 FTB Quests 版本、任务/奖励类型、任务文件访问
/questbridge ftb validate [book] 针对配置和实时任务书的只读验证报告
/questbridge ftb requirement list \| info \| give <id> 列出、检查或获取某个需求的标记/链接物品
/questbridge ftb requirement simulate <id> [amount] 在不执行操作的情况下添加测试进度
/questbridge ftb filter give <type> [value] 获取用于 FTB 物品任务的宽泛物品过滤器标记
/questbridge ftb ideas pack \| mod \| category 从实时整合包数据导出编写灵感
/questbridge ftb draft 写入任务草稿建议
/questbridge ftb capture start \| stop \| convert 记录真实游戏行为并将其转换为草稿需求
/questbridge ftb apply preview \| commit \| rollback 分阶段、已备份、可撤销的任务文件应用

安全设计

QuestBridge 假定你不会信任一个模组去重写你的任务书,所以它不会——除非你明确要求:

  • 默认只读。 Dump、inspect、validate、ideas、draft 和 capture 绝不会触碰 config/ftbquests。
  • 显式应用,带备份和回滚。 唯一能写入真实任务文件的命令是 /questbridge ftb apply preview 和 commit,并且 commit 会先复制一份备份,除非某个 profile 明确禁用了它。/questbridge ftb apply rollback <backup_id> 可以恢复它。备份和回滚路径在任何文件操作运行之前都会被规范化并针对其根目录进行检查,因此精心构造的 profile 或备份 id 无法将文件复制到预期文件夹之外。
  • 故障安全绑定。 如果一个 FTB 自定义任务被打上标签指向一个不再存在的 QuestBridge 需求,该任务会被绑定为手动点击任务,而不是被永久卡住——损坏的绑定绝不会让一个章节被一个不可能的任务阻塞。
  • FTB Quests 是可选的。 QuestBridge 在触碰任何 FTB API 之前会检查 isModLoaded("ftbquests")。未安装 FTB Quests 时,导出和导出工具仍然可用。

要求与兼容性

  • Minecraft 1.21.1、Fabric Loader 0.19.1+、Fabric API、Java 21
  • FTB Quests 可选;针对 FTB Quests Fabric 2101.1.35 编译并测试
  • 按设计为服务端——将其安装在服务器(或单人游戏)上以获得导出、过滤器和事件驱动的需求进度。只有当你想让 FTB 的游戏内物品任务 GUI 为某个 QuestBridge 标记物品显示实时的“当前哪些物品匹配此过滤器”预览时,客户端才需要安装该模组;如果客户端没有安装,过滤器本身在游戏中仍然正常工作,只是那个预览列表不可用。

我可以在发布前移除它吗?

取决于你如何使用它。

  • 仅用于编写: 如果你只运行了 /questbridge dump、ideas、draft、validate 或 capture 来帮助你用确切的 ID 和标签编写普通 FTB 任务,那么 QuestBridge 可以在你发布整合包之前移除——这些输出在运行时都不会被读取。
  • 运行时使用: 如果任何真实任务使用了 QuestBridge 过滤器标记物品、QuestBridge 命名需求,或打有 questbridge_<id> 标签的自定义任务,那么 QuestBridge 必须保留在发布的整合包中——FTB Quests 会直接询问它物品是否匹配以及任务如何推进。

常见问题

这会取代 FTB Quests 吗? 不会。它是一个配套模组,仅在安装了 FTB Quests 时才会激活其 FTB 专属功能,并且它从不发明自己的任务/奖励 GUI。

它会编辑我现有的任务书吗? 除非你自己运行 /questbridge ftb apply commit <profile>,并使用你编写的 profile,否则不会。其他所有命令都是只读的,或写入其在 config/questbridge/ 下或实例的 moddump/ 文件夹下的自己的编写文件夹。

如果我移除 QuestBridge 而某个任务仍然使用它的某个标记物品或自定义任务,会发生什么? 物品任务不再知道标记的含义,自定义任务的绑定也不复存在。在从依赖它的真实任务的整合包中移除它之前,请检查 /questbridge ftb validate book。

这在单人游戏中有效吗? 有效。FTB Quests 将单人玩家视为一个一人的团队,因此团队范围的进度工作方式相同。

我可以只将它用于数据导出而忽略其他一切吗? 可以——/questbridge dump 和 ftb_quests/ 编写片段无论你是否接触需求、过滤器或自定义任务都能工作。

它需要 KubeJS、Trinkets 或除 Fabric API 之外的任何其他模组吗? 不需要。FTB Quests 是唯一可选的集成;其他一切均为普通 Fabric/Minecraft。