Упаковщик подземелий
Что такое подземелья?
Информацию о подземельях, включая сведения о готовых подземельях, можно найти здесь.
Что такое упаковщик подземелий?
Система пакетов позволяет распространять подземелья, события, модели, арены, NPC, предметы и другой контент EliteMobs. Команда упаковки собирает только часть поддерживаемых папок. Миры, определения пакетов и некоторые ресурсы нужно добавлять вручную, как описано ниже.
Зачем использовать пакеты подземелий?
- Инстансовые подземелья! Инстансовые подземелья можно создать только через систему пакетов подземелий.
- Надёжные резервные копии мини-подземелий! Создав пакет подземелья, вы сможете разворачивать и переразворачивать его на любом сервере в любое время и по любой причине.
- Легко включать и выключать! Вы всегда можете выполнить
/em setupи временно или навсегда включить либо выключить пакеты подземелий. - Легко делиться! Если вы хотите поделиться своими творениями, пакеты подземелий можно просто заархивировать и отправить другим людям. Если вам интересно, в Discord есть комната, посвящённая творениям сообщества!
- Телепорты! Установленный пакет боевого контента появляется на странице телепортов
/em, если заданоlistedInTeleports: trueи пакет не является испытанием зачарования. Координаты назначения задаёт автор; меню не создаёт их автоматически.
Создание подземелий
Следующие настройки используются для создания конфигурационного файла, который должен лежать в папке content_packages. Эти настройки предназначены именно для создания подземелий и не требуются, если вы просто хотите использовать упаковщик подземелий для распространения контента, не связанного с подземельями, — например, пака предметов или событий.
Необходимые плагины
Дополнительный плагин регионов не требуется. EliteMobs регистрирует миры с protect: true в общей системе защиты MagmaCore.
WorldGuard по-прежнему является необязательной мягкой зависимостью. Когда он установлен, становятся доступны его специфичные для EliteMobs флаги регионов, но для защиты пакета подземелья он не требуется.
Создание подземелья, шаг за шагом
Раньше в EliteMobs было два основных вида подземелий: на основе мира и на основе схематики.
Подземелья на основе схематики были связаны с сохранённой постройкой. Они больше не поддерживаются; SCHEMATIC_DUNGEON использовать нельзя.
Все подземелья 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
customInfo
Сохранённое информационное поле. Оно читается и регистрируется для перевода, но текущее меню настройки его не выводит. Для описания в /em setup используйте setupMenuDescription.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
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
Ссылка для ручного скачивания в /em setup, когда контент отсутствует и у пакета нет slug Nightbreak. Само это поле не добавляет пользовательскому пакету поддержку автоматического скачивания через Nightbreak.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
downloadLink | Строка | пустая строка | ❌ |
Пример
downloadLink: http://www.example.org

dungeonSizeCategory
Задаёт метку размера пакета, по умолчанию LAIR. Режим работы мира определяется полем contentType, а не этой меткой.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
dungeonSizeCategory | Особое [1] | LAIR | ❌ |
Пример
dungeonSizeCategory: MINIDUNGEON

Особое [1]
Развернуть таблицу
| Ключ | Описание |
|---|---|
LAIR | Логова — разновидность небольших подземелий, сосредоточенных вокруг одного крупного боя с боссом. |
SANCTUM | Санктумы — аналог инстансированных Логов. То есть они сосредоточены вокруг одного огромного боя с боссом. |
MINIDUNGEON | Мини-подземелья — разновидность подземелий среднего размера, которые обычно содержат 3-15 мини-боссов и одного крупного босса, а также множество «мусорных» мобов, предназначенных для «фарма» игроками ради монет и снаряжения. |
DUNGEON | Подземелья — аналог инстансированных Мини-подземелий. Это самый традиционный для MMORPG тип подземелья, где игроки собираются в группу и проходят череду мусорных мобов и мини-боссов, чтобы сразиться с финальным боссом. |
RAID | Метка рейда для более крупного группового контента. Допустимое значение. |
ADVENTURE | Приключения — полноценные приключенческие карты. Они включают цепочки заданий, NPC, большое количество мини-боссов и боссов и могут даже содержать внутри себя собственные арены или подземелья. |
ARENA | Арены — зоны выживания по волнам, в которых игроки получают награды за победу над волнами. |
OTHER | Всё остальное, что не подпадает под предыдущие категории. |
REALM | Метка крупного подземелья с обширным контентом и прогрессией. Оно может быть инстансовым; проверяйте contentType. |
Более подробные описания см. в разделе Подземелья
protect
Включает общую защиту мира MagmaCore. Она ограничивает разрушение и установку блоков игроками, горение, поджигание, исчезновение блоков кроме подмороженного льда, опадание листвы, костную муку, опустошение вёдер, редактирование табличек, доступ к контейнерам кроме зарегистрированных сундуков с сокровищами, двери, люки, калитки, яйца дракона, цветочные горшки, рамки, стойки для брони, изменение блоков сущностями и спавн мобов с причиной, отличной от CUSTOM. Зелья плетения, создающие паутину для игроков, также блокируются.
Соответствующие исключения задаются через allowExplosionBlockDamage, allowLiquidFlow и allowElytra. Глобальные настройки подземелий управляют дружественным огнём и множителями урона от окружения. При preventFlyToggleInDungeons: true в CombatTag.yml (по умолчанию) защита также не даёт игрокам без прав оператора начать полёт. Администраторы могут использовать /em protection bypass для действий игрока, поддерживающих обход. При protect: false эта защита отключается, но мир остаётся под управлением EliteMobs, включая жизненный цикл подземелья и боевые правила.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
protect | Логическое значение | true | ❌ |
Пример
protect: true
dungeonVersion
Задаёт версию пакета, по умолчанию 0. При выпуске новой версии увеличивайте это значение в файле. Аргумент версии команды упаковки не записывает его в конфигурацию.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
dungeonVersion | Целое число | 0 | ❌ |
Пример
dungeonVersion: 1
playerInfo
Задаёт описание в меню телепортов. Поддерживает цветовые коды и подстановки $bossCount, $lowestTier, $highestTier. Используется в книжном меню, меню инвентаря и диалогах. Пакет должен соответствовать условиям отображения и иметь включённый listedInTeleports.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
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
Опорная точка для относительных координат из эпохи схематик. Парсер пакетов всё ещё читает anchorPoint и calculatedRotation, но ни одна текущая команда или функция их не использует. Команда /em relativecoords, которая измеряла смещение от опорной точки, удалена в EliteMobs 9.0.5. Вместо этого размещайте боссов, сундуки и 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= задаёт идентификатор звука из ресурс-пака, а не путь к файлу.
length= Длительность саундтрека в миллисекундах. EliteMobs внутренне переводит её в тики, поэтому это должна быть реальная длительность звука, иначе трек будет перезапускаться раньше или позже.
Части разделяются пробелом. Один трек повторяется. Если соединить два трека через ->, первый проигрывается один раз, затем повторяется второй. Обе записи используют name=/length=. Эта настройка не отправляет ресурс-пак клиентам.
Пример
song: name=elitemobs:dark_cathedral.ambient length=93830
Форма с двумя треками:
song: name=elitemobs:intro length=12000->name=elitemobs:dark_cathedral.ambient length=93830
dungeonLockoutMinutes
Задаёт в минутах время до повторного получения наград за конкретного инстансового босса для игрока. По умолчанию 4320, то есть 72 часа; 0 отключает ограничение. Оно не запрещает вход в подземелье. После убийства учитывается блокировка игрока и группы; за босса на кулдауне также не начисляется 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 всё ещё разбираются парсером пакетов для старых файлов. Текущие мировые и инстансовые пакеты размещают контент иначе: используйте координаты из определений боссов и сундуков и чертёж мира. anchorPoint и calculatedRotation сохраняются так же; см. anchorPoint.
Переводимые ключи
Шесть из перечисленных выше значений регистрируются в системе перевода при загрузке пакета: name, customInfo, playerInfo, regionEnterMessage, regionLeaveMessage и name каждой записи в difficulties. На сервере с неанглийским языком они ищутся в CSV этого языка, а текст, который вы пишете в YAML, и есть то, с чем сверяется английская колонка. Пишите их на английском, если хотите, чтобы ваш пакет можно было переводить.
Пакеты подземелий на основе мира
Следующие значения применяются только к подземельям на основе мира.
worldName
Задаёт имя мира, который следует упаковать.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
worldName | Строка | нет | ✅ |
Пример
worldName: my_minecraft_world
wormholeWorldName
Задаёт дополнительный мир, загружаемый вместе с основным, например хаб телепортов или зал босса. Он использует то же окружение и настройки защиты пакета. Само поле не создаёт червоточины или переходы между мирами.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
wormholeWorldName | Строка | нет | ❌ |
Пример
wormholeWorldName: my_minecraft_world_wormhole
environment
Задаёт окружение мира.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
environment | Окружение | NORMAL | ❌ |
Пример
environment: NORMAL
teleportLocation
Задаёт точку входа в обычный мир подземелья или зону ожидания инстанса. В инстансе позиция переносится в скопированный мир; при отсутствии позиции используется startLocation. Формат: world,x,y,z,yaw,pitch.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
teleportLocation | Строка | нет | ✅ |
Пример
teleportLocation: my_minecraft_world,-1.5,68,0.5,0.0,0.0
allowExplosionBlockDamage
Управляет повреждением блоков взрывами в защищённом мире. Обычные взрывы не становятся элитными. Восстановление работает только для отслеживаемых элитных взрывов при включённом doExplosionRegen: начинается примерно через минуту и восстанавливает один блок за тик. Повреждения от других взрывов могут остаться навсегда.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
allowExplosionBlockDamage | Логическое значение | false | ❌ |
Пример
allowExplosionBlockDamage: true
allowLiquidFlow
Управляет течением воды и лавы в защищённом мире. Использование вёдер ограничивается отдельными правилами; разрешение течения не разрешает опустошать вёдра.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
allowLiquidFlow | Логическое значение | true | ❌ |
Пример
allowLiquidFlow: false
allowElytra
Управляет полётом на элитрах в защищённом мире. При false блокируется начало полёта, а текущий полёт прекращается при входе в мир и перемещении игрока. Это не проверка каждый тик. Административный обход защиты по-прежнему учитывается.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
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
Инстансовые подземелья
Инстансовые подземелья создают новый мир каждый раз, когда группа игроков хочет пройти подземелье, и удаляют его по завершении. Чтобы это работало корректно, вы должны поместить папку с именем из dungeonConfigFolderName в конфигурационную папку world_blueprints плагина EliteMobs.
Поместите экспорт одного измерения в 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. Имя файла должно соответствовать первой фазе босса в текущем инстансе. Убийство учитывается во всех подходящих незавершённых целях.
dungeonObjectives:
- filename=dungeon_final_boss.yml
- filename=dungeon_miniboss_one.yml
- filename=dungeon_miniboss_two.yml
dungeonObjectives:
- filename=dungeon_guard.yml:amount=5
Краткая запись boss.yml без filename= всё ещё принимается как 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 для сопоставления с фильтрами сложности в способностях боссов и добыче. name является переводимым названием для игроков. Для Normal, Hard и Mythic рекомендуются явные ID 0, 1, 2. Если пакет использует названия Easy/Medium/Hard, они также распознаются как эти три уровня. Неизвестные ID сопоставляются точно. Если id отсутствует, он определяется по исходному названию до перевода.
Сложности задаются в виде списка со следующими полями:
| Ключ | Описание | Значения | Обязательный |
|---|---|---|---|
name | Название сложности для игроков. | Строка | ✅ |
id | Идентификатор сложности для зависящих от неё возможностей боссов и предметов. | Строка | ❌ |
levelSync | Ограничивает уровень предмета в кэше предметов игрока. Не переписывает экипировку и не ограничивает все расчёты урона и защиты. | Абсолютный уровень (25) или значение относительно contentLevel в кавычках ('+5', '-3') | ❌ |
Относительная синхронизация: значение levelSync, начинающееся с + или -, прибавляется к contentLevel, с минимумом 1. Например, contentLevel: 40 и levelSync: '-5' задают предел кэшированного уровня 35. Используйте кавычки: YAML убирает плюс у некавыченного +5, превращая его в абсолютный уровень 5. Динамические подземелья рассчитывают смещение от выбранного уровня. Неверное значение отключает синхронизацию через 0 и записывает предупреждение.
Текущие расчёты атаки ближнего боя, защиты брони и стрелкового оружия могут читать исходные уровни предметов. Вклад зачарований этим параметром также не ограничивается. Прежде чем полагаться на синхронизацию при балансировке, прочитайте раздел сложности инстансовых подземелий.
Динамические подземелья
Динамические подземелья масштабируют содержимое инстанса под выбранный игроком уровень. Меню использует текущий боевой уровень игрока: начинает с большего из 5 и боевого уровня минус 5, затем предлагает шаги по 5 до боевого уровня плюс 5, но не выше 200. Ранг гильдии не открывает эти варианты.
Для боссов динамического подземелья используйте level: dynamic. Выбранный уровень применяется к боссам EliteMobs в инстансе, а не ко всем ванильным сущностям и наградам. Задавайте scalability: scalable предметам, которые должны принимать уровень награды, и проверяйте конкретный путь выдачи добычи. Взвешенная добыча боссов и явно заданные фиксированные награды могут сохранять исходный уровень.
Для динамических подземелий необходимы следующие значения.
Поскольку все динамические подземелья также являются инстансовыми, они дополнительно используют все значения и настройки инстансовых подземелий.
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 для сопоставления с фильтрами сложности в способностях боссов и добыче. name является переводимым названием для игроков. Для Normal, Hard и Mythic рекомендуются явные ID 0, 1, 2. Если пакет использует названия Easy/Medium/Hard, они также распознаются как эти три уровня. Неизвестные ID сопоставляются точно. Если id отсутствует, он определяется по исходному названию до перевода.
Значения levelSync со знаком и в кавычках задают относительный предел для кэша предметов игрока. Они не меняют выбранный уровень боссов инстанса, не усиливают низкоуровневую экипировку и не ограничивают все боевые расчёты.
Например, "+0" задаёт предел на выбранном уровне подземелья, "+5" на пять уровней выше, "-5" на пять ниже, с минимумом 1. Ограничения, описанные в разделе инстансовых подземелий, остаются в силе.
Сложности задаются в виде списка со следующими полями:
| Ключ | Описание | Значения | Обязательный |
|---|---|---|---|
name | Название сложности для игроков. | Строка | ✅ |
id | Идентификатор сложности для зависящих от неё возможностей боссов и предметов. | Строка | ❌ |
levelSync | Ограничивает уровень предмета в кэше, а не все характеристики экипировки. | Целое число для абсолютного предела или смещение со знаком в кавычках, например '+5' | ❌ |
Использование meta_pack.yml для крупных подземелий
Иногда вы можете работать над крупным подземельем, которое включает в себя другие, меньшие подземелья, позволяя игрокам перемещаться между ними через основной мир подземелья. Отличный пример — приключенческое подземелье EliteMobs Primis.
В Primis есть обширный мир, где игроки могут исследовать и выполнять задания, но внутри него также находятся два инстансовых подземелья, одно из которых является финальным боем с боссом. В таких случаях будет несколько файлов пакетов подземелий, хотя все они относятся к одному общему подземелью.
Для управления этим мы используем файл мета-пакета подземелья. Этот файл выступает центральным каталогом, указывая основное подземелье и перечисляя весь связанный с ним дополнительный контент подземелья.
Пример показывает группировку пакетов 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
Рекомендуемые значения для боссов
О целевых значениях добычи для Normal, Hard и Mythic читайте в разделе автоматической классовой добычи и баланса зачарований. Там описаны профили снаряжения по рангу боя, фактический бюджет зачарований, повторное использование представления наград и команды проверки для администраторов. Значения здоровья и урона ниже регулируют бой независимо от качества наград.
Создание среднего моба подземелья
Используйте normalizedCombat: true для нормализованного боя. Здоровье и урон по-прежнему зависят от уровня, множителей, экипировки, навыков и боевых настроек. Примеры служат отправной точкой для баланса, а не гарантируют фиксированное число ударов до убийства.
Для подземелий normalizeRegionalBosses: true в MobCombatSettings.yml (значение по умолчанию) включает нормализованный бой региональных боссов; боссы инстансовых подземелий также его используют. Явное 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.
Создание мини-боссов
Мини-боссы должны стоять на своём и создавать игрокам механическое испытание. Это должна быть проверка мастерства, длящаяся некоторое время, но не что-то крайне смертоносное:
normalizedCombat: true
healthMultiplier: 3.0 #Starting point for minibosses.
damageMultiplier: 1.2 #Damage scales with the player's health and defenses; playtest this value.
Создание боссов
Боссы — настоящее испытание, кульминация нарастания напряжения в подземелье и подлинная проверка мастерства, когда на кону всё. Схватки должны быть долгими, а смерть — реальной угрозой.
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.
Эти рекомендуемые значения — лишь приблизительные ориентиры, и итоговые значения следует подбирать под конкретные схватки.
Перед повышением healthMultiplier финального босса проверьте длительность боя с предполагаемым размером группы, экипировкой и навыками.
healthMultiplierБазовое здоровье босса и результат применения множителя ограничены серверным settings.attribute.maxHealth.max, по умолчанию 2048. При таком пределе 7.0 достигает потолка на уровне 36, 10.0 на 33, 40.0 на 23. Масштабирование по группе инстанса затем умножает результат и ограничено тем же потолком, поэтому босс, уже достигший предела, не получает дополнительного здоровья от большей группы. Урон использует отдельные расчёты и ограничения, а не потолок здоровья. Базовый расчёт и изменение серверного предела описаны в 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 хранит свой стандартный ресурс-пак.
Храните изменения в отдельном паке. При запуске EliteMobs сравнивает контрольную сумму встроенного пака с сохранённой .rsp_checksum. Папка em_rsp_defaults заменяется при изменении встроенного пака либо отсутствии сохранённой суммы или папки. Отредактированные вами файлы не хэшируются: изменения могут пережить перезапуск, но будут заменены при следующем экспорте.
После упорядочивания файлов структура каталогов должна выглядеть так:
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>/. Сохраняйте структуру своего сервера и экспортируйте одно нужное измерение для каждого шаблона, как описано выше. Перед распространением импортируйте копию на отдельный сервер и проверьте ландшафт и созданные сущности. Временные блокировки и личные данные игроков удаляйте только из экспортной копии, предварительно уточнив их пути для этой версии сервера.
Выполнение команды упаковки
Команда /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; измените это поле самостоятельно.
Перед копированием команда проверяет существующие шаблоны миров, на которые ссылаются подходящие загруженные определения пакетов. Неверная структура или несовместимый сервер могут прервать операцию. Эта проверка не подтверждает наличие всех необходимых настроек, боссов и ресурсов.
При каждом запуске экспорт сначала собирается во временной папке. В случае успеха он заменяет exports/<dungeonName>/ и exports/<dungeonName>_packaged.zip, поэтому файлы, которые вы вручную добавили в предыдущую экспортную папку, удаляются. Храните такие добавления в другом месте и копируйте их заново после каждого запуска. Если ни одной из папок контента нет либо папка или файл контента является символической ссылкой, команда выводит Failed to zip package!, записывает причину в консоль и оставляет предыдущий экспорт нетронутым.
Добавление файла пакета подземелья
Если вы создаёте подземелье, вам нужно вручную добавить файл пакета подземелья в свежесозданную папку внутри папки exports. Конфигурационный файл вашего пакета подземелья должен соответствовать описанному выше формату и находиться в папке content_packages. Подробнее об этом см. раздел Структура файлов ниже.
По завершении обязательно заархивируйте своё подземелье!
Структура файлов
Если вы всё сделали правильно, структура файлов должна быть похожа на этот пример, где мы назвали подземелье 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
- [Сюда помещаются ваши кастомные боссы]
- 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
- [Сюда помещаются ваши Lua-скрипты FreeMinecraftModels]
- resource_pack
- my_cool_dungeon_rsp
- [Сюда помещаются файлы вашего ресурс-пака]
- my_cool_dungeon_rsp
- pack.meta (содержит
Готовый zip импортируется через plugins/EliteMobs/imports/. Затем перезагрузите конфигурацию и проверьте /em setup. Перед распространением проверьте чистую установку, включая указанных боссов, задания, 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, если он включён; иначе blueprints ModelEngine, если включён ModelEngine; если оба выключены, папка моделей FreeMinecraftModels |
scripts | plugins/FreeMinecraftModels/scripts |
elitemobs | plugins/EliteMobs, объединяется по той же структуре, что и эта папка данных |
freeminecraftmodels | plugins/FreeMinecraftModels, объединяется по той же структуре, что и эта папка данных. Папка models внутри неё попадает в ту папку моделей, которую читает FreeMinecraftModels |
betterstructures | plugins/BetterStructures, объединяется по той же структуре, что и эта папка данных |
pack.meta | никуда не устанавливается — читается только для идентификации пакета |
Используйте папки elitemobs, freeminecraftmodels и betterstructures для файлов, у которых нет собственного имени верхнего уровня, например freeminecraftmodels/enchantments для зачарований FreeMinecraftModels, которые используют ваши предметы. Когда импорт помещает файлы в его папку, FreeMinecraftModels перезагружает импортированный контент. BetterStructures перезагружается после завершения собственного запуска; сборки без этой точки входа для перезагрузки выводят предупреждение с просьбой выполнить /bs reload.
Неизвестная запись в корне отклоняет весь пакет; архив сохраняется для исправления. Не помещайте в корень посторонние readme, скриншоты и __MACOSX. При ошибке записи импортёр пытается откатить все назначения, изменённые этим архивом. Перед повтором проверьте предупреждения об откате.
schematics также отклоняет архив EliteMobs и дополнительно предупреждает, что подземелья на схематиках удалены в EliteMobs 9.0.
Поставляйте конфигурации с isEnabled: false, если администраторы должны устанавливать их через /em setup. Подготовьте и проверьте выгруженную экспортную копию каждого мира. Сохраняйте файлы сервера разработки и проверяйте экспортированные настройки: команда упаковки не гарантирует сброс состояния установки.
Как поделиться созданными пакетами подземелий с сообществом
В Discord есть раздел #community_dungeons, где люди могут делиться своими творениями — мини-подземельями. Присоединяйтесь!
