指南

如何制作 Minecraft 任务插件

更新于 2026年10月18日

任务给玩家一个继续玩的理由:击杀 20 只僵尸、挖 64 个铁、给村民送 10 个面包。任务插件包含三部分:监听游戏事件的目标、为每个玩家保存的进度,以及奖励。把任务定义在配置文件里,不改代码就能添加新任务。

把任务和奖励换成你自己的。

用 Codexe 生成这个

分步说明

  1. 1.选择目标类型

    从少数几种开始:击杀某种生物、破坏或放置方块、收集物品、合成、到达某个地点、和 NPC 对话。每个任务都由这些组合而成。

  2. 2.在文件中定义任务

    每个任务写在 quests.yml 中:id、名称、描述、目标及数量、奖励和前置条件(先完成另一个任务、某个权限、某个等级)。

  3. 3.按玩家记录进度

    监听每个目标背后的事件,累加到玩家的进度上。把进度保存到 SQLite 或文件中,这样退出登录和重启后都不会丢失。

  4. 4.显示进度

    一个 /quests 菜单,显示进行中和已完成的任务,进度变化时再发送消息、标题或 Boss 血条。

  5. 5.发放奖励

    物品、经验、通过 Vault 发放的金钱,其他任何奖励都可以用控制台命令,比如 lp user %player% permission set ...。

  6. 6.构建并在游戏中完成一个任务

    让 Codexe 编译,加入测试服务器,接受一个任务并完成它。然后重启,检查进度和奖励是否已保存。

目标及其背后的事件

目标事件需要决定的细节
击杀生物EntityDeathEvent只算玩家亲手击杀的,还是也算宠物和箭矢的击杀
破坏方块BlockBreakEvent忽略玩家自己放置的方块,否则玩家会反复放置并破坏同一个方块
收集物品检查物品栏或拾取事件交任务时是否收走这些物品
合成物品CraftItemEventShift 点击合成会一次做出好几个
到达某个地点PlayerMoveEvent只在玩家换到另一个方块时检查,而不是每次移动都检查
和 NPC 对话PlayerInteractEntityEvent哪个实体是任务发布者

任务发布者

最简单的任务发布者是一条命令或一个菜单。如果想要世界里的角色,一个带自定义名称和 PersistentDataContainer 标签的村民或盔甲架就行,不需要其他插件:玩家右键点击时插件能识别它。如果你的服务器已经在用 Citizens 之类的 NPC 插件,在需求中写明,插件就会接入它。

描述示例

“一个名为 Quests 的 Paper 1.21.4 任务插件。目标类型:击杀生物、破坏方块(不含玩家放置的)、收集物品,以及和标记为任务发布者的村民对话。任务定义在 quests.yml 中,包括名称、目标、前置任务和奖励(物品、经验、Vault 金钱、控制台命令)。/quests 打开一个菜单,显示可接、进行中和已完成的任务。进度显示在动作栏中。最多同时进行 3 个任务。每日任务在服务器时间午夜重置。进度保存在 SQLite 中。”

每日任务和可重复任务

  • 写明何时重置:每天固定时间,还是玩家完成后 24 小时。
  • 写明每日任务是每个玩家随机,还是所有人都一样。
  • 保存上次完成的时间,而不是一个标记,这样服务器关机期间重置也能正常进行。

常见问题

任务能用 PlaceholderAPI 吗?

能。要求提供当前任务及其进度等占位符,这样计分板和 Tab 列表就能显示它们。在需求中写明 PlaceholderAPI,它就会被加为依赖。

能用 Skript 写任务吗?

小型任务系统用带变量的 Skript 就够了。目标类型多、有菜单、要为数百名玩家保存进度的话,用插件更容易保持快速和条理清晰。

怎么确认任务能正常工作?

在 Codexe 测试服务器上玩一遍,再用你自己的话添加测试,比如“普通玩家运行 /quests 并看到菜单打开”。测试检查的是消息、物品和菜单,而不是世界里的生物或方块。

制作你的任务插件

这条提示词打开后即可直接发送:

“一个 Paper 1.21.4 任务插件:目标类型有击杀生物、破坏非玩家放置的方块、收集物品和与带标签的村民对话;任务写在 quests.yml 中,包含目标、前置任务和奖励(物品、经验、Vault 金钱、控制台命令);/quests 菜单显示可接、进行中和已完成的任务;进度显示在动作栏;最多 3 个进行中的任务;每日任务午夜重置;进度保存在 SQLite 中。”

用 Codexe 生成这个
如何制作 Minecraft 任务插件 | Codexe