任务API

任务API

一个用于Minecraft的任务框架。用Java或JSON定义任务,根据真实游戏状态追踪目标,并发放奖励,无需自己编写持久化或网络层。

QuestAPI

一个面向 Minecraft 的任务框架,为 Fabric 和 NeoForge 构建。任务可以用 Java 编写,也可以作为数据包 JSON 直接放入,目标是追踪真实的游戏状态,而不是外挂一个追踪器,并且持久化和网络层已经为你准备好了。

包含内容

  • 十种目标类型:收集、消耗、交付、挖掘方块、放置方块、合成、击杀、驯服、访问维度、访问地点。大多数直接读取原版统计或物品栏数量;方块放置和驯服在两个加载器上都没有对应的原版事件,因此这两项挂钩在游戏代码中唯一一处能在两个加载器上以相同方式实现的位置。
  • 物品、经验和命令奖励。领取状态保存在服务端,并在发放任何东西之前进行检查,因此丢失的网络数据包或领取过程中服务器崩溃都不会第二次发放战利品。
  • 前置条件:另一个任务的完成、一个进度、持有某个物品,或最低经验等级。
  • 一个任务书 GUI,包含分类侧边栏、可滚动的任务列表,以及显示目标进度和奖励预览的详情面板。基于原版控件构建,没有自定义渲染管线。
  • 进度在死亡、登出和重启后都会保留,保存在一个正式的世界级存档文件中。客户端永远不会自行判定任务完成。

数据包任务

将一个文件放入 data/<namespace>/questapi/quests/,它会在服务器启动时加载,格式与 Java API 生成的相同:

{
  "id": "mypack:first_diamond",
  "title": { "text": "First Diamond" },
  "description": { "text": "Every miner's proudest moment." },
  "icon": { "id": "minecraft:diamond" },
  "category": "mypack:main",
  "objectives": [
    { "type": "questapi:collect_item", "item": "minecraft:diamond", "amount": 1 }
  ],
  "rewards": [
    { "type": "questapi:experience", "points": 50 }
  ],
  "auto_activate": true
}

Java 定义和 JSON 定义的任务位于同一个注册表中,因此整合包可以在不编写模组的情况下添加自己的任务。

致模组开发者

注册表、管理器和 GUI 是三个独立的层。如果默认界面不合适,可以针对相同的同步数据构建你自己的界面,或者注册新的目标、奖励或条件类型,而无需改动此模块的代码。

QuestApi.registry().registerQuest(Quest.builder(id)
    .title(Component.literal("First Diamond"))
    .objective(new CollectItemObjective(Items.DIAMOND, 1))
    .reward(new ExperienceReward(50))
    .autoActivate(true)
    .build());

GitHub README 包含完整的 API 参考以及 Java/JSON 操作指南:github.com/ryankshah/questapi

开发模式

在 config/questapi.properties 中设置 dev=true 会加载一个示例任务树(Java 和 JSON 都有)以及 /quests reset|unlock|progress 调试命令。正常安装请保持为 false;这些内容和命令都不会影响正式任务。

加载器与要求

Fabric 和 NeoForge,均面向 Java 25 上的 Minecraft 26.3。多加载器拆分只涉及网络注册和平台挂钩;任务逻辑在两者上运行相同。

许可证

CC0-1.0。随你怎么用。

源码与问题

github.com/ryankshah/questapi