RE:NODE

Minecraft11 мин чтения

Multiverse-Core: несколько миров Minecraft

Несколько миров на одном сервере Paper с Multiverse-Core: создание и импорт миров, порталы, отдельные инвентари, настройки и во что обходится каждый мир.

0 прочтений

Multiverse-Core позволяет одному серверу Paper держать сколько угодно миров - мир выживания, плоский творческий мир, ресурсный мир, который сбрасывается раз в месяц, - а игроки перемещаются между ними командой или через портал. Мир создаётся командой /mv create <name> normal, существующая папка импортируется через /mv import <name> normal, а телепортация - /mv tp <name>. Остальное делают три дополнения: Multiverse-Portals для порталов между мирами, Multiverse-NetherPortals, чтобы у каждого мира был свой Нижний мир, и Multiverse-Inventories, чтобы творческие предметы не попадали в выживание. Каждый дополнительный мир делит с сервером единственный главный поток, память и диск, поэтому миры дёшевы, когда пусты и выгружены, и дороги, когда держат чанки загруженными. Для отдельных игровых режимов со своими плагинами и перезапусками обычно лучше подходят отдельные серверы за прокси.

Что Multiverse делает и чего не делает#

Сервер Paper обычно держит ровно три мира: обычный мир из level-name в server.properties, а также world_nether и world_the_end. Bukkit всегда умел загружать дополнительные миры во время работы, но у него нет команд и конфигурации для управления ими. Multiverse-Core и есть этот слой управления. Он:

  • создаёт новые миры и импортирует существующие папки миров
  • запоминает, какие миры существуют, и загружает их при запуске
  • хранит настройки для каждого мира: режим игры, сложность, PvP, спавн мобов, точку спавна и многое другое
  • предоставляет команды телепортации и синтаксис точек назначения, общий для его дополнений

Независимыми серверами миры он не делает. Каждый мир работает внутри одного процесса, тикает по очереди в одном главном потоке, с теми же плагинами, тем же списком игроков и тем же чатом. Лаг-машина в творческом мире замедляет и мир выживания. Это центральный компромисс, и он возвращается в каждом разделе ниже.

Multiverse - плагин, поэтому ему нужен Paper или другой сервер, совместимый с Bukkit. На Fabric, NeoForge и vanilla он не работает, и Folia он не поддерживает. Положите jar-файл в plugins/, перезапустите сервер, и он создаст свою папку с worlds.yml, где перечислены все управляемые им миры.

Создание, импорт и удаление миров#

Команды, которыми вы будете пользоваться чаще всего:

code
/mv create creative normal/mv create mining normal/mv create void_lobby normal/mv import oldsurvival normal/mv list/mv info creative/mv tp creative/mv unload mining/mv load mining/mv remove oldsurvival/mv delete mining/mv confirm

Второй аргумент - окружение: normal, nether или the_end. Оно определяет тип измерения - небо, освещение, поведение кроватей и якорей возрождения, - а не только ландшафт.

Необязательные флаги задают сид, тип мира и генератор. В Multiverse-Core 4 они выглядят так:

code
/mv create flatland normal -t FLAT/mv create seeded normal -s 8675309/mv create custom normal -g Terra:OVERWORLD

Версия 5 принимает ту же информацию с переработанными флагами; точную форму показывает /mv help create. Генератору из плагина вроде Terra нужно, чтобы этот плагин был установлен заранее. Генераторы и сиды подробнее разобраны в статье своя генерация мира.

Импорт - способ подключить мир, сделанный кем-то другим: приключенческую карту, старый сезон, мир из одиночной игры. Загрузите папку в корень сервера рядом с world, затем выполните /mv import <foldername> normal. Если мир из vanilla или одиночной игры, его Нижний мир и Энд лежат внутри как DIM-1 и DIM1; Paper не будет использовать их как отдельные миры, поэтому, если они нужны, импортируйте их отдельно или сначала перенесите в собственные папки. Разница в структуре папок объясняется в статье Paper, Fabric или vanilla.

Удаление бывает двух степеней. /mv remove прекращает управление миром через Multiverse, но оставляет файлы на диске. /mv delete удаляет папку после /mv confirm. Отменить это нельзя, так что сначала снимите бэкап.

Выгрузка оставляет мир зарегистрированным, но убирает его из памяти. Выгруженный мир не стоит ничего, кроме места на диске, поэтому это правильное состояние для старого сезона, который вы хотите сохранить.

Настройки каждого мира#

У каждого мира свои настройки в worlds.yml от Multiverse: режим игры, сложность, включён ли PvP, спавнятся ли животные и монстры, точка спавна, скрыт ли мир из /mv list, псевдоним для отображения и место, где игроки возрождаются после смерти в этом мире.

Меняйте их командами, а не правкой worlds.yml на работающем сервере. В версии 4 форма такая: /mv modify set <property> <value> <world>:

code
/mv modify set gamemode creative creative/mv modify set pvp false creative/mv modify set difficulty peaceful creative/mv modify set monsters false creative

Версия 5 располагает аргументы иначе; опять же, источник истины - /mv help modify. Точка спавна мира задаётся так: встаньте туда, где она должна быть, и выполните /mv setspawn.

Настройки вне Multiverse тоже задаются для каждого мира, и именно отсюда берётся большая часть путаницы:

  • Игровые правила. Ванильная /gamerule применяется к миру, в котором стоит отправитель. Из консоли - к основному миру. У Multiverse есть собственная команда игровых правил, принимающая имя мира, - это надёжный способ задать правила миру, в котором никого нет.
  • Настройки Paper. Paper читает config/paper-world-defaults.yml для каждого мира, а затем paper-world.yml внутри папки каждого мира для переопределений. Дальность прорисовки или лимиты сущностей творческого мира задавайте там.
  • Настройки Spigot. В spigot.yml есть раздел world-settings с записью default и необязательными записями с именами миров.
  • server.properties применяется только к основному миру. level-seed, level-type и generate-structures ничего не значат для миров, созданных Multiverse; каждый получает свои опции при создании.
  • Датапаки загружаются из папки datapacks/ основного мира и действуют на весь сервер.

Порталы и связи с Нижним миром#

Игрокам нужен путь между мирами, который не требует команд. С этим справляются дополнения.

Multiverse-Portals создаёт порталы любой формы. Выделите область жезлом порталов (или выделением WorldEdit, если WorldEdit установлен), затем создайте портал с точкой назначения:

code
/mvp wand/mvp create to_creative w:creative/mvp create to_hub w:world

Точки назначения используют синтаксис с префиксами, общий для дополнений Multiverse: w:<world> для спавна мира, p:<portal> для другого портала и e:<world>:<x>,<y>,<z> для точных координат. Пара порталов, указывающих друг на друга через p:, даёт двустороннюю связь между конкретными местами - так строится большинство миров-хабов.

Multiverse-NetherPortals решает, куда ведут порталы в Нижний мир и Энд. По умолчанию он следует соглашению об именах: у мира с именем survival2 порталы в Нижний мир ведут в survival2_nether, а порталы в Энд - в survival2_the_end, если такие миры существуют. Создайте их с соответствующим окружением:

code
/mv create survival2 normal/mv create survival2_nether nether/mv create survival2_the_end the_end

Всё, что не следует шаблону имён, связывайте явно через /mvnp link nether <from> <to> и /mvnp link end <from> <to>. Без NetherPortals каждый портал в Нижний мир на сервере ведёт в основной world_nether - классический сюрприз на сервере с двумя мирами выживания.

С Эндом есть дополнительная тонкость: битва с драконом и портал выхода принадлежат самому миру Энда, так что второй Энд - это второй дракон. Для второго мира выживания обычно это и нужно, а для ресурсного мира - нет.

Отдельные инвентари для миров#

Без Multiverse-Inventories инвентарь игрока следует за ним повсюду. Перешёл из творческого мира в выживание - и принёс стак маяков. Дополнение решает это группировкой миров: миры в одной группе делят инвентари, миры в разных группах - нет.

Типичная схема:

ГруппаМирыОбщее
survivalworld, world_nether, world_the_endВсё
creativecreativeВсё, отдельно от выживания
resourcesmining, mining_netherОбщее с выживанием, если добытое должно попадать домой

Что именно делит группа, настраивается - инвентарь, эндер-сундук, здоровье, голод, опыт, эффекты зелий, точка возрождения у кровати и другое, - так что можно, например, делить опыт везде, а инвентари держать раздельно. Группы задаются в groups.yml плагина или его командами; документация плагина перечисляет названия общих параметров для вашей версии.

Два совета. Настройте группы до того, как игроки начнут ходить между мирами: разделить общий инвентарь позже - значит решать, какая копия победит. И проверьте границу намеренно: положите предмет в инвентарь, пройдите через каждый портал и посмотрите, где он окажется. Пробел в конфигурации - именно так сервер узнаёт, что творческие предметы могут попасть в выживание через Энд.

Во что обходится каждый дополнительный мир#

Цена мира зависит от того, какая его часть загружена, а не от размера на диске.

Тики. Каждый загруженный мир тикает один раз за серверный тик, по очереди, в главном потоке. Мир без игроков и загруженных чанков почти не занимает времени. Мир с загруженными чанками - потому что там игроки, потому что чанки спавна держатся загруженными или потому что ферма или чанклоадер держит их загруженными - тикает, как любая другая область, и его время тика прибавляется ко всему остальному. Десять активных миров на одном сервере - это один главный поток, выполняющий работу десяти миров. Общая картина - в статье почему падает TPS и что делать.

Чанки спавна. Исторически каждый мир постоянно держал загруженным блок чанков вокруг своего спавна. Начиная с Minecraft 1.20.5 эта область задаётся игровым правилом spawnChunkRadius, по умолчанию 2; если поставить 0 в мирах, которым это не нужно, пустой мир не будет держать загруженным ничего. В старых версиях у Multiverse есть настройка мира, отключающая хранение спавна в памяти. Для сервера с несколькими мирами это самая эффективная настройка.

code
/mv tp mining/gamerule spawnChunkRadius 0

Выполняйте это, стоя в мире, который хотите изменить, как выше, или используйте собственную команду игровых правил Multiverse, которая принимает имя мира и работает из консоли.

Память. Каждый загруженный мир хранит свои загруженные чанки, сущности и данные освещения. Пустые миры без загруженных чанков занимают мало; миры с игроками добавляют память пропорционально дальности прорисовки и активности. Следите за графиком памяти после добавления миров, а общие размеры смотрите в статье сколько RAM нужно серверу Minecraft.

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

Автосохранение. Каждый мир сохраняет свои изменённые чанки. Много активных миров - больше работы по записи во время автосохранений, и на большом сервере это проявляется как периодическое подтормаживание.

Ресурсный мир со сбросом#

Частая причина поставить Multiverse - шахтёрский мир, который сбрасывается по расписанию, чтобы основной мир оставался нетронутым. Схема:

  1. Создайте его: /mv create resources normal. Поставьте spawnChunkRadius в 0 и задайте границу мира, чтобы у исследований был предел.
  2. Соедините его с хабом порталом Multiverse-Portals и решите в Multiverse-Inventories, попадают ли предметы домой.
  3. Чтобы сбросить мир, удалите и создайте его заново, когда внутри никого нет, или используйте команду регенерации Multiverse, если она есть в вашей версии. Объявляйте о сбросе заранее: любой, кто стоит в мире в момент удаления, переносится на спавн основного мира.
  4. Когда новый мир появился, сгенерируйте его заранее внутри границы, чтобы первый час после сброса не превратился в скачок лагов. Команды Chunky - в статье граница мира и предгенерация.

Проведите сброс вручную несколько раз и запишите точную последовательность команд для своей версии Multiverse, включая шаг подтверждения. Затем автоматизируйте. В RE:NODE вкладка Schedules выполняет упорядоченные консольные команды с задержками по cron-выражению - объявление, ожидание, команды сброса, запуск предгенерации, - так что сброс первого числа каждого месяца может пройти без единого человека онлайн. Поставьте в то же расписание бэкап перед сбросом.

Multiverse или прокси-сеть#

Multiverse помещает несколько миров в один сервер. Прокси вроде Velocity помещает несколько серверов за один адрес. Они решают пересекающиеся задачи с разными компромиссами:

Миры MultiverseСерверы за прокси
Главный потокОбщий для всех мировСвой у каждого сервера
ПлагиныОдин набор вездеСвой набор на каждом сервере
ПерезапускиВсё перезапускается вместеКаждый сервер перезапускается отдельно
Чат и список игроковОбщие автоматическиНужен плагин-мост
ИнвентариОбщие, если не разделитьРаздельные, если не синхронизировать
СтоимостьОдин тарифТариф или выделение на каждый сервер

Используйте Multiverse для миров, которые относятся к одной игре: мир выживания с ресурсным миром, творческий мир с участками, хаб на спавне. Используйте прокси, когда «миры» на самом деле разные игры: мини-игровой сервер, сервер с модами, ивент-мир, полный плагинов, которые вы не хотели бы запускать рядом с выживанием. Сторона прокси разобрана в статье сеть на Velocity.

FAQ#

Работает ли Multiverse-Core на Fabric или NeoForge?

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

Почему порталы в Нижний мир во втором мире ведут в основной Нижний мир?

Без Multiverse-NetherPortals каждый портал в Нижний мир ведёт в world_nether. Установите NetherPortals и либо назовите миры по его соглашению (name_nether, name_the_end), либо свяжите их явно через /mvnp link.

Создают ли пустые миры лаги?

Очень мало, если у них нет загруженных чанков. Мир держит загруженными чанки вокруг спавна, если это не отключить; на 1.20.5 и новее поставьте игровое правило spawnChunkRadius в 0 в мирах, которым это не нужно, и выгружайте миры, которыми никто не пользуется.

Как не пустить творческие предметы в выживание?

Установите Multiverse-Inventories и поместите творческий мир в отдельную группу, не связанную с мирами выживания. Затем проверьте каждый путь между ними - порталы, команды, Энд - с предметом в инвентаре.

Можно ли импортировать мир из одиночной игры через Multiverse?

Да. Загрузите папку мира в корень сервера и выполните /mv import <foldername> normal. Его Нижний мир и Энд хранятся внутри папки в ванильной структуре, так что, если они нужны на Paper, импортируйте их отдельно.


Комментарии

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

0/2000