RE:NODE

Minecraft11 мин чтения

Своя генерация мира и сиды в Minecraft

Свой ландшафт на сервере Minecraft: датапаки генерации вроде Terralith и Tectonic, сиды и level-type, генераторы-плагины и во что обходится предгенерация.

0 прочтений

Своя генерация мира на сервере Minecraft - это в основном датапаки: Terralith для новых биомов, Tectonic для более масштабного рельефа и паки вроде Incendium и Nullscape для Нижнего мира и Энда. Они кладутся в world/datapacks/ до первой генерации мира, используют только ванильные блоки, так что игрокам ничего ставить не нужно, и одинаково работают на Paper, Fabric и vanilla. Всё остальное определяют два факта. Генерация мира выполняется один раз для каждого чанка, поэтому пак, добавленный в существующий мир, влияет только на ландшафт, где ещё никто не был. А нестандартный ландшафт генерировать дороже ванильного, так что на общем CPU предгенерация игровой зоны до запуска обязательна. Ниже разобраны сиды и level-type, установка паков генерации на сервер, генераторы-плагины на Paper и реальная цена в часах и гигабайтах.

Как работает генерация мира и когда она выполняется#

Minecraft генерирует ландшафт, когда чанк понадобился впервые: игрок подошёл к нему, его запросил инструмент предгенерации или что-то ещё заставило его загрузиться. Результат записывается в region-файлы мира и больше никогда не генерируется заново. С этого момента чанк - это данные, а не формула.

Какой ландшафт получит чанк, зависит от трёх входных данных:

  1. Сид - 64-битное число, которое хранится в level.dat.
  2. Версия игры, потому что Mojang меняет генератор: 1.18 полностью изменила рельеф, а изменения поменьше приходят с большинством крупных обновлений.
  3. Данные генерации: встроенные настройки генератора плюс любые датапаки или моды, которые их переопределяют.

Измените любое из трёх - и новые чанки получатся другими, а старые останутся прежними. Так и появляется шов: обрыв там, где ландшафт Terralith встречается с ванильным, или где холмы 1.20 упираются в горы 1.21. Единственный способ избежать швов - определиться со всеми тремя до того, как генерировать что-то, что вы собираетесь сохранить.

Сиды, level-type и generator-settings#

Четыре ключа в server.properties управляют генерацией нового мира. Они действуют только при создании мира; изменение позже ничего не делает с существующим миром.

server.properties
level-name=worldlevel-seed=level-type=minecraft\:normalgenerate-structures=truegenerator-settings={}
КлючПо умолчаниюЧто делает
level-seedпусто (случайный)Сид: число или текст, который хешируется в число
level-typeminecraft:normalПресет мира
generate-structurestrueДеревни, крепости, храмы и всё остальное
generator-settings{}Опции в JSON, используются пресетом flat

Двоеточие в level-type экранируется как \:, потому что server.properties - это файл свойств Java; сервер и сам пишет его именно так. Пресеты такие:

  • `minecraft:normal` - стандартный рельеф.
  • `minecraft:large_biomes` - тот же генератор, но биомы в несколько раз больше. Хорошо для больших серверов, где игрокам нужно пространство; некоторые биомы при этом очень трудно найти.
  • `minecraft:amplified` - экстремальный вертикальный рельеф. Зрелищно, медленно генерируется и по нему тяжело ходить.
  • `minecraft:flat` - суперплоский мир, форму которого задаёт generator-settings.
  • `minecraft:single_biome_surface` - один биом везде.

Плоский мир для творческого строительства одной строкой в server.properties:

server.properties
level-type=minecraft\:flatgenerator-settings={"layers":[{"block":"minecraft:bedrock","height":1},{"block":"minecraft:dirt","height":2},{"block":"minecraft:grass_block","height":1}],"biome":"minecraft:plains"}

Для сервера, который проживёт долго, сид стоит выбирать сознательно. Инструмент карт сидов вроде Chunkbase позволяет посмотреть биомы и структуры сида для вашей версии, прежде чем решиться, и выбрать вариант с хорошим спавном и деревней поблизости. Помните о версии: сид, который понравился вам в 1.20, на 1.21 даст другой рельеф везде, где менялся генератор. Когда сервер уже работает, команда seed в консоли выводит текущий.

Текстовые сиды хешируются в число, так что level-seed=autumn-smp вполне допустим. Сид из ванильного мира - лишь отправная точка, если вы добавляете датапаки генерации: тот же сид с Terralith даёт совершенно другую карту.

Датапаки генерации: что они меняют#

Датапак генерации переопределяет или добавляет JSON-файлы в data/<namespace>/worldgen/ - биомы, настройки шума, функции плотности, фичи, структуры, - а иногда и data/minecraft/dimension/, чтобы заменить генератор целого измерения. Поскольку всё это данные, датапаку генерации не нужен ни код, ни клиентский мод, если он использует только ванильные блоки.

Устоявшиеся паки:

ПакЧто меняетПримечания
TerralithБиомы обычного мира: много новых на ванильных блокахСамый распространённый пак генерации
TectonicФорму рельефа обычного мира: горы выше, континенты по-новомуСделан для работы вместе с Terralith
IncendiumНижний мир: новые биомы и структурыОт той же команды, что и Terralith
NullscapeЭнд: переработанные внешние островаТа же команда
StructoryДополнительные структуры во всех измеренияхЛёгкий, та же команда

Большинство из них публикуется и как датапаки, и как моды для Fabric и NeoForge. На Paper или vanilla используйте датапак; на сервере с модами подходит любой вариант, и версию-мод иногда предпочитают, потому что она загружается раньше мира. Некоторые версии сборок-модов зависят от небольшого мода-библиотеки; он указан на странице мода.

Совмещать паки - обычная практика: Terralith, Tectonic, Incendium и Nullscape - популярный набор, - но именно в сочетаниях и появляются проблемы. Паки, переопределяющие одни и те же файлы, конфликтуют, и побеждает последний в порядке загрузки. Паки, сделанные для совместной работы, как перечисленные выше, документируют свою совместимость; паки разных авторов - не обязательно. Сгенерируйте тестовый мир локально именно с вашим сочетанием, прежде чем сажать на него сервер.

Установка паков генерации на сервер#

У выделенного сервера нет экрана создания мира, поэтому важен порядок действий:

  1. Остановите сервер. Если мир уже существует, решите, что с ним будет: бэкап, переименование или удаление.
  2. Создайте папку мира и папку датапаков в ней до того, как появится мир: world/datapacks/.
  3. Загрузите туда паки как zip-архивы. У каждого архива pack.mcmeta должен лежать на верхнем уровне. Не распаковывайте их в отдельные файлы.
  4. Укажите `level-seed` и `level-type`, если вам нужно что-то кроме случайного обычного мира.
  5. Запустите сервер. Он найдёт паки, включит их и сгенерирует с ними новый мир.
  6. Проверьте лог на ошибки датапаков, затем выполните datapack list в консоли, чтобы убедиться, что все паки включены.

Если пак собран для другой версии игры, сервер может выдать предупреждение и загрузить его, а может и вовсе отказаться загружать мир с ошибкой датапака. Паки генерации тесно привязаны к версии игры; всегда скачивайте сборку ровно под ту версию, на которой работаете. pack.mcmeta, pack_format и порядок загрузки подробно разобраны в статье руководство по датапакам.

В RE:NODE серверы Minecraft выдаются с уже сгенерированным миром, поэтому установка паков генерации означает: остановить сервер, удалить или переименовать сгенерированные папки мира в файловом менеджере, создать world/datapacks/, загрузить архивы и запустить снова. На Paper удалите также world_nether и world_the_end, иначе Нижний мир и Энд сохранят ванильный рельеф, а изменится только обычный мир.

Генераторы-плагины на Paper#

Paper также принимает генераторы мира из плагинов, которые умеют то, что не под силу датапакам, например генерировать ландшафт кодом во время работы. Самые известные - Terra, генератор с открытым кодом и настраиваемыми паками, который работает на Paper и Fabric, и Iris, коммерческий генератор с собственной системой паков.

Генератор-плагин привязывается к миру в bukkit.yml до того, как этот мир будет сгенерирован:

bukkit.yml
worlds:  world:    generator: Terra:OVERWORLD

Значение после generator: - имя плагина и ID генератора; документация Terra использует такую форму, а другие плагины описывают собственные ID. Как и с датапаками, генератор влияет только на чанки, сгенерированные после того, как он задан.

Генераторы-плагины меняют переносимость на мощь. Мир, сгенерированный плагином, идентично догенерирует только этот плагин этой версии, так что сервер, построенный на нём, привязан к нему на всё время, пока генерируется новый ландшафт. Они могут быть и дорогими: генерация ландшафта кодом плагина конкурирует с игрой за тот же CPU. Проверьте скорость генерации, прежде чем выбирать.

Для дополнительных миров рядом с основным - ресурсного, творческого, отдельного amplified - Multiverse-Core может создать мир с любым установленным генератором. Об этом, в том числе о цене каждого дополнительного мира, рассказано в статье несколько миров с Multiverse.

Во что обходится предгенерация#

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

Арифметика для квадратной области, сгенерированной через Chunky, где радиус по умолчанию - половина стороны квадрата:

Радиус ChunkyПлощадьЧанковRegion-файлов
2,000 блоков4,000 x 4,00062,500около 61
5,000 блоков10,000 x 10,000390,625около 381
10,000 блоков20,000 x 20,0001,562,500около 1,526

Время зависит от числа чанков в секунду, а оно - от выделения CPU, паков генерации и серверного ПО. При 100 чанках в секунду радиус 5,000 блоков занимает около 65 минут; при 30 чанках в секунду - около трёх с половиной часов. Измерьте свою скорость в первые минуты прогона, а затем просто разделите. Каждое измерение - отдельный прогон, а Нижний мир и Энд обычно меньше.

Расход диска слишком сильно различается, чтобы назвать цифру: он зависит от рельефа, структур и сжатия, - поэтому сначала сгенерируйте небольшой радиус, проверьте размер папки region и масштабируйте. Большой предгенерированный мир может занимать несколько гигабайт, а это важно на тарифе с фиксированным диском. В RE:NODE у тарифов Minecraft от 15 до 100 ГБ диска в зависимости от уровня, а график диска рядом с консолью показывает, как растёт занятое место во время прогона.

Со стороной CPU рассуждать проще. Предгенерация держит сервер на 100% выделенного CPU весь прогон. В RE:NODE это жёсткое ограничение купленной долей, никогда не повод для приостановки, и прогон просто длится столько, сколько позволяет ваша доля. Запускайте его ночью по расписанию, следите за памятью и прочитайте статью граница мира и предгенерация - там команды Chunky и способ поставить прогон на паузу и продолжить.

Смена генерации в существующем мире#

Иногда решение приходит поздно: сервер запустился на ванильном ландшафте, а теперь все хотят Terralith. Варианты от самого чистого к самому грязному:

  1. Новый мир, а старый сохранить. Начните новый сезон на новом генераторе. Предложите старый мир для скачивания.
  2. Новый мир рядом со старым. Создайте второй мир с новым ландшафтом и соедините их через Multiverse или прокси. Базы остаются на месте, новые исследования идут на новом ландшафте.
  3. Перегенерировать непосещённые области. С помощью MCA Selector на копии мира удалите чанки с очень малым временем обитания - те, через которые люди проходили, но не жили, - и дайте новому генератору их заполнить. Швы сдвинутся к краям баз. Это рабочая техника, но кропотливая, и делать её следует на копии.
  4. Смириться со швом. Задайте границу мира, которая включает старую область и кольцо нового ландшафта, сгенерируйте кольцо заранее, и пусть шов будет особенностью карты.

Обновление пака генерации до новой версии в существующем мире - уменьшенная версия той же проблемы: новая версия может генерировать другой рельеф, и новые чанки могут не стыковаться со старыми. Прочитайте список изменений пака перед обновлением и относитесь к мажорной версии пака генерации как к смене версии игры. Общая дисциплина - в статье обновление версии Minecraft.

Разбор проблем#

Мир сгенерировался ванильным. Паков не было в world/datapacks/ при создании мира, или они лежали на одну папку глубже. Остановите сервер, исправьте папку, удалите сгенерированный мир и запустите снова.

Обычный мир изменился, а Нижний мир нет. На Paper Нижний мир и Энд - отдельные папки мира; если они уже существовали, они сохранили ванильный рельеф. Удалите и их перед перегенерацией, предварительно сделав бэкап всего нужного.

Сервер не запускается после добавления пака. Пак для другой версии игры, или два пака конфликтуют. Лог называет пак и обычно файл. Убирайте паки по одному, чтобы найти виновника.

Скачки лагов, когда кто-то исследует мир. Ожидаемо для нестандартного ландшафта. Сгенерируйте мир заранее и задайте границу; скачки прекратятся, когда генерировать станет нечего.

Игроки видят странные названия биомов. У нестандартных биомов свои ID, которые клиент показывает на экране отладки. Всё в порядке.

FAQ#

Нужно ли игрокам ставить Terralith, чтобы зайти?

Нет. Версия Terralith в виде датапака использует только ванильные блоки, поэтому сервер отправляет ландшафт немодифицированным клиентам. То же верно для Tectonic, Incendium, Nullscape и Structory в виде датапаков.

Можно ли добавить Terralith в существующий мир?

Можно, но ландшафт Terralith получат только чанки, сгенерированные после его добавления. Исследованные области останутся прежними, с видимым швом там, где встречаются генераторы. Большинство серверов вместо этого начинают новый мир или добавляют второй.

Как задать сид на сервере Minecraft?

Укажите его в level-seed в server.properties до генерации мира. Это может быть число или текст. Изменение позже не влияет на существующий мир; для нового сида нужно сгенерировать новый мир.

Расходует ли свой ландшафт больше RAM?

Немного больше во время генерации, в основном потому, что генерация загруженнее. Основные затраты - CPU во время генерации и диск после неё. Предгенерация внутри границы превращает и то и другое в одну предсказуемую задачу до запуска.

Можно ли сделать разный ландшафт в разных мирах одного сервера?

Да. На Paper Multiverse-Core может создавать дополнительные миры с генератором-плагином, и у каждого мира свои настройки. На Paper датапаки загружаются только из папки основного мира и действуют на весь сервер, так что установленный Terralith формирует и любой новый обычный мир, который создаёт Multiverse. Решите, какой ландшафт где должен быть, до генерации.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000