指南
如何制作 Minecraft 任务插件
更新于 2026年10月18日
任务给玩家一个继续玩的理由:击杀 20 只僵尸、挖 64 个铁、给村民送 10 个面包。任务插件包含三部分:监听游戏事件的目标、为每个玩家保存的进度,以及奖励。把任务定义在配置文件里,不改代码就能添加新任务。
把任务和奖励换成你自己的。
用 Codexe 生成这个分步说明
1.选择目标类型
从少数几种开始:击杀某种生物、破坏或放置方块、收集物品、合成、到达某个地点、和 NPC 对话。每个任务都由这些组合而成。
2.在文件中定义任务
每个任务写在
quests.yml中:id、名称、描述、目标及数量、奖励和前置条件(先完成另一个任务、某个权限、某个等级)。3.按玩家记录进度
监听每个目标背后的事件,累加到玩家的进度上。把进度保存到 SQLite 或文件中,这样退出登录和重启后都不会丢失。
4.显示进度
一个
/quests菜单,显示进行中和已完成的任务,进度变化时再发送消息、标题或 Boss 血条。5.发放奖励
物品、经验、通过 Vault 发放的金钱,其他任何奖励都可以用控制台命令,比如
lp user %player% permission set ...。6.构建并在游戏中完成一个任务
让 Codexe 编译,加入测试服务器,接受一个任务并完成它。然后重启,检查进度和奖励是否已保存。
目标及其背后的事件
| 目标 | 事件 | 需要决定的细节 |
|---|---|---|
| 击杀生物 | EntityDeathEvent | 只算玩家亲手击杀的,还是也算宠物和箭矢的击杀 |
| 破坏方块 | BlockBreakEvent | 忽略玩家自己放置的方块,否则玩家会反复放置并破坏同一个方块 |
| 收集物品 | 检查物品栏或拾取事件 | 交任务时是否收走这些物品 |
| 合成物品 | CraftItemEvent | Shift 点击合成会一次做出好几个 |
| 到达某个地点 | 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 生成这个