Перейти к основному содержимому

Что такое модульные подземелья?

Модульные подземелья — это система подземелий, введённая в 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-конфиг со следующими полями:

ПолеПо умолчаниюОписание
isEnabledtrueВключён ли этот пул спавна
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 блоков (используется в некоторых пакетах контента)

Для создателей модулей:

  1. Проверьте значения moduleSizeXZ и moduleSizeY в конфигурации генератора
  2. Стройте ВСЕ модули для этого генератора в точном соответствии с этими размерами
  3. Несовпадающие размеры приведут к ошибкам соединения

Установка пользовательских размеров: В файле конфигурации генератора модулей:

moduleSizeXZ: 32  # Width and depth
moduleSizeY: 16 # Height

Примечание: Все модули в генераторе должны использовать одинаковые размеры. Вы не можете смешивать модули 16×16×16 и 32×16×32 в одной системе подземелий.


Поля конфигурации генератора модулей

Помимо moduleSizeXZ и moduleSizeY, конфигурация генератора модулей поддерживает следующие поля:

ПолеПо умолчаниюОписание
radius1Радиус подземелья в чанках
edgesfalseГенерируются ли крайние модули
startModuleСписок начальных модулей для генерации
minChunkY0Минимальная вертикальная граница чанка
maxChunkY0Максимальная вертикальная граница чанка
moduleSizeXZ16Ширина и глубина модулей в блоках
moduleSizeY16Высота модулей в блоках
debugfalseВключает режим отладки для устранения проблем генерации
useGradientLevelsfalseВключает градиентное масштабирование уровней для созданных сущностей
spawnPoolSuffixСуффикс, добавляемый к именам пулов спавна для этого генератора
isWorldGenerationfalseИспользуется ли этот генератор для генерации мира
treasureFileФайл конфигурации сокровищ для сундуков в этом подземелье
generateLootInBarrelstrueДолжны ли бочки в модулях заполняться добычей
barrelTreasureFilenametreasure_barrel_food.ymlФайл конфигурации сокровищ, используемый для заполнения бочек в этом подземелье
validWorldsпусто (все миры)Список допустимых имён миров, где может генерироваться подземелье
validWorldEnvironmentsпусто (все окружения)Список допустимых окружений мира (NORMAL, NETHER, THE_END, CUSTOM). Поставляемый генератор dungeoneering явно идёт с [NORMAL, CUSTOM], поэтому «из коробки» подземелья генерируются только в мирах типа обычного мира. См. примечание ниже о том, что происходит при отсутствии ключа.
centerModuleAltitude0Высота центрального модуля

Примечание об отсутствующих ключах: столбец «По умолчанию» выше показывает значение, которое BetterStructures записывает в сгенерированный файл генератора. Если вы пишете файл генератора модулей вручную и полностью опускаете ключ, фактически используемое в этой сессии значение берётся из Java-поля, а не из этого столбца — это 0 для radius, moduleSizeXZ и moduleSizeY и «вообще без ограничений» для validWorlds и validWorldEnvironments. Поэтому отсутствующий validWorldEnvironments не ограничивает генератор мирами NORMAL/CUSTOM; он позволяет подземелью генерироваться в любом окружении. Всегда прописывайте ключи явно, а не полагайтесь на их отсутствие, и, если сомневаетесь, сначала дайте плагину сгенерировать файл за вас.


Поля конфигурации отдельных модулей

Каждый отдельный модуль может определять следующие поля конфигурации:

ПолеПо умолчаниюОписание
isEnabledtrueВключён ли этот модуль
weight100Вес выбора этого модуля при генерации
repetitionPenalty0Штраф при многократном выборе этого модуля
noRepeatfalseПредотвращает повторение этого модуля
enforceVerticalRotationfalseПрименяет ограничения вертикального вращения
enforceHorizontalRotationfalseПрименяет ограничения горизонтального вращения
minY-4Минимальный уровень Y для этого модуля
maxY20Максимальный уровень Y для этого модуля
biomedefaultТребование биома для этого модуля
minecraftBiomenullТребование биома Minecraft для этого модуля
treasureFileФайл конфигурации сокровищ для сундуков в этом модуле
generateLootInBarrelstrueДолжны ли бочки в этом модуле заполняться добычей
barrelTreasureFilenametreasure_barrel_food.ymlФайл конфигурации сокровищ, используемый для заполнения бочек в этом модуле
bordersКарта граничных тегов, определяющая совместимость соединений
cloneConfigКлонирование настроек из другого файла конфигурации модуля
compoundModuleСвязывает этот модуль как часть составного (многочастного) модуля
isAutomaticallyPlacedtrueРазмещается ли модуль автоматически при генерации

Примечание: То, какие грани модуля могут соединяться с соседями, полностью контролируется картой граничных тегов borders. Два модуля соединяются на грани, когда их противоположные граничные теги совпадают.

Примечание о cloneConfig: укажите в нём имя .yml-файла другого модуля, и этот модуль будет читать все клонируемые настройки из того файла вместо своих. Когда цель клонирования успешно разрешается, BetterStructures удаляет ставшие излишними ключи из файла этого модуля на диске — treasureFile, barrelTreasureFilename, generateLootInBarrels, borders, minY, maxY, weight, repetitionPenalty, два переключателя вращения, noRepeat, шесть ключей *IsPassable и isAutomaticallyPlaced. Локальными остаются только isEnabled, biome, minecraftBiome, cloneConfig и compoundModule. Если указанный файл не существует, настройка клонирования игнорируется с предупреждением, и модуль сохраняет собственные значения.

Вы также увидите northIsPassable, southIsPassable, eastIsPassable, westIsPassable, upIsPassable и downIsPassable, записанные в сгенерированных конфигах модулей. По умолчанию они равны true, и ничто в генераторе их не читает — их изменение ни на что не влияет. Используйте borders.


Ручная генерация подземелья с помощью /bs generateModules

/bs generateModules <ModuleGeneratorsConfigFile.yml> запускает генератор модулей по требованию, не дожидаясь, пока он сработает при генерации мира. Автодополнение перечисляет все загруженные файлы генераторов модулей.

Что произойдёт, зависит от настройки генератора isWorldGeneration:

  • isWorldGeneration: true — BetterStructures создаёт совершенно новый мир для подземелья. Мир называется по имени файла генератора с добавлением _0, _1, _2… — берётся первый суффикс, папки для которого ещё не существует, поэтому повторные запуски никогда не перезаписывают предыдущий результат. Это плоский пустотный мир с окружением NORMAL, спавн-чанки не удерживаются в памяти, автосохранение отключено, а игрок, выполнивший команду, переводится в режим наблюдателя.
  • isWorldGeneration: false — генерация происходит в том мире, в котором вы находитесь.

Полоса босса отображает прогресс, пока решётка схлопывается и вставляются модули. Если у генератора нет пригодных записей startModule, команда сообщает, что сначала нужно установить или построить модули, и останавливается.

Команда отклоняется, пока выполняется перезагрузка контента.

Где находятся файлы модулей

Модули помещаются в plugins/BetterStructures/modules, которая сканируется рекурсивно — пакет контента может хранить свои файлы .schem в подпапках, и соответствующие конфиги .yml генерируются рядом с ними.

Имена файлов схематик модулей должны быть уникальными по всему дереву modules. Два файла .schem с одинаковым именем в разных папках делают поиск конфига неоднозначным, и BetterStructures отказывается запускаться, вместо того чтобы выбрать один из них. Включённый конфиг модуля, чей .schem не удаётся прочитать, также считается фатальной ошибкой, поэтому сломанный пакет модулей падает громко, а не тихо генерирует подземелья с дырами.