Что такое модульные подземелья?
Модульные подземелья — это система подземелий, введённая в BetterStructures 2.0.0 и позднее. Вместо размещения одного фиксированного схематика модульные подземелья динамически собираются из небольших, вручную созданных модулей. Этот подход позволяет создавать большие, многоэтажные подземелья, которые ощущаются уникальными в каждом мире, при этом органично вписываясь в ванильный Minecraft.
Как генерируются модульные подземелья
-
Модули Каждый модуль обычно строится с настраиваемым размером (по умолчанию 16x16x16 блоков, хотя некоторые пакеты контента используют 32x16x32 или другие размеры). Модули спроектированы со стандартизированными точками соединения, использующими систему граничных тегов, чтобы они могли стыковаться с другими модулями без зазоров или наложений. Размеры подземелья задаются параметрами конфигурации
moduleSizeXZиmoduleSizeYв конфигурации генератора модулей. Модули могут содержать коридоры, комнаты, лестницы или специальные помещения для встреч. -
Процесс генерации Когда модульное подземелье генерируется в новом чанке, BetterStructures использует алгоритм Wave Function Collapse (WFC) для процедурной сборки модулей из доступного пула. Система случайно выбирает совместимые модули на основе сопоставления граничных тегов и «сшивает» их вместе в целое подземелье. Время генерации зависит от производительности сервера, размера подземелья (радиуса), вертикального диапазона, количества модулей и сложности ограничений. Система использует распределение нагрузки для предотвращения лагов сервера во время генерации.
-
Размер подземелья Подземелья могут быть настроены на различные размеры с помощью параметра радиуса. Большие значения радиуса создают значительно более крупные подземелья, которые могут растягиваться на сотни блоков. Большинство подземелий включают несколько этажей, связанных через лестничные модули или вертикальные шахты. Вертикальные соединения между этажами достигаются через записи
up/downв карте граничных теговbordersмодуля: верхняя грань модуля соединяется с соседом над ним, когда их противоположные граничные теги совпадают.
Разнообразие и интеграция пакетов
-
Free Pack Dungeoneering Modules Free Pack включает 15 модулей. Он функционирует как полноценное играбельное подземелье сам по себе.
-
Premium Pack Dungeoneering Modules Premium Pack добавляет 38 дополнительных модулей. В сочетании с Free Pack оба набора переплетаются в единую систему подземелий с гораздо большим пулом модулей. Это уменьшает повторения и увеличивает разнообразие сгенерированных планировок.
-
Интеграция пропсов Если вы также установите BetterStructures Prop Pack (через FreeMinecraftModels), модульные подземелья будут отображать пользовательские пропсы-модели по всей постройке, как показано на наших скриншотах. Без пакета пропсов подземелья будут работать нормально, но без декоративных моделей.
Интеграция EliteMobs
Хотя большая часть подземелья использует только BetterStructures и ванильных мобов Minecraft, некоторые подземелья содержат встречи с боссами:
- Если установлены EliteMobs и FreeMinecraftModels → полный бой с пользовательским боссом с моделью.
- Если установлен только FreeMinecraftModels → модель босса появляется как декоративный пропс.
- Если ничего не установлено → комната босса будет просто пустой.
Система использует систему спавна на основе знаков со специальными тегами для размещения сущностей и контейнеров в назначенных областях. Уровни боссов масштабируются на основе расстояния от центра подземелья, обеспечивая соответствующий вызов по всей структуре.
Типы знаков модулей
| Тег знака | Строка 1 | Дополнительные строки | Описание |
|---|---|---|---|
[spawn] | [spawn] | Тип сущности на строке 2 | Создаёт ванильную сущность на месте знака |
[pool: poolname] | [pool: poolname] | — | Создаёт случайного босса из именованного пула спавна |
[chest] | [chest] | — | Размещает сундук на месте знака |
[trapped_chest] | [trapped_chest] | — | Размещает сундук-ловушку на месте знака |
[barrel] | [barrel] | — | Размещает бочку на месте знака |
[exit] | [exit] | Имена файлов схематиков лифта на строках 2-3 | Отмечает точку выхода со схематиками лифта вверх/вниз |
Если EliteMobs не установлен, но пакет контента его требует, администраторы получат предупреждающее сообщение.
Такой дизайн сохраняет совместимость модульных подземелий с ванильными конфигурациями, предлагая при этом более глубокую интеграцию для пользователей с дополнительными плагинами.
Пулы спавна
Таблички [pool: poolname] читают из файлов конфигурации пулов спавна в папке spawn_pools/. Каждый файл пула спавна — это небольшой YAML-конфиг со следующими полями:
| Поле | По умолчанию | Описание |
|---|---|---|
isEnabled | true | Включён ли этот пул спавна |
poolStrings | [] | Список имён файлов боссов EliteMobs, подходящих для этого пула |
minLevel | -1 | Минимальный уровень для инстансных боссов, спавнящихся из этого пула (-1 = не указано) |
maxLevel | -1 | Максимальный уровень для инстансных боссов, спавнящихся из этого пула (-1 = не указано) |
Когда обрабатывается табличка [pool: poolname], BetterStructures ищет файл poolname.yml (при необходимости с добавленным spawnPoolSuffix генератора) и выбирает случайного босса из poolStrings пула. Для инстансных боссов уровень спавна масштабируется между minLevel и maxLevel в зависимости от расстояния босса от центра подземелья.
Интеграция MythicMobs
BetterStructures также поддерживает интеграцию с MythicMobs для пользовательских встреч с мобами в модульных подземельях.
Когда MythicMobs установлен, пакеты структур могут создавать пользовательских мобов MythicMobs как часть генерации подземелья. Это позволяет создавать более сложные встречи с мобами и бои с боссами помимо того, что предоставляют ванильный Minecraft или EliteMobs.
Если MythicMobs не установлен, плагин уведомит администраторов с соответствующими разрешениями и предоставит ссылку для скачивания.
Интеграция FMM
Модульные подземелья также могут использовать пропсы FreeMinecraftModels (FMM) при создании.
- Если FMM установлен, любые пропсы, размещённые создателем или строителем модуля, будут отображаться в сгенерированном подземелье.
- Пропсы чисто декоративные и не влияют на геймплей, но они улучшают визуальную точность и погружение в окружение.
- Если FMM не установлен, подземелье будет генерироваться нормально, но эти пользовательские пропсы не будут отображаться.
Это гарантирует, что создатели могут проектировать подземелья с дополнительными деталями, сохраняя совместимость для игроков без FMM.
Размеры модулей
Важно: Размер модуля настраиваемый, не фиксированный.
Каждый генератор модулей определяет стандартный размер модуля через:
moduleSizeXZ: Ширина и глубина в блоках (по умолчанию: 16)moduleSizeY: Высота в блоках (по умолчанию: 16)
Размер по умолчанию: 16×16×16 блоков Распространённая альтернатива: 32×16×32 блоков (используется в некоторых пакетах контента)
Для создателей модулей:
- Проверьте значения
moduleSizeXZиmoduleSizeYв конфигурации генератора - Стройте ВСЕ модули для этого генератора в точном соответствии с этими размерами
- Несовпадающие размеры приведут к ошибкам соединения
Установка пользовательских размеров: В файле конфигурации генератора модулей:
moduleSizeXZ: 32 # Width and depth
moduleSizeY: 16 # Height
Примечание: Все модули в генераторе должны использовать одинаковые размеры. Вы не можете смешивать модули 16×16×16 и 32×16×32 в одной системе подземелий.
Поля конфигурации генератора модулей
Помимо moduleSizeXZ и moduleSizeY, конфигурация генератора модулей поддерживает следующие поля:
| Поле | По умолчанию | Описание |
|---|---|---|
radius | 1 | Радиус подземелья в чанках |
edges | false | Генерируются ли крайние модули |
startModule | — | Список начальных модулей для генерации |
minChunkY | 0 | Минимальная вертикальная граница чанка |
maxChunkY | 0 | Максимальная вертикальная граница чанка |
moduleSizeXZ | 16 | Ширина и глубина модулей в блоках |
moduleSizeY | 16 | Высота модулей в блоках |
debug | false | Включает режим отладки для устранения проблем генерации |
useGradientLevels | false | Включает градиентное масштабирование уровней для созданных сущностей |
spawnPoolSuffix | — | Суффикс, добавляемый к именам пулов спавна для этого генератора |
isWorldGeneration | false | Используется ли этот генератор для генерации мира |
treasureFile | — | Файл конфигурации сокровищ для сундуков в этом подземелье |
generateLootInBarrels | true | Должны ли бочки в модулях заполняться добычей |
barrelTreasureFilename | treasure_barrel_food.yml | Файл конфигурации сокровищ, используемый для заполнения бочек в этом подземелье |
validWorlds | — | Список допустимых имён миров для генерации подземелья |
validWorldEnvironments | — | Список допустимых окружений мира |
centerModuleAltitude | 0 | Высота центрального модуля |
Поля конфигурации отдельных модулей
Каждый отдельный модуль может определять следующие поля конфигурации:
| Поле | По умолчанию | Описание |
|---|---|---|
isEnabled | true | Включён ли этот модуль |
weight | 100 | Вес выбора этого модуля при генерации |
repetitionPenalty | 0 | Штраф при многократном выборе этого модуля |
noRepeat | false | Предотвращает повторение этого модуля |
enforceVerticalRotation | false | Применяет ограничения вертикального вращения |
enforceHorizontalRotation | false | Применяет ограничения горизонтального вращения |
minY | -4 | Минимальный уровень Y для этого модуля |
maxY | 20 | Максимальный уровень Y для этого модуля |
biome | default | Требование биома для этого модуля |
minecraftBiome | null | Требование биома Minecraft для этого модуля |
treasureFile | — | Файл конфигурации сокровищ для сундуков в этом модуле |
generateLootInBarrels | true | Должны ли бочки в этом модуле заполняться добычей |
barrelTreasureFilename | treasure_barrel_food.yml | Файл конфигурации сокровищ, используемый для заполнения бочек в этом модуле |
borders | — | Карта граничных тегов, определяющая совместимость соединений |
cloneConfig | — | Клонирование настроек из другого файла конфигурации модуля |
compoundModule | — | Связывает этот модуль как часть составного (многочастного) модуля |
isAutomaticallyPlaced | true | Размещается ли модуль автоматически при генерации |
Примечание: То, какие грани модуля могут соединяться с соседями, полностью контролируется картой граничных тегов borders, а не каким-либо переключателем «проходимости» для каждой грани. Два модуля соединяются на грани, когда их противоположные граничные теги совпадают.