Упаковщик подземелий
Что такое подземелья?
Информацию о подземельях, включая сведения о готовых подземельях, можно найти здесь.
Что такое упаковщик подземелий?
Упаковщик подземелий позволяет администраторам не только создавать и упаковывать подземелья, но и упаковывать любой контент EliteMobs. Сюда входят, например, паки событий, паки моделей, арены, паки NPC, паки предметов и так далее.
Зачем использовать пакеты подземелий?
- Инстансовые подземелья! Инстансовые подземелья можно создать только через систему пакетов подземелий.
- Надёжные резервные копии мини-подземелий! Создав пакет подземелья, вы сможете разворачивать и переразворачивать его на любом сервере в любое время и по любой причине.
- Легко включать и выключать! Вы всегда можете выполнить
/em setupи временно или навсегда включить либо выключить пакеты подземелий. - Легко делиться! Если вы хотите поделиться своими творениями, пакеты подземелий можно просто заархивировать и отправить другим людям. Если вам интересно, в Discord есть комната, посвящённая творениям сообщества!
- Телепорты! Пакеты подземелий автоматически создают точки телепортации, доступные на странице «Телепорты» в меню
/em, что может быть очень полезно во многих конфигурациях.
Создание подземелий
Следующие настройки используются для создания конфигурационного файла, который должен лежать в папке content_packages. Эти настройки предназначены именно для создания подземелий и не требуются, если вы просто хотите использовать упаковщик подземелий для распространения контента, не связанного с подземельями, — например, пака предметов или событий.
Необходимые плагины
Никаких. Защита подземелий обрабатывается самим EliteMobs: установка protect: true применяет к миру пакета собственный набор защит EliteMobs для всего мира, без участия плагина регионов.
WorldGuard по-прежнему является необязательной мягкой зависимостью. Когда он установлен, становятся доступны его специфичные для EliteMobs флаги регионов, но для защиты пакета подземелья он не требуется.
Создание подземелья, шаг за шагом
Раньше в EliteMobs было два основных вида подземелий: на основе мира и на основе схематики.
Подземелья на основе схематики были связаны с постройкой-схематикой. Сейчас они выведены из обращения и больше не поддерживаются.
Все подземелья EliteMobs теперь основаны на мире.
Обязательный файл pack.meta
Ваш пакет подземелья должен включать файл pack.meta — это просто переименованный файл .txt с расширением .meta. Этот файл должен содержать всего одно слово, указывающее, для какого плагина предназначен пакет (например, «elitemobs», строчными буквами). Файл pack.meta должен находиться в корневом каталоге вашего пакета, рядом со всеми остальными папками.
Глобальные значения
Следующие значения применяются ко всем подземельям
isEnabled
Определяет, включён ли пакет подземелья.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
isEnabled | Boolean | false | ✅ |
Пример
isEnabled: true
name
Задаёт название контента. Поддерживает Color Codes.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
name | String | none | ✅ |
Пример
name: '&c[lvl 999] &aThe Green Dungeon'

contentType
Задаёт тип подземелья.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
contentType | OPEN_DUNGEON / INSTANCED_DUNGEON / DYNAMIC_DUNGEON / HUB / META_PACKAGE / ITEMS_PACKAGE / EVENTS_PACKAGE / MODELS_PACKAGE | none | ✅ |
Пример
contentType: INSTANCED_DUNGEON
customInfo
Задаёт дополнительную информацию, которая появится на экране /em setup. Носит исключительно информационный характер. Поддерживает Color Codes.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
customInfo | String List | none | ✅ |
Пример
customInfo:
- '&aThe best dungeon.'
- '&aMade by: CoolPlayer'

setupMenuDescription
Задаёт описание, которое появится в меню /em setup для этого пакета подземелья. Поддерживает Color Codes.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
setupMenuDescription | String List | none | ❌ |
Пример
setupMenuDescription:
- '&2A cool dungeon for levels 10-20!'
- '&2Features 3 bosses and custom loot!'
downloadLink
Задаёт ссылку на скачивание, показываемую игрокам в меню /em setup, когда контент ещё не загружен.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
downloadLink | String | пустая строка | ❌ |
Пример
downloadLink: http://www.example.org

dungeonSizeCategory
Задаёт размерную категорию пакета подземелья. Носит исключительно информационный характер.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
dungeonSizeCategory | Особое [1] | none | ✅ |
Пример
dungeonSizeCategory: MINIDUNGEON

Особое [1]
Развернуть таблицу
| Ключ | Описание |
|---|---|
LAIR | Логова — разновидность небольших подземелий, сосредоточенных вокруг одного крупного боя с боссом. |
SANCTUM | Санктумы — аналог инстансированных Логов. То есть они сосредоточены вокруг одного огромного боя с боссом. |
MINIDUNGEON | Мини-подземелья — разновидность подземелий среднего размера, которые обычно содержат 3-15 мини-боссов и одного крупного босса, а также множество «мусорных» мобов, предназначенных для «фарма» игроками ради монет и снаряжения. |
DUNGEON | Подземелья — аналог инстансированных Мини-подземелий. Это самый традиционный для MMORPG тип подземелья, где игроки собираются в группу и проходят череду мусорных мобов и мини-боссов, чтобы сразиться с финальным боссом. |
RAID | Скоро! |
ADVENTURE | Приключения — полноценные приключенческие карты. Они включают цепочки заданий, NPC, большое количество мини-боссов и боссов и могут даже содержать внутри себя собственные арены или подземелья. |
ARENA | Арены — зоны выживания по волнам, в которых игроки получают награды за победу над волнами. |
OTHER | Всё остальное, что не подпадает под предыдущие категории. |
REALM | Царства — большие постоянные миры с обширным контентом и системами прогрессии. |
Более подробные описания см. в разделе Подземелья
protect
Задаёт, должен ли мир пакета подземелья быть защищён. Это не использует WorldGuard — EliteMobs регистрирует мир в собственном наборе защит, который блокирует разрушение и установку блоков, горение/увядание/поджигание блоков, опадание листвы, костную муку, вёдра с жидкостями, редактирование табличек, доступ к контейнерам (кроме сундуков с сокровищами), открытие дверей/люков/калиток, взаимодействие с яйцом дракона и цветочным горшком, порчу рамок и стоек для брони, а также ванильный спавн мобов. Некоторые из этих пунктов дополнительно настраиваются через allowExplosionBlockDamage, allowLiquidFlow и allowElytra.
Когда protect равен false, ничего из этого не применяется, и мир ведёт себя как любой обычный мир.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
protect | Boolean | true | ❌ |
Пример
protect: true
dungeonVersion
Задаёт версию пакета подземелья.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
dungeonVersion | Integer | none | ✅ |
Пример
dungeonVersion: 1
playerInfo
Задаёт информацию, отображаемую в меню. Поддерживает Color Codes.
Работает только когда /em переведено в книжный режим командой /em alt.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
playerInfo | String | none | ✅ |
Пример
playerInfo: 'Difficulty: &a1-man easy content!'

regionEnterMessage
Задаёт сообщение, появляющееся, когда игрок входит в зону подземелья. Поддерживает Color Codes.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
regionEnterMessage | String | none | ❌ |
Пример
regionEnterMessage: '&aYou have entered the dungeon!'

regionLeaveMessage
Задаёт сообщение, появляющееся, когда игрок покидает зону подземелья. Поддерживает Color Codes.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
regionLeaveMessage | String | none | ❌ |
Пример
regionLeaveMessage: '&aYou have left the dungeon!'

hasCustomModels
Помечает, что пакет подземелья поставляет пользовательские модели (для ModelEngine или FreeMinecraftModels). Ключ читается и записывается, но в настоящее время ничто в EliteMobs на него не реагирует — модели устанавливаются исключительно на основании наличия папки models в пакете. Считайте это документационной пометкой.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
hasCustomModels | Boolean | false | ❌ |
Пример
hasCustomModels: false
dungeonConfigFolderName
Задаёт имя папок, используемых для файлов, связанных с этим подземельем.
Обязательно для инстансовых подземелий!.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
dungeonConfigFolderName | String | none | ❌ |
Пример
dungeonConfigFolderName: my_dungeon_folder
anchorPoint
Задаёт опорную точку, от которой отсчитывает /em relativecoords <package>. Когда опорная точка задана, администратор, стоящий где угодно внутри установленного пакета, может выполнить эту команду и получить координаты того места, где он стоит, относительно опорной точки — это тот формат, который используют, например, смещения подкреплений и локации в скриптах.
Если calculatedRotation не равен нулю, возвращаемый вектор перед выводом поворачивается вокруг опорной точки по оси Y, поэтому числа остаются верными и для повёрнутых размещений.
Без опорной точки команда сообщает администратору, что опорная точка недействительна, и больше ничего не делает.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
anchorPoint | Location | нет | ❌ |
calculatedRotation | Integer (в градусах) | 0 | ❌ |
Пример
anchorPoint: my_dungeon_world,100,64,100,0,0
calculatedRotation: 0
contentLevel
Задаёт уровень контента, который подземелье должно показывать в меню EM.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
contentLevel | Integer | none | ❌ |
Пример
contentLevel: 20
enchantmentChallenge
Определяет, должно ли подземелье быть подземельем испытания зачарования.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
enchantmentChallenge | Boolean | false | ❌ |
Пример
enchantmentChallenge: false
song
Определяет, должен ли у подземелья быть саундтрек.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
song | String | none | ❌ |
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
Задаёт таймер блокировки подземелья после того, как босс подземелья был убит. Указанное значение задаётся в минутах. Начиная с EliteMobs 10.3.1 значение по умолчанию равно 4320 (72 часа) и применяется ко всем стандартным пакетам контента — установите 0 в вашем YAML, чтобы отключить блокировку для конкретного пакета, или другое положительное число, чтобы переопределить её. Заблокированные игроки также не получают XP навыков за босса, на которого у них действует кулдаун.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
dungeonLockoutMinutes | Integer | 4320 | ❌ |
Пример
dungeonLockoutMinutes: 1440
containedPackages
Задаёт список пакетов подземелий, входящих в мета-пакет. Используется, когда contentType установлен в META_PACKAGE, чтобы перечислить все подпакеты, относящиеся к более крупному подземелью.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
containedPackages | String List | none | ❌ |
Пример
containedPackages:
- my_dungeon_adventure.yml
- my_dungeon_sanctum.yml
- my_dungeon_boss_fight.yml
customItemFilenames
Задаёт список файлов кастомных предметов для пака предметов. Установка этого значения автоматически задаст contentType как ITEMS_PACKAGE.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
customItemFilenames | String List | none | ❌ |
Пример
customItemFilenames:
- my_custom_sword.yml
- my_custom_armor.yml
customEventFilenames
Задаёт список файлов кастомных событий для пака событий. Установка этого значения автоматически задаст contentType как EVENTS_PACKAGE.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
customEventFilenames | String List | none | ❌ |
Пример
customEventFilenames:
- my_custom_event.yml
modelNames
Задаёт список имён моделей для пака моделей. Установка этого значения автоматически задаст contentType как MODELS_PACKAGE.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
modelNames | String List | none | ❌ |
Пример
modelNames:
- my_custom_model
Переводимые ключи
Шесть из перечисленных выше значений регистрируются в системе перевода при загрузке пакета: name, customInfo, playerInfo, regionEnterMessage, regionLeaveMessage и name каждой записи в difficulties. На сервере с неанглийским языком они ищутся в CSV этого языка, а текст, который вы пишете в YAML, и есть то, с чем сверяется английская колонка. Пишите их на английском, если хотите, чтобы ваш пакет можно было переводить.
Пакеты подземелий на основе мира
Следующие значения применяются только к подземельям на основе мира.
worldName
Задаёт имя мира, который следует упаковать.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
worldName | String | none | ✅ |
Пример
worldName: my_minecraft_world
wormholeWorldName
Эта функция задаёт имя мира червоточин, который служит вторичным миром, связанным с основным. Он используется для таких вещей, как хабы телепортации или уникальные залы боссов.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
wormholeWorldName | String | none | ❌ |
Пример
wormholeWorldName: my_minecraft_world_wormhole
environment
Задаёт окружение мира.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
environment | Environment | none | ✅ |
Пример
environment: NORMAL
teleportLocation
Задаёт точку телепортации пакета подземелья. Именно сюда будут телепортированы игроки при входе в подземелье.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
teleportLocation | String | none | ✅ |
Пример
teleportLocation: my_minecraft_world,-1.5,68,0.5,0.0,0.0
allowExplosionBlockDamage
Разрешает или запрещает взрывам повреждать блоки в подземелье. Взрывы считаются элитными, поэтому любые повреждения блоков будут восстановлены в течение 2 минут.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
allowExplosionBlockDamage | Boolean | false | ❌ |
Пример
allowExplosionBlockDamage: true
allowLiquidFlow
Определяет, разрешено ли жидкости (воде, лаве) течь в подземелье.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
allowLiquidFlow | Boolean | true | ❌ |
Пример
allowLiquidFlow: false
allowElytra
Определяет, могут ли игроки летать на элитрах в мире данного пакета контента. Когда значение false (по умолчанию), EliteMobs отменяет попытки полёта в мире пакета и каждый тик сбрасывает состояние полёта — это полезно, чтобы игроки не пропускали запланированные участки прохождения подземелья.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
allowElytra | Boolean | false | ❌ |
Пример
allowElytra: true
listedInTeleports
Определяет, отображается ли пакет подземелья в меню телепортов. При значении false игроки не смогут телепортироваться в подземелье через меню телепортации /em.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
listedInTeleports | Boolean | true | ❌ |
Пример
listedInTeleports: false
teleportLocationOffset
Задаёт смещение для точки телепортации пакета подземелья.
Этот ключ разбирается, но в настоящее время не используется — ничто в EliteMobs не читает полученное смещение, поэтому его задание не влияет на то, куда попадают игроки. Вместо этого корректируйте сам teleportLocation.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
teleportLocationOffset | String | none | ❌ |
Пример
teleportLocationOffset: my_minecraft_world,0.5,2,0.5,0.0,0.0
Инстансовые подземелья
Инстансовые подземелья создают новый мир каждый раз, когда группа игроков хочет пройти подземелье, и удаляют его по завершении. Чтобы это работало корректно, вы должны поместить папку с именем из dungeonConfigFolderName в конфигурационную папку world_blueprints плагина EliteMobs.
Затем вы помещаете используемый мир внутрь созданной папки, убедившись, что файл session.lock этого мира удалён.
Следующие значения применяются только к инстансовым подземельям. Учтите, что все инстансовые подземелья являются подземельями на основе мира, поэтому они также используют значения подземелий на основе мира.
startLocation
Задаёт точку телепортации, являющуюся стартовой позицией инстансового подземелья. Именно сюда будут телепортированы игроки при запуске инстансового подземелья командой /em start.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
startLocation | String | none | ✅ |
Пример
startLocation: my_minecraft_world,10.5,70,10.5,0.0,0.0
permission
Задаёт право, необходимое для входа в инстанс подземелья.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
permission | String | none | ❌ |
Пример
permission: elitedungeon.mypermission
minPlayerCount
Задаёт минимальное количество игроков, необходимое для запуска подземелья.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
minPlayerCount | Integer | 1 | ❌ |
Пример
minPlayerCount: 1
maxPlayerCount
Задаёт максимальное количество игроков, допустимое в подземелье.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
maxPlayerCount | Integer | 5 | ❌ |
Пример
maxPlayerCount: 5
dungeonObjectives
Задаёт список целей подземелья, необходимых для того, чтобы подземелье считалось пройденным.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
dungeonObjectives | String List | none | ✅ |
Примеры
На данный момент существует два типа целей подземелья:
- Убить цель:
filename=boss.yml:amount=X - Зачистить процент подземелья:
clearpercentage=X.Y
dungeonObjectives:
- filename=dungeon_final_boss.yml
- filename=dungeon_miniboss_one.yml
- filename=dungeon_miniboss_two.yml
dungeonObjectives:
- clearpercentage=0.8
difficulties
Задаёт список сложностей в инстансовом подземелье.
Обязательно для инстансовых подземелий!
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
difficulties | Особое [1] | none | ❌ |
Примеры
difficulties:
- levelSync: 25
id: 0
name: normal
- levelSync: 20
id: 1
name: hard
- levelSync: 15
id: 2
name: mythic

Особое [1]
Развернуть таблицу
Задание сложностей инстансового подземелья автоматически создаст разные варианты сложности при входе в подземелье.
Заданные здесь названия сложностей будут использоваться в папке кастомных боссов, где вы можете указать, какие способности есть у боссов в зависимости от сложности.
Сложности задаются в виде списка со следующими полями:
| Ключ | Описание | Значения | Обязательный |
|---|---|---|---|
name | Название сложности для игроков. | String | ✅ |
id | Идентификатор сложности, используемый кастомными боссами и кастомными предметами для возможностей, зависящих от сложности. | String | ❌ |
levelSync | Задаёт уровень синхронизации, если она используется. Синхронизация уровня ограничивает всё снаряжение игрока заданным значением, не позволяя игрокам перерасти подземелье и сохраняя его актуальность для последующих прохождений. Основано на системе синхронизации уровня из Final Fantasy 14. | Integer | ❌ |
Динамические подземелья
Динамические подземелья — расширение инстансовых подземелий с одним ключевым отличием: они позволяют контенту подземелья масштабироваться под выбранный игроком уровень сложности. Доступные игроку варианты уровня определяются открытым уровнем Гильдии игрока.
При проектировании боссов и мобов для динамического подземелья используйте настройку level: dynamic. Любой добыче в динамических подземельях следует задавать scalability: scalable.
Для динамических подземелий необходимы следующие значения.
Поскольку все динамические подземелья также являются инстансовыми, они дополнительно используют все значения и настройки инстансовых подземелий.
contentType
Задаёт тип подземелья. Здесь должно быть указано DYNAMIC_DUNGEON.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
contentType | OPEN_DUNGEON / INSTANCED_DUNGEON / DYNAMIC_DUNGEON / HUB / META_PACKAGE / ITEMS_PACKAGE / EVENTS_PACKAGE / MODELS_PACKAGE | none | ✅ |
Пример
contentType: DYNAMIC_DUNGEON
contentLevel
Задаёт уровень контента, который подземелье должно показывать в меню EM. Чтобы подземелье отображалось как динамическое, здесь нужно указать значение -1.
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
contentLevel | Integer | none | ✅ |
Пример
contentLevel: -1
difficulties
Задаёт доступный список сложностей и синхронизации уровня в динамическом подземелье.
Обязательно для инстансовых подземелий!
| Ключ | Значения | По умолчанию | Обязательный |
|---|---|---|---|
difficulties | Особое [1] | none | ✅ |
Примеры
difficulties:
- levelSync: '+5'
name: normal
id: 0
- levelSync: '+0'
name: hard
id: 1
- levelSync: '-5'
name: mythic
id: 2

Особое [1]
Развернуть таблицу
Задание сложностей инстансового подземелья автоматически создаст разные варианты сложности при входе в подземелье.
Заданные здесь названия сложностей будут использоваться в папке кастомных боссов, где вы можете указать, какие способности есть у боссов в зависимости от сложности.
Задание значений levelSync положительными или отрицательными числами в кавычках управляет тем, как синхронизируется экипировка игрока внутри подземелья. Эти значения не влияют на собственный уровень подземелья — контент подземелья всегда синхронизируется напрямую с выбором уровня игроком при входе.
Например, если levelSync установлен в "+0", экипировка игрока будет синхронизирована в точности с уровнем контента подземелья.
Если установлено "+5", экипировка игрока будет синхронизирована на 5 уровней выше контента подземелья.
Если установлено "-5", его экипировка будет синхронизирована на 5 уровней ниже контента подземелья.
Сложности задаются в виде списка со следующими полями:
| Ключ | Описание | Значения | Обязательный |
|---|---|---|---|
name | Название сложности для игроков. | String | ✅ |
id | Идентификатор сложности, используемый кастомными боссами и кастомными предметами для возможностей, зависящих от сложности. | String | ❌ |
levelSync | Задаёт уровень масштабирования снаряжения игрока. Определяет, как уровень экипировки игрока корректируется относительно контента подземелья, позволяя снаряжению быть на несколько уровней выше или ниже выбранной сложности подземелья. Основано на системе синхронизации уровня из Final Fantasy 14. | Integer | ❌ |
Использование файла пакета подземелья meta_pack.yml для крупных подземелий.
Иногда вы можете работать над крупным подземельем, которое включает в себя другие, меньшие подземелья, позволяя игрокам перемещаться между ними через основной мир подземелья. Отличный пример — приключенческое подземелье EliteMobs 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: 21 #added dungeon meta package file
Как видите, файл мета-пакета подземелья очень похож на обычный пакет подземелья с несколькими ключевыми отличиями. contentType: установлен в META_PACKAGE, и есть дополнительная настройка containedPackages:. В этой настройке перечислены все остальные пакеты подземелий, входящие в более крупное подземелье.
При создании мета-пакета обязательно включите настройку containedPackages: и перечислите каждый пакет подземелья, входящий в ваше крупное подземелье. Это гарантирует, что всё будет корректно связано и организовано в рамках общей структуры.
При версионировании подземелья всё управление версиями должно вестись через мета-пакет. Дело в том, что мета-пакет служит основным пакетом, определяющим версию всего подземелья, и именно он используется для отображения информации в меню /em setup.
Учтите, что отдельные подземелья, перечисленные в мета-пакете, могут по-прежнему появляться в меню /em teleport. Чтобы этого не происходило, вам нужно вручную отключить опции телепортации для каждого из этих подземелий в их соответствующих конфигурационных файлах.
Например, в случае подземелья Primis:
Отключите записи телепортации в меню для primis_blood_temple_sanctum.yml и primis_gladius_invasion_dungeon.yml.
Оставьте опции телепортации включёнными для primis_adventure.yml, поскольку он служит основным хабом, где игроки начинают своё путешествие и получают доступ к остальным подземельям.
Такая настройка обеспечивает игрокам плавный опыт, сохраняя при этом правильную структуру и работоспособность системы подземелий.
При именовании файла мы рекомендуем следующее соглашение:
your_dungeon_name_meta_pack.yml
Рекомендуемые значения для боссов
Создание среднего моба подземелья
Мы рекомендуем оставить настройку normalizedCombat включённой (true). Эта настройка нормализует всех мобов так, чтобы они одинаково масштабировались по здоровью и урону независимо от типа сущности.
Учтите, что для контента подземелий это обычно решается за вас: пока normalizeRegionalBosses равен true в MobCombatSettings.yml (значение по умолчанию), каждый региональный босс и каждый босс инстансового подземелья принудительно переводится на нормализованный бой независимо от того, что написано в файле босса. Поэтому именно множители ниже и имеют значение.
normalizedCombat: true
healthMultiplier: 1.0 #4 hits to slay
damageMultiplier: 1.0 #1.5 hearts of dmg
Разумеется, вот переработанная версия с сохранением ясности и форматирования:
Примечание: поскольку 1.0 — значение по умолчанию для здоровья и урона, вы можете просто не задавать healthMultiplier или damageMultiplier и установить normalizedCombat в true.
Создание групп мусорных мобов
Группы мусорных мобов многочисленны, но не очень опасны:
normalizedCombat: true
healthMultiplier: 0.7 #3 hits to slay
damageMultiplier: 0.5 #0.5 hearts of dmg
Создание подкреплений
Подкрепления должны умирать очень легко, но представлять опасность по урону (эти значения рекомендуются для 4+ сущностей ближнего боя, реальное применение может отличаться):
normalizedCombat: true
healthMultiplier: 0.25 #1 hit to slay
damageMultiplier: 0.6 #1 heart of dmg
Создание мини-боссов
Мини-боссы должны стоять на своём и создавать игрокам механическое испытание. Это должна быть проверка мастерства, длящаяся некоторое время, но не что-то крайне смертоносное:
normalizedCombat: true
healthMultiplier: 3.0 #10 hits to slay
damageMultiplier: 1.2 #2 hearts of dmg
Создание боссов
Боссы — настоящее испытание, кульминация нарастания напряжения в подземелье и подлинная проверка мастерства, когда на кону всё. Схватки должны быть долгими, а смерть — реальной угрозой.
normalizedCombat: true
healthMultiplier: 7.0 #23 hits to slay
damageMultiplier: 1.4 #2.5 hearts of dmg
Эти рекомендуемые значения — лишь приблизительные ориентиры, и итоговые значения следует подбирать под конкретные схватки.
Это особенно важно для финальных боссов подземелий: возможно, вы захотите существенно превысить рекомендованное значение 7.0 для 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 хранит свой стандартный ресурс-пак.
Не редактируйте em_rsp_defaults напрямую: EliteMobs считает контрольную сумму копии в своём jar при каждой загрузке и, если они различаются, стирает и заново экспортирует папку, так что ваши изменения будут потеряны.
После упорядочивания файлов структура каталогов должна выглядеть так:
resource_pack
└── my_cool_dungeon_rsp
└── [resource pack files]
По завершении ваш ресурс-пак подземелья должен успешно импортироваться при установке подземелья.
Обрезка миров
Иногда может понадобиться уменьшить размер вашего мира Minecraft, чтобы сделать его легче и, следовательно, удобнее для распространения. Этого можно добиться с помощью плагина WorldBorder. Несмотря на то что в описании плагина указана поддержка MineCraft только до версии 1.19, он безупречно работает на новейшей версии MineCraft по состоянию на 25 января 2024 года.
Details
Совет
Если вы делаете это впервые, возможно, стоит создать резервную копию мира на случай, если что-то пойдёт не так.После установки плагина переместитесь в середину мира или в ту область, которую хотите обрезать. Затем выполните команду /wb set x, где x — примерный размер радиуса, который вы хотите задать для области.
Details
Совет
Если/wb у вас не работает, попробуйте /worldborder:wb.После выполнения этой команды долетите до краёв мира, чтобы убедиться, что граница мира установлена правильно и охватывает нужный размер. Достижение края границы мира вы узнаете по тому, что вас оттолкнёт назад, а в чате появится сообщение.

На изображении выше мы хотим обрезать мир вокруг фиолетовых блоков, оставив вокруг них лишь несколько чанков. Для этого мы встаём в середине фиолетовой области на красных квадратах и выполняем /wb set 50, устанавливая границу мира сразу за фиолетовой областью.
Далее мы используем команду /wb trim [freq] [pad], задав частоту 200 и отступ 20. Отступ определяет, сколько чанков должно остаться вокруг границы мира (фиолетовой области), а частота — сколько чанков обрабатывается в секунду. После выполнения /wb trim 200 20 нам предложат подтвердить действие командой /wb trim confirm. Мы подтверждаем, и через некоторое время наш мир будет обрезан, что уменьшит его размер и сделает его удобнее для распространения.
Теперь вы можете убрать границу мира командой /wb clear all либо оставить её, если хотите.
Обрезка папки мира
В папке вашего мира есть несколько файлов и папок, от которых можно избавиться, поскольку плагины используют не все из них. Это сократит размер мира и упростит его распространение.
Для окружения мира NORMAL:
Чтобы подготовить мир, сохраните следующие файлы и папки:
- Папка region
- raids.dat из папки data (при копировании убедитесь, что он помещён внутрь папки data)
- Файл level.dat
Все остальные файлы и папки в папке мира можно безопасно удалить. Это правильно подготовит ваш мир для окружения NORMAL.
Для окружений мира NETHER и THE_END:
Чтобы подготовить мир, сохраните следующие файлы и папки:
- Папка region внутри папки DIM-1 (при копировании убедитесь, что она помещена внутрь папки DIM-1)
- raids.dat из папки data (при копировании убедитесь, что он помещён внутрь папки data)
- Файл level.dat
Все остальные файлы и папки в папке мира можно безопасно удалить. Это правильно подготовит ваш мир для окружений NETHER и THE_END.
Выполнение команды упаковки
EliteMobs имеет команду /em package <dungeonName> <version>. Эта команда ищет подпапку с именем dungeonName внутри каждой из перечисленных ниже папок контента и копирует всё найденное в exports/<dungeonName>/, а затем упаковывает это в exports/<dungeonName>_packaged.zip.
Сканируемые папки, по порядку:
custombosses, customevents, npcs, customitems, customquests, customarenas, customspawns, customtreasurechests, wormholes, world_blueprints, powers
Всё, что не удалось найти, выводит уведомление «no subdirectory» и пропускается, что нормально для пакета, который использует не все типы контента.
По этой причине настоятельно рекомендуется хранить контент, который вы хотите упаковать, в папках с тем же именем, что и имя вашего пакета. Иначе вам придётся вручную собирать и укладывать файлы в структуру для распространения.
Учтите, что /em package не собирает content_packages, worldcontainer, models и resource_pack. Эти четыре папки нужно добавить в папку экспорта вручную перед архивацией.
Учтите, что не собирает , , и . Эти четыре папки нужно добавить в папку экспорта вручную перед архивацией.
Добавление файла пакета подземелья
Если вы создаёте подземелье, вам нужно вручную добавить файл пакета подземелья в свежесозданную папку внутри папки exports. Конфигурационный файл вашего пакета подземелья должен соответствовать описанному выше формату и находиться в папке content_packages. Подробнее об этом см. раздел Структура файлов ниже.
По завершении обязательно заархивируйте своё подземелье!
Структура файлов
Если вы всё сделали правильно, структура файлов должна быть похожа на этот пример, где мы назвали подземелье my_cool_dungeon:
Пример структуры файлов my_cool_dungeon
- my_cool_dungeon.zip
- 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
- content_packages
Это позволяет большинству пользователей просто перетащить файлы прямо на сервер и сразу получить работающий результат.
Распознаваемые папки верхнего уровня
Импортёр понимает только фиксированный набор имён верхнего уровня. Для пакета 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 |
wormholes | plugins/EliteMobs/wormholes |
powers | plugins/EliteMobs/powers |
world_blueprints | plugins/EliteMobs/world_blueprints |
resource_pack | plugins/EliteMobs/resource_pack |
worldcontainer | контейнер миров сервера |
models или modelengine | папка моделей FreeMinecraftModels, если FreeMinecraftModels установлен, иначе папка blueprints ModelEngine |
scripts | plugins/FreeMinecraftModels/scripts |
pack.meta | никуда не устанавливается — читается только для идентификации пакета |
Всё остальное на верхнем уровне zip-архива не распознаётся и не будет установлено, поэтому держите посторонние readme-файлы, скриншоты и папки __MACOSX вне корня архива.
schematics — особый случай: его импорт в EliteMobs выводит предупреждение о том, что подземелья на схематиках были удалены в EliteMobs 9.0.
Важно: при упаковке для распространения обязательно СНАЧАЛА УДАЛИТЕ МИНИ-ПОДЗЕМЕЛЬЕ! Вы же не хотите распространять установленные мини-подземелья — вы хотите, чтобы администраторы сами настраивали их на своих серверах!
Как поделиться созданными пакетами подземелий с сообществом
В Discord есть раздел #community_dungeons, где люди могут делиться своими творениями — мини-подземельями. Присоединяйтесь!
