创建任务
示例任务
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!"

如果你的任务 UI 看起来不是这样,你可以使用 /em alt 将其更改为匹配的样式。
这个示例任务会给玩家下达击杀 1 个 test_boss.yml 的任务。(任务追踪器中显示的 Boss 实际名称将是 test_boss.yml 中设置的 name:。)作为完成任务的奖励,他们会获得 1 个 Magmaguy's Toothpick。
创建自定义任务
isEnabled
设定任务是否启用。
| Key | Values | Default |
|---|---|---|
isEnabled | Boolean | true |
示例
isEnabled: true
customObjectives
设定任务目标。
| Key | Values | Default |
|---|---|---|
customObjectives | Special [1] | none |
注意:如果你用一个多阶段 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"

Special [1]
展开表格
自定义目标使用以下值来构建:
| Key | 描述 |
|---|---|
KILL_CUSTOM / FETCH_ITEM / DIALOG / ARENA | 用于设定该目标所代表的类型。KILL_CUSTOM 表示任务涉及击杀特定的自定义 Boss,FETCH_ITEM 表示任务涉及获取特定的自定义物品,DIALOG 表示任务涉及与某个 NPC 对话,ARENA 表示任务涉及完成特定的竞技场。 |
filename | 用于设定玩家必须击杀/获取的自定义 Boss、自定义物品的文件名,必须对话的 NPC 的文件名,或必须完成的竞技场的文件名。 |
amount | 用于设定必须击杀的自定义 Boss 数量或必须获取的物品数量。未指定时默认为 1。 |
dialog | 用于设定玩家对话的 NPC 的对白。 |
name | 用于设定任务目标的名称,无论它是 NPC、自定义物品还是竞技场。仅用于显示目的。 |
itemName | 仅与 FETCH_ITEM 一起使用 —— 此设置会更改物品名称在任务追踪器中的显示方式。它允许你显示一个与物品在游戏内的实际名称不同的自定义名称。 |
请注意,每个自定义目标字段之间都用 : 分隔!
customRewards
设定任务奖励。
| Key | Values | Default |
|---|---|---|
customRewards | EliteMobs 通用战利品格式 | none |
示例
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,任务系统将根据任务等级自动生成奖励。奖励品质会随任务难度缩放,并同时包含货币和物品。若要对奖励进行精确控制,请始终明确指定 customRewards。
questAcceptPermission
设定玩家接受任务所必须拥有的权限。
| Key | Values | Default |
|---|---|---|
questAcceptPermission | String | none |
示例
questAcceptPermission: elitequest.my_permission
questAcceptPermissions
设定玩家接受任务所必须拥有的多个权限。
| Key | Values | Default |
|---|---|---|
questAcceptPermissions | String List | none |
示例
questAcceptPermissions:
- elitequest.my_previous_quest_one.yml
- elitequest.my_previous_quest_two.yml
questLockoutPermission
设定玩家完成任务后将获得的权限,该权限会阻止他们再次进行此任务。如果不指定,任务锁定权限会自动生成为 elitequest.[filename]。
| Key | Values | Default |
|---|---|---|
questLockoutPermission | String | elitequest.[filename] |
示例
questLockoutPermission: elitequest.my_quest.yml
questLockoutMinutes
设定玩家在能够再次进行该任务之前必须等待多长时间(以分钟为单位)(其原理是移除任务锁定权限)。
| Key | Values | Default |
|---|---|---|
questLockoutMinutes | Integer | -1(永不重复) |
示例
questLockoutMinutes: 60
name
设定任务名称。接受 颜色代码。
| Key | Values | Default |
|---|---|---|
name | String | [filename] |
示例
name: "&aMy Great Quest Name"
questLore
设定任务的 lore(描述文本),它会出现在游戏内的任务菜单中。
| Key | Values | Default |
|---|---|---|
questLore | String List | none |
示例
questLore:
- "Interesting lore sentence."
- "Yet another interesting lore sentence."

temporaryPermissions
设定在玩家上交任务之前分配给他们的权限。
如果你使用此设置来确保某物品只在玩家拥有特定任务进行中时掉落,你还需要在该物品的配置文件中配置相同的 Permission。
| Key | Values | Default |
|---|---|---|
temporaryPermissions | String List | none |
示例
temporaryPermissions:
- elitequest.item_that_should_drop_only_during_quest.yml
questAcceptDialog
设定接受任务时在聊天中出现的对白。
| Key | Values | Default |
|---|---|---|
questAcceptDialog | String List | none |
示例
questAcceptDialog:
- "My hero! You are so helpful!"
- "I wish you the best of luck!"

questCompleteMessage
设定完成任务时在聊天中出现的对白。
| Key | Values | Default |
|---|---|---|
questCompleteMessage | String List | none |
示例
questCompleteMessage:
- "My hero! You have completed my difficult quest!"
- "As a reward you can have this loaf of bread!"

questCompleteCommands
设定完成任务时将运行的命令。支持占位符:$player 表示玩家名称,$getX、$getY、$getZ 表示玩家所在位置的坐标。
| Key | Values | Default |
|---|---|---|
questCompleteCommands | String List | none |
示例
questCompleteCommands:
- say $player has finished a quest at $getX, $getY, $getZ!
- give $player diamond 1
![]()
turnInNPC
设定玩家需要对话/交互以完成任务的 NPC 的文件名。这不一定要是发布该任务的同一个 NPC。
| Key | Values | Default |
|---|---|---|
turnInNPC | Filename | none |
示例
turnInNPC: my_cool_quest_npc.yml
任务发布者
要将任务分配给某个会向玩家发布它的 NPC,你需要配置 NPC 文件,而不是任务文件。
在你的 NPC 配置文件(~/plugins/EliteMobs/npcs/)中,添加:
questFileName: my_quest.yml
对于发布多个任务的 NPC:
questFileName:
- quest_one.yml
- quest_two.yml
关于配置 NPC 的更多信息,请参阅 NPC 创建文档。
trackable
设定任务是否使用任务追踪器。
| Key | Values | Default |
|---|---|---|
trackable | Boolean | true |
示例
trackable: true
questLevel
设定任务的等级。这只是一个视觉参考,方便玩家了解任务会有多大挑战性。它不会以任何方式修改 Boss、物品或其他等级。
| Key | Values | Default |
|---|---|---|
questLevel | Integer | 0 |
示例
questLevel: 10

questAcceptSound
设定接受任务时播放的音效。既可以播放 Minecraft 音效,也可以播放资源包中的音效。
| Key | Values | Default |
|---|---|---|
questAcceptSound | String | none |
示例
questAcceptSound: entity.experience_orb.pickup

questCompleteSound
设定完成(上交)任务时播放的音效。既可以播放 Minecraft 音效,也可以播放资源包中的音效。
| Key | Values | Default |
|---|---|---|
questCompleteSound | String | none |
示例
questCompleteSound: entity.player.levelup

本地化支持
以下字段支持本地化,适用于多语言服务器:
namequestLorequestAcceptDialogquestCompleteMessage
这使你能够为服务器上的不同语言提供翻译。
权限
如上方表格所述,权限通常是 String(字符串)或 String List(字符串列表)。但下面我们更详细地讲解你将如何使用它们来锁定和解锁任务。
假设你正在制作一系列规划好的任务中的 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
现在两个文件拥有了相匹配的权限,这应该会让我们的物品只在玩家拥有正确的任务进行中时才掉落。
动态任务
动态任务(Dynamic Quests)是由 EliteMobs 自动创建并刷新的程序化生成任务。与在配置文件中定义的自定义任务不同,动态任务无需手动设置,并会随每位玩家的进度而适应调整。
工作原理
- 任务层级: 玩家的动态任务层级根据其战斗等级推算:
tier = combatLevel / 5,并限制在 1 到 20 的范围内。例如,战斗等级为 45 的玩家会获得第 9 层的动态任务。任务本身(及其奖励)会缩放到玩家的实际战斗等级,该等级被限制在 1 到 100 的范围内。 - 每层 3 个任务: 对于 20 个任务层级中的每一层,系统每次都恰好生成 3 个随机任务目标。玩家会被提供与其当前层级相匹配的 3 个任务。
- 自动刷新周期: 动态任务目标池每 60 秒(每 1200 刻)重新生成一次。当任务池刷新时,新目标会替换旧目标,从而为玩家提供轮换的任务选择。
- 动态副本适配: 当玩家进入一个指定了特定等级的动态副本时,他们所有进行中的动态任务都会适配以匹配该副本的怪物等级。任务等级、目标和显示名称会相应更新,使任务始终与副本内容相关。
