指南

如何製作 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忽略玩家自己放的方塊,否則玩家會一直放置又破壞同一個方塊
收集物品檢查物品欄或撿拾事件交任務時要不要收走這些物品
合成物品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 產生這個
如何製作 Minecraft 任務插件 | Codexe