副本打包器
什么是副本?
关于副本的信息,包括预制副本的信息,可以在这里找到。
什么是副本打包器?
包格式可用于分发副本、事件、模型、竞技场、NPC、物品等 EliteMobs 内容。导出命令只收集导入器支持的部分文件夹。分发前,请手动补齐其余所需文件。
为什么要使用副本包?
- 实例化副本! 实例化副本只能通过副本包系统创建。
- 迷你副本的安全备份! 制作副本包之后,你可以随时出于任何理由,在任意服务器上部署和重新部署它。
- 轻松开关! 你随时可以执行
/em setup,临时或永久地开启和关闭副本包。 - 便于分享! 如果你想分享自己的作品,只需把副本包打成 zip 发给别人即可。如果你有兴趣,Discord 上还有一个专门用于社区创作的频道!
- 传送点! 已安装的战斗内容包在设置
listedInTeleports: true后会显示在/em的传送页面中,附魔挑战除外。传送坐标需要自行配置,菜单不会自动生成坐标。
创建副本
以下设置用于创建一个配置文件,该文件应放入 content_packages 文件夹。这些设置专门用于创建副本;如果你只是想用副本打包器分发非副本内容(例如物品包或事件包),则不需要它们。
所需插件
无。副本保护由 EliteMobs 自身处理:设置 protect: true 会把 EliteMobs 自带的按世界保护套件应用到该内容包的世界上,完全不需要区域插件。
WorldGuard 仍然是一个可选的软依赖。安装它之后,EliteMobs 专用的区域标记就会可用,但保护副本包并不需要它。
逐步创建副本
EliteMobs 过去有两大类副本:基于世界的和基于示意图的。
基于示意图的副本与一份示意图建筑相关联。它们现已被淘汰,不再受支持。
现在所有 EliteMobs 副本都是基于世界的。
必需的 pack.meta 文件
你的副本包应当包含一个 pack.meta 文件,它其实就是把 .txt 文件改名为 .meta 扩展名。该文件只需包含一个单词,指明这个包是给哪个插件用的(例如小写的 "elitemobs")。pack.meta 文件必须位于包的根目录中,与其它所有文件夹并列。
全局值
以下值适用于所有副本
isEnabled
设置是否启用该副本包。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
isEnabled | 布尔值 | true | ✅ |
示例
isEnabled: true
name
设置内容名称,支持颜色代码。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
name | 字符串 | 无 | ✅ |
示例
name: '&c[lvl 999] &aThe Green Dungeon'

contentType
设置副本的类型。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
contentType | OPEN_DUNGEON / INSTANCED_DUNGEON / DYNAMIC_DUNGEON / HUB / META_PACKAGE / ITEMS_PACKAGE / EVENTS_PACKAGE / MODELS_PACKAGE | 无 | ✅ |
示例
contentType: INSTANCED_DUNGEON
SCHEMATIC_DUNGEON 已废弃解析器仍然接受 SCHEMATIC_DUNGEON,但示意图副本已在 EliteMobs 9.0 中被移除,并由世界副本取代。使用它的内容包不会加载任何内容,只会在控制台打印一条警告,提示你删除该条目。如果你想要示意图那样的体验,请改用 BetterStructures 搭配 elite shrines 内容包。
customInfo
为兼容旧配置而保留的信息字段,仍会读取、保存和翻译。当前 /em setup 菜单使用 setupMenuDescription,修改 customInfo 不会改变菜单描述。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
customInfo | 字符串列表 | 无 | ✅ |
示例
customInfo:
- '&aThe best dungeon.'
- '&aMade by: CoolPlayer'

setupMenuDescription
设置此包在 /em setup 菜单中的描述,支持颜色代码。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
setupMenuDescription | 字符串列表 | 无 | ❌ |
示例
setupMenuDescription:
- '&2A cool dungeon for levels 10-20!'
- '&2Features 3 bosses and custom loot!'
downloadLink
设置内容尚未下载且没有 Nightbreak 包标识时,/em setup 显示的手动下载链接。仅设置此字段不会为自定义包启用 Nightbreak 自动下载或更新。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
downloadLink | 字符串 | 空字符串 | ❌ |
示例
downloadLink: http://www.example.org

dungeonSizeCategory
设置包的规模标签。是否实例化由 contentType 决定,此分类不会改变运行方式。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
dungeonSizeCategory | 特殊 [1] | LAIR | ❌ |
示例
dungeonSizeCategory: MINIDUNGEON

特殊 [1]
展开表格
| 键 | 描述 |
|---|---|
LAIR | 巢穴是一类小型副本,围绕一场大型 Boss 战展开。 |
SANCTUM | 圣所相当于实例化版的巢穴。也就是说,它们同样围绕一场大型 Boss 战展开。 |
MINIDUNGEON | 迷你副本是一类中等规模的副本,通常包含 3-15 个小 Boss 和一个大 Boss,以及大量供玩家“刷”金币和装备的“杂兵”怪物。 |
DUNGEON | 副本相当于实例化版的迷你副本。这是最传统的 MMORPG 式副本,玩家组队穿过一连串杂兵和小 Boss,最终挑战终极 Boss。 |
RAID | 可识别的规模标签,不会启用独立的团队副本系统或内容类型。 |
ADVENTURE | 冒险是完整的冒险地图。它们包含任务线、NPC、大量小 Boss 和 Boss,甚至可以在内部包含自己的竞技场或副本。 |
ARENA | 竞技场是基于波次的生存区域,玩家击败波次即可获得奖励。 |
OTHER | 任何不属于上述类别的内容。 |
REALM | 内容丰富的大型世界标签。世界是共享还是实例化由 contentType 决定。 |
更详细的说明请参见副本
protect
设置 EliteMobs 是否将世界注册到 MagmaCore 保护系统。它阻止玩家破坏和放置方块、燃烧、点燃、大部分方块消退、树叶消失、骨粉、倒空桶、编辑告示牌、访问受支持的容器(已注册的宝藏箱除外)、开启门和活板门及栅栏门、与龙蛋或花盆交互、修改物品展示框和盔甲架、实体修改方块,以及原因不是 CUSTOM 的生物生成。霜冰仍可融化。玩家投掷的盘丝喷溅药水和滞留药水也会被阻止。allowExplosionBlockDamage、allowLiquidFlow 和 allowElytra 分别控制对应保护。副本全局设置控制友军伤害和环境伤害倍率。当 CombatTag.yml 中设置了 preventFlyToggleInDungeons: true(默认值)时,保护系统还会阻止非管理员(OP)玩家开始飞行。管理员可用 /em protection bypass 绕过支持该豁免的玩家操作限制。
protect: false 时不注册这套保护,但世界仍由 EliteMobs 管理。副本归属、实例生命周期、战斗系统及其他副本功能仍然有效。关闭保护不会把副本变成普通生存世界。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
protect | 布尔值 | true | ❌ |
示例
protect: true
dungeonVersion
设置包版本。每次更新都应增加随包分发的配置中的版本值。Nightbreak 对符合条件的已安装包比较此值;/em package 的版本参数不会写入它。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
dungeonVersion | 整数 | 0 | ❌ |
示例
dungeonVersion: 1
playerInfo
设置书本、物品栏和对话框传送菜单中的描述,支持颜色代码及 $bossCount、$lowestTier、$highestTier 占位符。内容包必须符合菜单条件,且设置了 listedInTeleports: true。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
playerInfo | 字符串 | 无 | ❌ |
示例
playerInfo: 'Difficulty: &a1-man easy content!'

regionEnterMessage
保留的旧入场消息字段,仍会读取、保存和翻译。当前入场监听器不读取它,因此设置此值不会发送消息。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
regionEnterMessage | 字符串 | 无 | ❌ |
示例
regionEnterMessage: '&aYou have entered the dungeon!'

regionLeaveMessage
保留的旧离场消息字段,仍会读取、保存和翻译。当前离场监听器不读取它,因此设置此值不会发送消息。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
regionLeaveMessage | 字符串 | 无 | ❌ |
示例
regionLeaveMessage: '&aYou have left the dungeon!'

hasCustomModels
标记该副本包附带自定义模型(用于 ModelEngine 或 FreeMinecraftModels)。这个键会被读取和写入,但 EliteMobs 目前不会据此做任何事——模型的安装完全取决于包中是否存在 models 文件夹。请把它当作一个文档性标记。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
hasCustomModels | 布尔值 | false | ❌ |
示例
hasCustomModels: false
dungeonConfigFolderName
设置存放与该副本相关文件的文件夹名称。
实例化副本必填!
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
dungeonConfigFolderName | 字符串 | 无 | ❌ |
示例
dungeonConfigFolderName: my_dungeon_folder
anchorPoint
schematic 时代用于相对坐标的基准点。包解析器仍会读取 anchorPoint 和 calculatedRotation,但当前没有任何命令或功能使用它们。以锚点为基准进行测量的 /em relativecoords 命令已在 EliteMobs 9.0.5 中移除。请改用 Boss、宝箱和 NPC 各自文件中的位置来定位它们。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
anchorPoint | 位置 | 无 | ❌ |
calculatedRotation | 整数(度) | 0 | ❌ |
示例
anchorPoint: my_dungeon_world,100,64,100,0,0
calculatedRotation: 0
contentLevel
设置该副本在 EM 菜单中显示的内容等级。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
contentLevel | 整数 | 0 | ❌ |
示例
contentLevel: 20
enchantmentChallenge
将包标记为单人附魔挑战。它会注册到独立列表,不出现在普通传送菜单中。需要有效的实例配置、世界模板、起点和可完成的目标。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
enchantmentChallenge | 布尔值 | false | ❌ |
示例
enchantmentChallenge: false
song
设置该副本是否拥有背景音乐。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
song | 字符串 | 无 | ❌ |
name= 客户端应播放的声音 ID,例如 elitemobs:dark_cathedral.ambient,不是音频文件路径。
length= 背景音乐的长度,单位为毫秒。EliteMobs 会在内部把它换算成 tick,因此它必须是该音效的真实时长,否则音轨会提前或延后重新开始。
两部分用空格分隔。单首音轨会循环播放。用 -> 指定两首时,第一首播放一次,再循环播放第二首;两首都使用 name=/length=。客户端资源包必须已经包含该声音,此设置不会分发资源包。
示例
song: name=elitemobs:dark_cathedral.ambient length=93830
双音轨写法:
song: name=elitemobs:intro length=12000->name=elitemobs:dark_cathedral.ambient length=93830
dungeonLockoutMinutes
按实例 Boss 设置玩家及相关队员的奖励锁定时间,单位为分钟。它不会阻止进入副本。默认值为 4320,即 72 小时;0 禁用此包的奖励锁定。锁定期间,相关玩家也不会从该 Boss 获得技能 XP。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
dungeonLockoutMinutes | 整数 | 4320 | ❌ |
示例
dungeonLockoutMinutes: 1440
containedPackages
设置一个元包所包含的副本包列表。当 contentType 被设为 META_PACKAGE 时,用它来列出属于这个更大副本的所有子包。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
containedPackages | 字符串列表 | 无 | ❌ |
示例
containedPackages:
- my_dungeon_adventure.yml
- my_dungeon_sanctum.yml
- my_dungeon_boss_fight.yml
customItemFilenames
设置物品包的文件列表。只要列表非 null,即使为空,也会将 contentType 设为 ITEMS_PACKAGE。随后检查事件和模型列表,它们可能覆盖此类型。请只设置适合该包的列表。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
customItemFilenames | 字符串列表 | 无 | ❌ |
示例
customItemFilenames:
- my_custom_sword.yml
- my_custom_armor.yml
customEventFilenames
设置事件包的文件列表。非 null 列表即使为空,也会在物品检查之后将 contentType 设为 EVENTS_PACKAGE。模型列表仍可能覆盖此类型。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
customEventFilenames | 字符串列表 | 无 | ❌ |
示例
customEventFilenames:
- my_custom_event.yml
modelNames
设置模型包的模型名称列表。非 null 列表即使为空,也会在物品和事件检查之后将 contentType 设为 MODELS_PACKAGE。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
modelNames | 字符串列表 | 无 | ❌ |
示例
modelNames:
- my_custom_model
保留的旧示意图字段
relativeBossLocations、relativeTreasureChestLocations、schematicName、defaultSchematicRotation、corner1 和 corner2 仍保留在解析器中以读取旧文件。当前共享或实例化世界包不使用它们放置内容。请使用 Boss 和宝箱定义中的位置以及世界模板。anchorPoint 和 calculatedRotation 也以同样的方式保留;参见 anchorPoint。
可翻译的键
上述值中有六项会在内容包加载时注册到翻译系统:name、customInfo、playerInfo、regionEnterMessage、regionLeaveMessage,以及 difficulties 中每个条目的 name。在使用非英语语言的服务器上,这些内容会到对应语言的 CSV 中查找,而你写在 YAML 里的文本就是英文列的比对基准。如果你希望自己的内容包可被翻译,请用英文书写它们。
基于世界的副本包
以下值仅适用于基于世界的副本。
worldName
设置需要被打包的世界名称。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
worldName | 字符串 | 无 | ✅ |
示例
worldName: my_minecraft_world
wormholeWorldName
指定一个副世界,包会使用与主世界相同的环境和保护设置加载它。世界间的路线需另外制作;设置名称不会创建传送门。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
wormholeWorldName | 字符串 | 无 | ❌ |
示例
wormholeWorldName: my_minecraft_world_wormhole
environment
设置世界的环境类型。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
environment | 环境 | NORMAL | ❌ |
示例
environment: NORMAL
teleportLocation
设置共享副本的入口或实例的等候位置。实例中会将该位置的世界替换为复制出的世界。若未设置等候位置,则使用起点。格式为 world,x,y,z,yaw,pitch。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
teleportLocation | 字符串 | 无 | ✅ |
示例
teleportLocation: my_minecraft_world,-1.5,68,0.5,0.0,0.0
allowExplosionBlockDamage
允许或阻止受保护副本世界中的爆炸方块破坏。启用后不会把原版爆炸变成精英爆炸。开启 doExplosionRegen 时,EliteMobs 恢复其追踪的精英爆炸:一分钟后开始,每 tick 恢复一个已记录方块,因此总时长取决于破坏范围。其他爆炸可能留下永久损坏。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
allowExplosionBlockDamage | 布尔值 | false | ❌ |
示例
allowExplosionBlockDamage: true
allowLiquidFlow
设置启用世界保护时是否允许水和岩浆流动。此值不会允许倒空桶,该操作由另一项保护控制。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
allowLiquidFlow | 布尔值 | true | ❌ |
示例
allowLiquidFlow: false
allowElytra
设置受保护的包世界中是否允许鞘翅滑翔。false 会阻止开始滑翔,并在进入世界或移动时停止滑翔,不是每 tick 运行的定时检查。启用保护绕过的管理员不受此限制。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
allowElytra | 布尔值 | false | ❌ |
示例
allowElytra: true
listedInTeleports
设置已安装的战斗包是否出现在 /em 的传送菜单中。false 仅隐藏该入口,不阻止其他路线或命令访问。附魔挑战不论此值如何都不会显示。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
listedInTeleports | 布尔值 | true | ❌ |
示例
listedInTeleports: false
teleportLocationOffset
为副本包的传送位置设置一个偏移量。
该键会被解析但目前未被使用 —— EliteMobs 中没有任何地方读取得到的偏移量,因此设置它不会影响玩家的落点。请改为直接调整 teleportLocation 本身。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
teleportLocationOffset | 字符串 | 无 | ❌ |
示例
teleportLocationOffset: my_minecraft_world,0.5,2,0.5,0.0,0.0
实例化副本
实例化副本会在每次有一队玩家想要通关副本时创建一个新世界,并在结束后删除它。要让它正常工作,你必须在 EliteMobs 的 world_blueprints 配置文件夹中放置一个以 dungeonConfigFolderName 命名的文件夹。
将导出的单个维度放到 world_blueprints/<dungeonConfigFolderName>/<worldName>/。验证器要求恰好一个包含 .mca 区域文件的地形位置,可位于根目录或匹配的旧式 DIM-1/DIM1 子目录。支持完整旧世界、仅地形导出和现代维度导出,并非每种格式都必须有 level.dat。服务器级 dimensions 容器、混合结构、链接和非普通文件会被拒绝。现代维度导出需要使用现代存储格式的服务器。
请在已卸载的导出副本上操作,保留该维度的地形、实体、兴趣点和数据。克隆会跳过 uid.dat、session.lock 和 Paper 的维度身份元数据,不修改原模板。实例世界使用 <worldName>_<number> 命名模式。启动时会保留崩溃后的残留世界;实例生命周期只清理自身创建的世界。手动删除残留世界前,请确认其来源,并确认没有活动实例正在使用它。
以下值仅适用于实例化副本。请注意,所有实例化副本同时也是世界副本,因此它们也会使用世界副本的那些值。
startLocation
设置实例化副本起点的传送位置。玩家使用 /em start 开始实例化副本时会被传送到这里。没有有效 startLocation 的实例化或动态包不会加载。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
startLocation | 字符串 | 无 | ✅ |
示例
startLocation: my_minecraft_world,10.5,70,10.5,0.0,0.0
permission
设置进入该副本实例所需的权限。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
permission | 字符串 | 无 | ❌ |
示例
permission: elitedungeon.mypermission
minPlayerCount
设置开启副本所需的最少玩家人数。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
minPlayerCount | 整数 | 1 | ❌ |
示例
minPlayerCount: 1
maxPlayerCount
设置副本中允许的最大玩家人数。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
maxPlayerCount | 整数 | 5 | ❌ |
示例
maxPlayerCount: 5
dungeonObjectives
设置副本被视为完成所需达成的副本目标列表。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
dungeonObjectives | 字符串列表 | 无 | ✅ |
示例
使用击杀目标 filename=boss.yml:amount=X。amount 默认为 1。它只统计本实例内匹配的实例 Boss 死亡,多阶段 Boss 也会匹配其原始第一阶段文件名。所有注册目标都必须在副本进行中完成。
dungeonObjectives:
- filename=dungeon_final_boss.yml
- filename=dungeon_miniboss_one.yml
- filename=dungeon_miniboss_two.yml
dungeonObjectives:
- filename=dungeon_guard.yml:amount=5
不带 filename= 前缀的裸写法 boss.yml 仍然被接受,并会被静默视为 filename=boss.yml,因此旧的内容包依然可用。新内容包应使用显式写法。
文件名必须以 .yml 结尾,amount 必须是至少为 1 的整数。每个字段只能出现一次。未知字段、缺少文件名或无效的数量都会导致内容包无法加载,控制台错误会指出对应的文件和目标。
不支持百分比目标,它们会在加载副本定义时被拒绝。请使用明确的击杀目标,例如 filename=boss.yml:amount=2。无效的必需目标会导致整个定义被拒绝;它绝不会被静默地从通关要求中省略。
difficulties
设置实例化副本中的难度列表。
实例化副本必填!
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
difficulties | 特殊 [1] | 无 | ❌ |
示例
difficulties:
- levelSync: 25
id: 0
name: normal
- levelSync: 20
id: 1
name: hard
- levelSync: 15
id: 2
name: mythic

特殊 [1]
展开表格
设置实例化副本的难度会在进入副本时自动创建不同的难度选项。
用 id 匹配 Boss 能力和战利品的难度过滤条件。name 是可翻译的玩家可见名称。建议为 Normal、Hard、Mythic 显式设置 ID 0、1、2。如果内容包使用 Easy/Medium/Hard 这一组名称,解析器也会将它们识别为这三个级别;未知 ID 保留精确匹配。省略 id 时,系统会在翻译前根据原始名称推断它。
难度采用列表格式,包含以下字段:
| 键 | 描述 | 值 | 必填 |
|---|---|---|---|
name | 向玩家展示的难度名称。 | 字符串 | ✅ |
id | 难度的 ID,用于自定义 Boss 和自定义物品中基于难度的功能。 | 字符串 | ❌ |
levelSync | 限制玩家物品缓存路径中的物品等级。它不会改写装备,也不会限制所有伤害和防御计算。 | 绝对等级(25)或相对于 contentLevel 的带引号值('+5'、'-3') | ❌ |
相对等级同步: 以 + 或 - 开头的 levelSync 会与 contentLevel 相加,结果至少为 1。例如 contentLevel: 40 配合 levelSync: '-5' 会把缓存物品等级上限设为 35。请给相对值加引号:YAML 会去掉未加引号的 +5 的加号,使它变成绝对等级 5。动态副本以所选等级计算相对值。无效值会将同步设为 0 以禁用它,并记录警告。
目前近战攻击、护甲防御和投射物武器计算可能读取原始物品等级,装备附魔的效果也不受此设置限制。依赖等级同步来平衡战斗之前,请阅读实例化副本难度。
动态副本
动态副本是实例化副本的扩展,内容按玩家选择的等级缩放。等级菜单以玩家当前战斗等级为基准,从 5 级和战斗等级减 5 两者中的较大值开始,每次增加 5 级,直到战斗等级加 5,最高 200 级。这些选项不需要通过公会等级解锁。
为动态副本设计 Boss 时,使用 level: dynamic。所选等级适用于实例中的 EliteMobs Boss,并非所有原版实体或奖励。需要按奖励等级缩放的自定义物品应使用 scalability: scalable,同时检查具体战利品路径;加权 Boss 战利品和明确指定的固定奖励可能保留配置的等级。
动态副本需要以下这些值。
由于所有动态副本同时也是实例化副本,它们还会使用实例化副本的全部值和设置。
contentType
设置副本的类型。这里必须设为 DYNAMIC_DUNGEON。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
contentType | OPEN_DUNGEON / INSTANCED_DUNGEON / DYNAMIC_DUNGEON / HUB / META_PACKAGE / ITEMS_PACKAGE / EVENTS_PACKAGE / MODELS_PACKAGE | 无 | ✅ |
示例
contentType: DYNAMIC_DUNGEON
contentLevel
预制动态副本会将此项设为 -1。动态副本并不使用该值:contentType: DYNAMIC_DUNGEON 使内容包成为动态副本,其 $lowestTier 和 $highestTier 占位符显示 5 和 200,而相对的 levelSync 值使用玩家所选的等级。
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
contentLevel | 整数 | 0 | ❌ |
示例
contentLevel: -1
difficulties
设置动态副本中可用的难度列表及等级同步。
实例化副本必填!
| 键 | 值 | 默认值 | 必填 |
|---|---|---|---|
difficulties | 特殊 [1] | 无 | ✅ |
示例
difficulties:
- levelSync: '+5'
name: normal
id: 0
- levelSync: '+0'
name: hard
id: 1
- levelSync: '-5'
name: mythic
id: 2

特殊 [1]
展开表格
设置实例化副本的难度会在进入副本时自动创建不同的难度选项。
用 id 匹配 Boss 能力和战利品的难度过滤条件。name 是可翻译的玩家可见名称。建议为 Normal、Hard、Mythic 显式设置 ID 0、1、2。如果内容包使用 Easy/Medium/Hard 这一组名称,解析器也会将它们识别为这三个级别;未知 ID 保留精确匹配。省略 id 时,系统会在翻译前根据原始名称推断它。
带引号且带正负号的 levelSync 值用于设置玩家物品缓存路径的相对上限。它不会改变实例选定的 Boss 等级、提高低等级装备,也不会限制所有战斗计算。
例如,"+0" 将该上限设为选定的副本等级,"+5" 将它提高 5 级,"-5" 将它降低 5 级,最低为 1。实例化副本一节所述的限制仍然适用。
难度采用列表格式,包含以下字段:
| 键 | 描述 | 值 | 必填 |
|---|---|---|---|
name | 向玩家展示的难度名称。 | 字符串 | ✅ |
id | 难度的 ID,用于自定义 Boss 和自定义物品中基于难度的功能。 | 字符串 | ❌ |
levelSync | 限制缓存中的物品等级,并非所有装备计算的统一上限。 | 用整数设置绝对上限,或使用 '+5' 等带引号的有符号偏移值 | ❌ |
为大型副本使用 meta_pack.yml 副本包文件
有时你可能在制作一个大型副本,它内部还包含其它较小的副本,玩家可以通过主副本世界在它们之间穿梭。EliteMobs 的冒险副本 Primis 就是一个很好的例子。
Primis 拥有一个供玩家探索和完成任务的广阔世界,但其世界中还包含两个实例化副本——其中之一是最终 Boss 战。在这类情况下,即使它们都属于同一个总体副本,也会存在多个副本包文件。
为了管理这种情况,我们使用元副本包文件。该文件充当一个中央目录,指定主副本并列出与之关联的所有附加副本内容。
下面展示 Primis 的内容包分组方式。版本号仅作示例,不是当前发布的 Primis 版本:
isEnabled: true
name: '&2[000-020] The Primis Adventure!'
customInfo:
- The tutorial adventure for players
- new to EliteMobs!
downloadLink: https://discord.gg/9f5QSka
dungeonSizeCategory: LAIR
environment: NORMAL
protect: true
contentType: META_PACKAGE
containedPackages:
- primis_adventure.yml
- primis_blood_temple_sanctum.yml
- primis_gladius_invasion_dungeon.yml
setupMenuDescription:
- '&2A soft tutorial adventure for players between levels 0-20!'
- '&2Adventures are massive maps with quests,'
- '&2many bosses and npcs, among other things!'
- '&2Also has custom models!'
dungeonVersion: 1
如你所见,元副本包文件与普通副本包非常相似,只有几处关键差异。contentType: 被设为 META_PACKAGE,并且多出一项名为 containedPackages: 的设置。该设置列出了属于这个更大副本的所有其它副本包。
在 containedPackages 中列出每个子包的准确文件名,并将配置及其内容加入压缩包。元包只解析已经加载的内容包定义,缺失项会被跳过;这份列表本身不会打包或下载文件。
组合发布应使用元包的 dungeonVersion。Nightbreak 版本检查会跳过列出的子包,比较符合条件的父包版本。自定义 YAML 元包不会仅因声明了子包就获得 Nightbreak 下载或更新支持。
子副本仍可能出现在玩家的 /em 传送菜单中。对于不应显示的条目,在相应配置中设置 listedInTeleports: false。管理员的 /em setup 安装菜单是另一个菜单。
以 Primis 副本为例:
在菜单中禁用 primis_blood_temple_sanctum.yml 和 primis_gladius_invasion_dungeon.yml 的传送条目。
保留 primis_adventure.yml 的传送选项,因为它是玩家开始旅程并进入其它副本的主枢纽。
请自行配置连接这些世界的传送点和路线;元包列表不会创建它们。
命名该文件时,我们推荐以下命名约定:
your_dungeon_name_meta_pack.yml
推荐的 Boss 数值
Normal、Hard 和 Mythic 的战利品目标见自动职业战利品和附魔平衡。该指南涵盖不同战斗级别的装备配置、实际附魔预算、可复用的奖励展示以及管理员检查命令。下文的 Boss 生命值和伤害参数独立于奖励品质,用于调整战斗。
创建普通副本怪物
建议保留 normalizedCombat: true。它使用 EliteMobs 的等级和战斗设置来缩放数值。击杀所需次数仍取决于玩家装备、职业附魔、防御和战斗机制,以下倍率不保证固定的击杀次数。
对于副本内容,MobCombatSettings.yml 中的 normalizeRegionalBosses: true(默认值)会为区域 Boss 启用标准化战斗;实例化副本 Boss 也使用标准化战斗。Boss 文件中显式设置的 scaledCombat: true 在缩放战斗计算中优先。以下建议以未启用此覆盖设置的标准化战斗为前提。
normalizedCombat: true
healthMultiplier: 1.0 #Starting point; verify with intended player loadouts.
damageMultiplier: 1.0 #Damage scales with the player's health and defenses; playtest this value.
注意:由于 1.0 是生命值和伤害的默认值,你完全可以省略 healthMultiplier 或 damageMultiplier 的定义,只把 normalizedCombat 设为 true。
创建杂兵群
杂兵群数量众多但并不太危险:
normalizedCombat: true
healthMultiplier: 0.7 #Starting point for weaker mobs.
damageMultiplier: 0.5 #Damage scales with the player's health and defenses; playtest this value.
创建增援
增援应当非常容易被击杀,但在伤害方面构成威胁(这些数值适用于 4 个以上的近战实体,实际使用可能有所不同):
normalizedCombat: true
healthMultiplier: 0.25 #Starting point for fragile reinforcements.
damageMultiplier: 0.6 #Damage scales with the player's health and defenses; playtest this value.
创建小 Boss
小 Boss 应当能撑住场面,并在机制上对玩家构成挑战。它应当是一场持续一段时间的技巧考验,但不至于极度致命:
normalizedCombat: true
healthMultiplier: 3.0 #Starting point for minibosses.
damageMultiplier: 1.2 #Damage scales with the player's health and defenses; playtest this value.
创建 Boss
Boss 是真正的挑战,是副本层层铺垫后的高潮,也是全力以赴的技巧考验。战斗应当持续较久,死亡应当是随时存在的威胁。
normalizedCombat: true
healthMultiplier: 7.0 #Starting point for bosses; check the health ceiling.
damageMultiplier: 1.4 #Damage scales with the player's health and defenses; playtest this value.
这些推荐值只是粗略估计,最终数值应根据具体的战斗内容进行调整。
对于最终 Boss,提高 healthMultiplier 之前,应使用预期的队伍人数、装备和技能检查战斗时长。
healthMultiplier 之前请注意生命值上限Boss 的基础生命值以及乘以倍率后的结果都会被限制在服务器的 settings.attribute.maxHealth.max,默认服务器上为 2048。在此上限下,7.0 在 36 级达到上限,10.0 在 33 级达到,40.0 在 23 级达到。实例的队伍缩放随后会再乘以该结果,且同样受此上限限制,因此已经达到上限的 Boss 不会因为队伍人数增加而获得更多生命值。伤害有单独的计算和上限,不受生命值上限影响。基础计算方式以及如何提高服务器上限,请参阅 healthMultiplier。
打包 EliteMobs 内容以便分发
最后,你多半会想把副本打包起来,用于存档或分发。
EliteMobs 拥有一套导入系统,允许管理员快速导入、安装和卸载内容。点此查看它的工作方式。
分发副本资源包
从 EliteMobs 9.6.0 起,副本可以连同自己的资源包一起打包分发!这让你能做一些很酷的事情,比如为副本中掉落的战利品使用自定义材质或模型,或者添加自定义音效——就像我们在副本 The Hallowed Haunt 中所做的那样。
要随副本分发资源包,请像制作任何标准资源包那样制作它。如果你想要一个模板,可以参考 EliteMobs 默认资源包,EliteMobs 会在启动时把它导出到 plugins/EliteMobs/resource_pack/em_rsp_defaults/。资源包必须以解压后的形式分发,因此请创建一个以你的副本命名的文件夹,例如 my_cool_dungeon_rsp。把原本会打进 zip 的所有资源包文件放进这个文件夹。然后,把这个文件夹放进一个名为 resource_pack 的新文件夹——这与 EliteMobs 存放其默认资源包的文件夹是同一个。
请勿在 em_rsp_defaults 中保存自定义修改。EliteMobs 比较内置资源的校验和与保存的 .rsp_checksum;内置资源变化、保存的校验和缺失或目录缺失时,会重新导出默认资源。它不会对你编辑过的文件计算哈希,因此修改可能暂时保留,但会在后续重新导出时丢失。
整理好文件后,目录结构应当如下所示:
resource_pack
└── my_cool_dungeon_rsp
└── [resource pack files]
安装副本时,这些资源会导入 plugins/EliteMobs/resource_pack/。向玩家客户端发送资源包仍需要 ResourcePackManager 或其他资源包分发配置;导入文件本身不会完成客户端分发。
裁剪世界
可以使用 WorldBorder 插件 裁剪世界,以减小分发体积。使用前确认所选插件版本支持你的服务器。裁剪会永久删除区块,因此请在有备份的导出副本上操作。
Details
提示
如果你是第一次这么做,最好先给世界做个备份,以防出现意外。安装好插件后,前往世界中心或你想裁剪的特定区域。然后执行命令 /wb set x,其中 x 代表你希望该区域的大致半径。
Details
提示
如果/wb 对你不起作用,可以试试 /worldborder:wb。执行该命令后,飞到世界边缘确认世界边界已正确设置并覆盖了预期范围。当你被推回并在聊天栏收到提示时,就说明抵达了世界边界。

在上图中,我们打算把世界裁剪到只保留紫色方块周围的少量区块。为此,我们站在紫色区域中间的红色方格上执行 /wb set 50,把世界边界设置在紫色区域之外一点点的位置。
接下来使用 /wb trim [freq] [pad]。边距以方块计量,频率是每秒检查的区块数。例如 /wb trim 200 20 每秒最多检查 200 个区块,并保留边界外 20 个方块。执行 /wb trim confirm 前检查缓冲范围;需要更多周边地形时应增大边距。单位定义见 WorldBorder 的裁剪命令。
之后可以站在该世界中,用 /wb clear 移除这个世界的插件边界,也可以保留它。
裁剪世界文件夹
先备份,并在源世界已卸载时操作单独的导出副本。保留完整目录结构,包括地形、实体、兴趣点和世界数据。不要使用最小文件白名单,否则可能删除地形、物品展示框、盔甲架或其他制作内容。
世界结构取决于 Minecraft 版本和服务端。旧结构区分下界 DIM-1 与末地 DIM1;现代存储把维度放在 dimensions/<namespace>/<key>/ 中。保留服务器生成的结构,并按上文说明为每份蓝图导出所需的单个维度。发布前,将副本导入独立服务器,检查地形与制作的实体。确认该服务器版本的路径后,才能从导出副本删除临时锁文件或私人玩家数据。
运行打包命令
EliteMobs 提供 /em package <dungeonName> <version> 命令,需要 elitemobs.package 权限。它在下列每个内容文件夹中查找名为 dungeonName 的子文件夹,把找到的内容复制到 exports/<dungeonName>/,然后压缩为 exports/<dungeonName>_packaged.zip。
它扫描的文件夹依次为:
custombosses、customevents、npcs、npc_scripts、transport_routes、customitems、customquests、customarenas、customspawns、customtreasurechests、wormholes、world_blueprints、powers、behaviors
找不到的项会打印一条 "no subdirectory" 提示并被跳过,对于并未使用全部内容类型的包来说,这是正常现象。
因此,我们强烈建议你把想要打包的内容放在与包名同名的文件夹中。 否则,你就必须手动收集文件并按分发所需的文件结构进行打包。
该命令不会收集 content_packages、worldcontainer、models、scripts、enchantments 或 resource_pack,也不会创建 pack.meta。生成最终 zip 前,将内容包需要的文件加入导出文件夹。<version> 参数必须是整数,但不会更新 dungeonVersion;请手动修改该字段。
复制之前,命令会验证匹配的已加载内容包定义所引用的现有蓝图。无效结构或服务器不匹配可能使操作中止。此检查不代表所有必要配置、Boss 和资源都已包含。
每次运行都会先在临时文件夹中构建导出内容。成功后,它会替换 exports/<dungeonName>/ 和 exports/<dungeonName>_packaged.zip,因此你手动加入之前导出文件夹的文件会被删除。请把这些补充文件保存在别处,并在每次运行后重新复制进去。如果所有内容文件夹都不存在,或者某个内容文件夹或文件是符号链接,命令会打印 Failed to zip package!,在控制台记录原因,并保持之前的导出内容不变。
添加副本包文件
如果你正在制作副本,需要手动把副本包文件添加到 exports 文件夹中新生成的目录里。你的副本包配置文件应遵循上文所述的格式,并放在名为 content_packages 的文件夹中。更多细节请参见下方的 文件结构 一节。
完成后别忘了把副本压缩成 zip!
文件结构
如果一切操作正确,文件结构应当与下面这个示例类似,其中我们把副本命名为 my_cool_dungeon:
my_cool_dungeon 文件结构示例
- my_cool_dungeon.zip
- pack.meta(内容为
elitemobs) - content_packages
- my_cool_dungeon.yml <- 你的副本包配置文件放在这里
- worldcontainer
- [把你的世界文件夹放在这里]
- wormholes
- my_cool_dungeon
- [把你的虫洞放在这里]
- my_cool_dungeon
- npcs
- my_cool_dungeon
- [把你的 NPC 放在这里]
- my_cool_dungeon
- customtreasurechests
- my_cool_dungeon
- [把你的宝藏箱放在这里]
- my_cool_dungeon
- customquests
- my_cool_dungeon
- [把你的任务放在这里]
- my_cool_dungeon
- customitems
- my_cool_dungeon
- [把你的自定义物品放在这里]
- my_cool_dungeon
- custombosses
- my_cool_dungeon
- [把你的自定义 Boss 放在这里]
- my_cool_dungeon
- customarenas
- my_cool_dungeon
- [把你的自定义竞技场放在这里]
- my_cool_dungeon
- powers
- my_cool_dungeon
- [把你的自定义能力放在这里]
- my_cool_dungeon
- world_blueprints
- my_cool_dungeon
- [把你的世界文件夹放在这里,用于实例化副本]
- my_cool_dungeon
- customevents
- my_cool_dungeon
- [把你的自定义事件放在这里]
- my_cool_dungeon
- customspawns
- my_cool_dungeon
- [把你的自定义生成规则放在这里]
- my_cool_dungeon
- models
- [把你的 bbmodel 格式模型放在这里,可以使用子文件夹]
- scripts
- [把你的 FreeMinecraftModels Lua 脚本放在这里]
- resource_pack
- my_cool_dungeon_rsp
- [把你的资源包文件放在这里]
- my_cool_dungeon_rsp
- pack.meta(内容为
通过 plugins/EliteMobs/imports/ 导入完成的 zip,然后重载并检查 /em setup。分享前测试一次全新安装,包括引用的 Boss、任务、Lua 文件、模型和世界蓝图。
被识别的顶层文件夹
导入器只认识一组固定的顶层名称。对于 EliteMobs 包(pack.meta 内容为 elitemobs),它们是:
| 文件夹 | 安装位置 |
|---|---|
content_packages | plugins/EliteMobs/content_packages |
dungeonpackages | plugins/EliteMobs/content_packages(旧版别名) |
custombosses | plugins/EliteMobs/custombosses |
customitems | plugins/EliteMobs/customitems |
customtreasurechests | plugins/EliteMobs/customtreasurechests |
customevents | plugins/EliteMobs/customevents |
customspawns | plugins/EliteMobs/customspawns |
customquests | plugins/EliteMobs/customquests |
customarenas | plugins/EliteMobs/customarenas |
npcs | plugins/EliteMobs/npcs |
npc_scripts | plugins/EliteMobs/npc_scripts |
transport_routes | plugins/EliteMobs/transport_routes |
behaviors | plugins/EliteMobs/behaviors |
enchantments | plugins/EliteMobs/enchantments |
wormholes | plugins/EliteMobs/wormholes |
powers | plugins/EliteMobs/powers |
world_blueprints | plugins/EliteMobs/world_blueprints |
resource_pack | plugins/EliteMobs/resource_pack |
worldcontainer | 服务器的世界容器 |
models 或 modelengine | FreeMinecraftModels 已启用时使用其 models 文件夹;否则在 ModelEngine 已启用时使用其 blueprints 文件夹;两者均未启用时使用 FreeMinecraftModels 的 models 文件夹 |
scripts | plugins/FreeMinecraftModels/scripts |
elitemobs | plugins/EliteMobs,按与该数据文件夹相同的结构合并 |
freeminecraftmodels | plugins/FreeMinecraftModels,按与该数据文件夹相同的结构合并。其中的 models 文件夹会放到 FreeMinecraftModels 实际读取的 models 文件夹中 |
betterstructures | plugins/BetterStructures,按与该数据文件夹相同的结构合并 |
pack.meta | 不会被安装到任何地方——它只是被读取以识别该包 |
没有专属顶层名称的文件请放在 elitemobs、freeminecraftmodels 和 betterstructures 文件夹中,例如把物品所用的 FreeMinecraftModels 附魔放在 freeminecraftmodels/enchantments。导入将文件放入其文件夹后,FreeMinecraftModels 会重新加载导入的内容。BetterStructures 会在自身启动完成后重新加载;不具备该重载入口的版本会记录一条警告,提示你执行 /bs reload。
无法识别的顶层条目会导致整个内容包被拒绝,压缩包会保留以供修正。请勿在根目录放入多余的 readme、截图或 __MACOSX 文件夹。写入目标失败时,导入器会尝试回滚该压缩包改变的所有目标;重试前检查回滚警告。
schematics 也会使 EliteMobs 压缩包被拒绝,并额外提示示意图副本已在 EliteMobs 9.0 中移除。
如果希望管理员通过 /em setup 安装副本,发布的配置应使用 isEnabled: false。为每个世界准备并检查已卸载的导出副本。保留创作服务器的文件,并核实导出配置;不要假设打包命令会重置安装状态。
与社区分享你创建的副本包
Discord 上有一个 #community_dungeons 频道,人们可以在那里分享自己的迷你副本作品。欢迎投稿!
