建立任務
範例任務
EliteMobs 預先封裝了一個 test_quest.yml,這裡會以它作為範例,分析一個簡單的任務格式供你參考。
自訂任務放在 ~plugins/EliteMobs/customquests 資料夾中!
test_quest.yml
isEnabled: true
customObjectives:
Objective1:
amount: '1'
filename: test_boss.yml
objectiveType: KILL_CUSTOM
customRewards:
- filename=magmaguys_toothpick.yml:amount=1:chance=1
name: "&aKill the Test Boss"
questLore:
- "&cEnd the test boss'' reign of terror!"

如果你的任務介面看起來和這個不一樣,你可以使用 /em alt 將它切換成相符的樣式。
這個範例任務會交給玩家一個討伐 1 隻 test_boss.yml 的目標。(任務追蹤器中顯示的 Boss 實際名稱會是 test_boss.yml 裡所設定的 name:。)作為完成任務的獎勵,玩家會得到 1 個 Magmaguy's Toothpick。
建立自訂任務
isEnabled
設定任務是否啟用。
| Key | Values | Default |
|---|---|---|
isEnabled | 布林值 | true |
範例
isEnabled: true
customObjectives
設定任務目標。
| Key | Values | Default |
|---|---|---|
customObjectives | 特殊 [1] | 無 |
注意:如果你使用多階段 Boss 作為任務目標,那麼目標應該以第一階段作為對象。
範例
KILL_CUSTOM:
customObjectives:
Objective1:
amount: '1'
filename: my_cool_boss.yml
objectiveType: KILL_CUSTOM
DIALOG:
customObjectives:
Objective1:
dialog:
- "&a[Dialog NPC] &fCome here often?"
- "&7&oI should eat more apples."
filename: dialog_npc.yml
npcName: Dialog NPC
location: at dialog location.
objectiveType: DIALOG
FETCH_ITEM:
customObjectives:
Objective1:
amount: '99'
itemName: Red Apples
filename: my_quest_item_red_apples.yml
objectiveType: FETCH_ITEM
ARENA:
customObjectives:
Objective1:
objectiveType: ARENA
filename: my_arena.yml
name: "Complete the Arena"

特殊 [1]
展開表格
自訂目標是使用以下這些值來建構的:
| Key | 說明 |
|---|---|
objectiveType | 用來設定此目標代表的類型。有效值為 KILL_CUSTOM、FETCH_ITEM、DIALOG 與 ARENA。KILL_CUSTOM 表示任務涉及擊殺特定的自訂 Boss,FETCH_ITEM 表示任務涉及取得特定的自訂物品,DIALOG 表示任務涉及與 NPC 交談,而 ARENA 表示任務涉及完成特定的競技場。 |
filename | 用來設定自訂 Boss 的檔名、玩家必須擊殺/取得的自訂物品、必須交談的 NPC,或必須完成的競技場。必填 —— 沒有 filename 的目標會被捨棄,並在主控台發出警告。 |
amount | 用來設定必須擊殺的自訂 Boss 數量或必須取得的物品數量。若未指定,預設為 1。DIALOG(永遠為 1)與 ARENA 會忽略它。 |
dialog | 僅限 DIALOG —— 玩家與 NPC 交談時 NPC 所說的台詞。 |
location | 僅限 DIALOG —— 關於 NPC 位置的自由文字提示,會在任務選單的摘要行中以 $location 顯示。 |
name / npcName / itemName | 同一個欄位的三個可互換名稱:目標對象在任務追蹤器與選單中的顯示名稱。僅供顯示用途——依目標類型選用讀起來最順的那一個即可。對於 FETCH_ITEM,若省略它會退回使用自訂物品檔案中設定的 name。 |
每個目標都位於 customObjectives 內自己的鍵底下(Objective1、Objective2、⋯),其欄位為一般的 YAML 鍵。使用單行 KILL_CUSTOM:filename=X.yml:amount=Y 字串格式的舊任務檔案,會在首次載入時自動轉換為此版面配置並存回磁碟。
FETCH_ITEM 的行為
FETCH_ITEM 的進度會在玩家撿起或丟下物品時、接受任務時,以及嘗試繳交時,從玩家的物品欄重新計算——因此在接受任務之前取得的物品仍會計入。玩家在繳交時仍必須持有所需的數量:若沒有,繳交會被取消。成功繳交時,任務物品會從玩家的物品欄中被消耗掉。
customRewards
設定任務獎勵。
| Key | Values | Default |
|---|---|---|
customRewards | EliteMobs 通用戰利品格式 | 無 |
範例
customRewards:
- currencyAmount=50:amount=1:chance=0.05
- material=COOKED_COD:amount=3:chance=1.0
- filename=magmaguys_toothpick.yml:amount=1:chance=1.0

注意: 自訂任務不會自動產生獎勵。如果你把 customRewards 留空,該任務完成時將不會給予任何東西,因此請務必明確定義獎勵。(依等級調整的自動獎勵——基於任務難度的貨幣與物品——僅適用於程序化產生的動態任務,不適用於以設定檔定義的自訂任務。)
任務獎勵是直接發放的:物品會直接進入玩家的物品欄(放不下的會掉在他們腳邊),貨幣則會加進他們的餘額。若要在完成時執行指令,請使用 questCompleteCommands,而不是 command= 的戰利品項目。
questAcceptPermission
設定玩家必須擁有才能接受任務的權限。
| Key | Values | Default |
|---|---|---|
questAcceptPermission | 字串 | 無 |
範例
questAcceptPermission: elitequest.my_permission
questAcceptPermissions
設定玩家必須擁有才能接受任務的多個權限。
| Key | Values | Default |
|---|---|---|
questAcceptPermissions | 字串列表 | 無 |
範例
questAcceptPermissions:
- elitequest.my_previous_quest_one.yml
- elitequest.my_previous_quest_two.yml
questLockoutPermission
設定玩家完成任務後會獲得的權限,此權限會將玩家鎖定,使其無法再次進行該任務。若未指定,則不會指派任何鎖定權限,該任務會保持開放。
| Key | Values | Default |
|---|---|---|
questLockoutPermission | 字串 | 無 |
範例
questLockoutPermission: elitequest.my_quest.yml
questLockoutMinutes
設定玩家在能夠再次進行該任務之前必須等待多久(以分鐘計)。
| Key | Values | Default |
|---|---|---|
questLockoutMinutes | 整數 | -1(永不重複) |
共有兩套鎖定系統,而此鍵決定使用哪一套:
- 任何大於
0的值會使用計時鎖定追蹤器。玩家在繳交任務後,會被鎖定該任務指定的分鐘數;當他們嘗試再次接取時會被告知還剩多久;而questLockoutPermission在可用性檢查中會被忽略。 0或更低則退回使用舊式的questLockoutPermission標記,該標記會在完成時永久授予。若同時也沒有設定questLockoutPermission,該任務就會保持可重複。
範例
questLockoutMinutes: 60
name
設定任務名稱。可使用 Color Codes(顏色代碼)。
| Key | Values | Default |
|---|---|---|
name | 字串 | 無 |
範例
name: "&aMy Great Quest Name"
questLore
設定任務的說明文字,會出現在遊戲內的任務選單中。
| Key | Values | Default |
|---|---|---|
questLore | 字串列表 | 無 |
範例
questLore:
- "Interesting lore sentence."
- "Yet another interesting lore sentence."

temporaryPermissions
設定在玩家繳交任務之前指派給玩家的權限。
如果你使用此設定來確保某個物品只在玩家有特定任務進行中時才掉落,你還需要在該物品的設定檔中設定相同的權限。
| Key | Values | Default |
|---|---|---|
temporaryPermissions | 字串列表 | 無 |
範例
temporaryPermissions:
- elitequest.item_that_should_drop_only_during_quest.yml
questAcceptDialog
設定接受任務時出現在聊天欄中的對話。
當任務對話 Boss 血條啟用時,此清單同時也會作為任務發布者在任務被接受之前於對話框中所說的對話。若它為空,則改用 questLore 作為該對話。
| Key | Values | Default |
|---|---|---|
questAcceptDialog | 字串列表 | 無 |
範例
questAcceptDialog:
- "My hero! You are so helpful!"
- "I wish you the best of luck!"

questCompleteMessage
設定任務繳交時所顯示的對話。若任務對話 Boss 血條已啟用(QuestsConfig 中的 useQuestDialogueBossBars),它會被渲染在對話框中;否則會被送到聊天欄。Bedrock 玩家一律會收到聊天欄版本。
| Key | Values | Default |
|---|---|---|
questCompleteMessage | 字串列表 | 無 |
範例
questCompleteMessage:
- "My hero! You have completed my difficult quest!"
- "As a reward you can have this loaf of bread!"

questCompleteCommands
設定任務完成時會執行的指令。指令是從主控台派發的,因此請勿加上開頭的斜線,也不要依賴玩家擁有這些指令的權限。
支援的預留位置:$player 代表玩家名稱、$getWorld 代表玩家所在世界的名稱,以及 $getX、$getY、$getZ 代表玩家所在位置的座標。
| Key | Values | Default |
|---|---|---|
questCompleteCommands | 字串列表 | 無 |
範例
questCompleteCommands:
- say $player has finished a quest at $getX, $getY, $getZ!
- give $player diamond 1
![]()
turnInNPC
設定玩家需要與其交談/互動以完成任務的 NPC 檔名。這不必是發出任務的同一個 NPC。
| Key | Values | Default |
|---|---|---|
turnInNPC | 檔名 | 無 |
範例
turnInNPC: my_cool_quest_npc.yml
任務發布者
若要將任務指派給某個會發給玩家的 NPC,你需要設定 NPC 檔案,而不是任務檔案。
在你的 NPC 設定檔(~/plugins/EliteMobs/npcs/)中加入:
interactionType: CUSTOM_QUEST_GIVER
questFileName: my_quest.yml
對於會發出多個任務的 NPC:
interactionType: CUSTOM_QUEST_GIVER
questFileName:
- quest_one.yml
- quest_two.yml
interactionType: CUSTOM_QUEST_GIVER 是必要的——沒有它,該 NPC 會完全忽略 questFileName。
關於設定 NPC 的更多資訊,請參閱 NPC 建立文件。
trackable
設定任務是否會使用任務追蹤器。
| Key | Values | Default |
|---|---|---|
trackable | 布林值 | true |
範例
trackable: true
questLevel
設定任務的等級。這只是視覺上的參考,讓玩家能夠判斷任務的挑戰性有多高。這不會以任何方式修改 Boss、物品或其他等級。
| Key | Values | Default |
|---|---|---|
questLevel | 整數 | 0 |
範例
questLevel: 10

questAcceptSound
設定接受任務時播放的音效。可以播放 Minecraft 音效,也可以播放來自資源包的音效。當未設定此項時,EliteMobs 會改為播放 SoundsConfig 中的全域任務接受音效。
| Key | Values | Default |
|---|---|---|
questAcceptSound | 字串 | 無 |
範例
questAcceptSound: entity.experience_orb.pickup

questCompleteSound
設定任務完成(繳交)時播放的音效。可以播放 Minecraft 音效,也可以播放來自資源包的音效。當未設定此項時,EliteMobs 會改為播放 SoundsConfig 中的全域任務完成音效。
| Key | Values | Default |
|---|---|---|
questCompleteSound | 字串 | 無 |
範例
questCompleteSound: entity.player.levelup

在地化支援
以下欄位支援為多語言伺服器提供在地化:
namequestLorequestAcceptDialogquestCompleteMessage- 每個
customObjectives項目內的:dialog、npcName與location
這讓你能夠為伺服器上的不同語言提供翻譯。
權限
如上方表格所述,權限通常是 字串 或 字串列表。但讓我們更詳細地說明你會如何使用這些權限來鎖定和解鎖任務。
重要: questAcceptPermission 與 questAcceptPermissions 並不是權限外掛的節點。EliteMobs 檢查的是它自己內部的任務標記,玩家只有在完成某個 questLockoutPermission 與之相符的任務後才會取得。透過 LuckPerms 或任何其他權限外掛授予相同字串不會解鎖該任務。(temporaryPermissions 則不同——那些會在任務進行期間被掛載為真正的權限節點,這也是物品 permission 門檻能與它們搭配運作的原因。)
假設你正在製作一系列你已規劃好的任務中的 quest_3,而你不希望玩家在完成 quest_2 之前就能接取 quest_3。我們會像這樣設定任務檔案:
questAcceptPermission: elitequest.quest_2.yml
questLockoutPermission: elitequest.quest_3.yml
透過將 questAcceptPermissions 設定為 elitequest.quest_2.yml,我們現在阻止了玩家在完成 quest_2.yml 之前接取 quest_3.yml。
透過將 questLockoutPermission 設定為 elitequest.quest_3.yml,只要玩家的追蹤器中已經有該任務,或他們已經完成該任務,我們就阻止他們能夠接取該任務。這可防止玩家重複進行該任務。
如果你想製作一個只在玩家完成一系列任務後才會解鎖的任務,那麼你會像這樣設定任務檔案:
questAcceptPermissions:
- elitequest.quest_2.yml
- elitequest.quest_3.yml
- elitequest.quest_4.yml
如果你希望玩家只在擁有正確的進行中任務時才能拾取某些物品,我們可以透過使用 temporaryPermissions 來達成。我們會在任務檔案中使用 temporaryPermissions 建立一個權限,然後在物品檔案中使用 permission 建立一個相符的權限。
舉例來說,我們會打開任務檔案並加入以下內容:
temporaryPermissions:
- elitequest.my_cool_item.yml
然後我們會打開物品檔案,在我們的例子中是 my_cool_item.yml,然後加入以下內容:
permission: elitequest.my_cool_item.yml
兩個檔案現在都有相符的權限,這應該能讓我們的物品只在玩家有正確的進行中任務時才掉落。
動態任務
動態任務是由 EliteMobs 程序化產生並自動建立與刷新的任務。與在設定檔中定義的自訂任務不同,動態任務不需要任何手動設定,並會隨每位玩家的進度而調整。
運作方式
- 任務階層: 玩家的動態任務階層是從其戰鬥等級推導而來:
tier = combatLevel / 5,並限制在 1 到 20 的範圍內。舉例來說,戰鬥等級 45 的玩家會獲得第 9 階的動態任務。任務本身(及其獎勵)會根據玩家的實際戰鬥等級進行調整,而該等級會被限制在 1 到 100 的範圍內。 - 每階 3 個任務: 對於 20 個任務階層中的每一階,系統一次都會精確產生 3 個隨機任務目標。玩家會被提供與其當前階層相符的 3 個任務。
- 自動刷新週期: 動態任務目標的池子每 60 秒(每 1200 刻)會重新產生一次。當池子刷新時,新的目標會取代舊的目標,讓玩家獲得一組輪替的任務選擇。
- 動態地城調適: 當玩家以特定等級選擇進入動態地城時,他們所有的進行中動態任務都會調適以符合該地城的怪物等級。任務等級、目標與顯示名稱都會相應更新,讓任務與地城內容維持相關性。
隊伍與共享擊殺計數
任務始終屬於個人,但成員取得擊殺計數時,同一世界且位於 sharedProgressRange 內(Party.yml 中預設128格)的線上成員也會推進相符的進行中擊殺目標。收集物品、NPC 對話和競技場目標不會共享,位於無關活動實例中的玩家也會排除。請參閱隊伍系統。
