指南
如何製作 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 產生這個