Своя генерация мира на сервере Minecraft - это в основном датапаки: Terralith для новых биомов, Tectonic для более масштабного рельефа и паки вроде Incendium и Nullscape для Нижнего мира и Энда. Они кладутся в world/datapacks/ до первой генерации мира, используют только ванильные блоки, так что игрокам ничего ставить не нужно, и одинаково работают на Paper, Fabric и vanilla. Всё остальное определяют два факта. Генерация мира выполняется один раз для каждого чанка, поэтому пак, добавленный в существующий мир, влияет только на ландшафт, где ещё никто не был. А нестандартный ландшафт генерировать дороже ванильного, так что на общем CPU предгенерация игровой зоны до запуска обязательна. Ниже разобраны сиды и level-type, установка паков генерации на сервер, генераторы-плагины на Paper и реальная цена в часах и гигабайтах.
Как работает генерация мира и когда она выполняется#
Minecraft генерирует ландшафт, когда чанк понадобился впервые: игрок подошёл к нему, его запросил инструмент предгенерации или что-то ещё заставило его загрузиться. Результат записывается в region-файлы мира и больше никогда не генерируется заново. С этого момента чанк - это данные, а не формула.
Какой ландшафт получит чанк, зависит от трёх входных данных:
- Сид - 64-битное число, которое хранится в
level.dat. - Версия игры, потому что Mojang меняет генератор: 1.18 полностью изменила рельеф, а изменения поменьше приходят с большинством крупных обновлений.
- Данные генерации: встроенные настройки генератора плюс любые датапаки или моды, которые их переопределяют.
Измените любое из трёх - и новые чанки получатся другими, а старые останутся прежними. Так и появляется шов: обрыв там, где ландшафт Terralith встречается с ванильным, или где холмы 1.20 упираются в горы 1.21. Единственный способ избежать швов - определиться со всеми тремя до того, как генерировать что-то, что вы собираетесь сохранить.
Сиды, level-type и generator-settings#
Четыре ключа в server.properties управляют генерацией нового мира. Они действуют только при создании мира; изменение позже ничего не делает с существующим миром.
level-name=worldlevel-seed=level-type=minecraft\:normalgenerate-structures=truegenerator-settings={}| Ключ | По умолчанию | Что делает |
|---|---|---|
level-seed | пусто (случайный) | Сид: число или текст, который хешируется в число |
level-type | minecraft:normal | Пресет мира |
generate-structures | true | Деревни, крепости, храмы и всё остальное |
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:
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 - популярный набор, - но именно в сочетаниях и появляются проблемы. Паки, переопределяющие одни и те же файлы, конфликтуют, и побеждает последний в порядке загрузки. Паки, сделанные для совместной работы, как перечисленные выше, документируют свою совместимость; паки разных авторов - не обязательно. Сгенерируйте тестовый мир локально именно с вашим сочетанием, прежде чем сажать на него сервер.
Установка паков генерации на сервер#
У выделенного сервера нет экрана создания мира, поэтому важен порядок действий:
- Остановите сервер. Если мир уже существует, решите, что с ним будет: бэкап, переименование или удаление.
- Создайте папку мира и папку датапаков в ней до того, как появится мир:
world/datapacks/. - Загрузите туда паки как zip-архивы. У каждого архива
pack.mcmetaдолжен лежать на верхнем уровне. Не распаковывайте их в отдельные файлы. - Укажите `level-seed` и `level-type`, если вам нужно что-то кроме случайного обычного мира.
- Запустите сервер. Он найдёт паки, включит их и сгенерирует с ними новый мир.
- Проверьте лог на ошибки датапаков, затем выполните
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 до того, как этот мир будет сгенерирован:
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,000 | 62,500 | около 61 |
| 5,000 блоков | 10,000 x 10,000 | 390,625 | около 381 |
| 10,000 блоков | 20,000 x 20,000 | 1,562,500 | около 1,526 |
Время зависит от числа чанков в секунду, а оно - от выделения CPU, паков генерации и серверного ПО. При 100 чанках в секунду радиус 5,000 блоков занимает около 65 минут; при 30 чанках в секунду - около трёх с половиной часов. Измерьте свою скорость в первые минуты прогона, а затем просто разделите. Каждое измерение - отдельный прогон, а Нижний мир и Энд обычно меньше.
Расход диска слишком сильно различается, чтобы назвать цифру: он зависит от рельефа, структур и сжатия, - поэтому сначала сгенерируйте небольшой радиус, проверьте размер папки region и масштабируйте. Большой предгенерированный мир может занимать несколько гигабайт, а это важно на тарифе с фиксированным диском. В RE:NODE у тарифов Minecraft от 15 до 100 ГБ диска в зависимости от уровня, а график диска рядом с консолью показывает, как растёт занятое место во время прогона.
Со стороной CPU рассуждать проще. Предгенерация держит сервер на 100% выделенного CPU весь прогон. В RE:NODE это жёсткое ограничение купленной долей, никогда не повод для приостановки, и прогон просто длится столько, сколько позволяет ваша доля. Запускайте его ночью по расписанию, следите за памятью и прочитайте статью граница мира и предгенерация - там команды Chunky и способ поставить прогон на паузу и продолжить.
Смена генерации в существующем мире#
Иногда решение приходит поздно: сервер запустился на ванильном ландшафте, а теперь все хотят Terralith. Варианты от самого чистого к самому грязному:
- Новый мир, а старый сохранить. Начните новый сезон на новом генераторе. Предложите старый мир для скачивания.
- Новый мир рядом со старым. Создайте второй мир с новым ландшафтом и соедините их через Multiverse или прокси. Базы остаются на месте, новые исследования идут на новом ландшафте.
- Перегенерировать непосещённые области. С помощью MCA Selector на копии мира удалите чанки с очень малым временем обитания - те, через которые люди проходили, но не жили, - и дайте новому генератору их заполнить. Швы сдвинутся к краям баз. Это рабочая техника, но кропотливая, и делать её следует на копии.
- Смириться со швом. Задайте границу мира, которая включает старую область и кольцо нового ландшафта, сгенерируйте кольцо заранее, и пусть шов будет особенностью карты.
Обновление пака генерации до новой версии в существующем мире - уменьшенная версия той же проблемы: новая версия может генерировать другой рельеф, и новые чанки могут не стыковаться со старыми. Прочитайте список изменений пака перед обновлением и относитесь к мажорной версии пака генерации как к смене версии игры. Общая дисциплина - в статье обновление версии 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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.