MAATRIX GAMES / Блог / World border: настройка границ игрового мира

World border: настройка границ игрового мира

MAATRIX GAMES

Мир на сервере с процедурной генерацией растёт без остановки: каждый новый чанк, который открывает игрок, — это ещё немного места на диске и ещё немного времени на генерацию при следующем заходе в тот же регион. Через полгода активного исследования папка world может весить в разы больше, чем в первый день, а бэкапы — занимать всё дольше. Worldborder решает это одной командой: жёстко очерчивает зону, за которую игра не даст выйти, и весь мир перестаёт расползаться бесконечно.

Зачем нужна граница мира

Больше всего эта проблема знакома админам Minecraft-серверов — мир там генерируется чанками по мере того, как игроки в них заходят, и файлы регионов (.mca, каждый на 32×32 чанка) копятся в папке world/region без верхнего предела. У новичкового сервера с десятком игроков это не критично, но на популярном выживании, где люди неделями бегают в поисках новых биомов, суммарный вес мира может вырасти до заметных объёмов за пару месяцев — конкретная цифра сильно зависит от стиля игры, так что ориентируйтесь на свой диск, а не на чужие цифры.

Кроме места на диске, граница экономит:

  • Время генерации новых чанков — чем дальше от спавна, тем чаще игрок упирается в ещё не сгенерированный ландшафт, а генерация под нагрузкой на сервере — одна из частых причин просадок TPS, о которых мы отдельно писали в статье про оптимизацию сервера под высокую нагрузку.
  • Время бэкапа и миграции — компактный мир бэкапится быстрее и переносится между хостами без сюрпризов, это заметно на практике при работе с сейв-файлами игрового сервера.
  • Управляемость PvP и ивентов — границу можно сужать вручную для батл-рояль-режимов или финалов ивентов, это отдельный сценарий использования той же механики.

Как устроена граница в Minecraft

Worldborder — встроенная в ванильный Minecraft система, доступная без плагинов и модов через команду /worldborder. У неё есть центр (координаты X, Z), диаметр и несколько параметров поведения у края. Граница действует не только в оверворлде: в Нижнем мире координаты автоматически масштабируются в 8 раз (стандартное соотношение оверворлд/Незер), так что игрок физически не может обойти границу через портал.

Жёсткий верхний предел задаётся отдельно в server.properties параметром max-world-size (по умолчанию 29999984) — это абсолютный потолок, поверх которого /worldborder set уже не сработает, даже если вы укажете диаметр больше. Для обычного сервера этот параметр трогать не нужно, но полезно знать, что он существует, если планируете экстремально большую границу.

Проверить текущее состояние границы можно командой:

/worldborder get

Она вернёт текущий диаметр в блоках — удобно перед тем, как что-то менять, особенно если сервер уже год как работает и никто не помнит исходные настройки.

Нужен игровой сервер?

MAATRIX GAMES — 45+ игр, деплой за минуты, DDoS-защита, автобэкапы. Тарифы от 399 ₽/мес.

Создать сервер

Базовая настройка: центр и радиус

Первый шаг — задать центр. Обычно это точка спавна, но если карта уже сильно разошлась по одну сторону от (0,0), логичнее взять центр масс исследованной территории:

/worldborder center 0 0

Дальше — сам размер. Команда set принимает диаметр (не радиус!) в блоках:

/worldborder set 6000

Это создаст квадрат 6000×6000 блоков с центром в заданной точке — то есть 3000 блоков в каждую сторону от центра. Для ориентира: базовая карта в стиле «на компанию из 10-15 человек, без задачи бесконечно исследовать» обычно укладывается в диаметр 4000-8000 блоков, но это именно ориентир под конкретный стиль игры, а не универсальное правило — кому-то хватит 2000, а строительному сообществу может быть мало и 10000.

Если нужно применить границу мгновенно без всякого урона игрокам, которые уже могут оказаться за её пределами, добавьте это в консоль до анонса, а не после — чтобы у людей было время вернуться (об этом подробнее в разделе про коммуникацию с сообществом ниже).

Плавное сужение и расширение со временем

Резкое схлопывание границы с 20000 до 6000 блоков мгновенно — гарантированный способ убить чей-то дом за одну команду. Вместо set с телепортацией к новому диаметру используйте вариант с временем перехода в секундах:

/worldborder set 6000 604800

Здесь 604800 — это неделя в секундах: граница будет плавно стягиваться к диаметру 6000 в течение семи дней, а не схлопнется мгновенно. Игроки успеют увидеть предупреждение и перебраться внутрь новой зоны.

Расширение работает так же, но через относительное добавление, а не абсолютную установку:

/worldborder add 2000 86400

Граница увеличится на 2000 блоков (по 1000 в каждую сторону от центра) за сутки. Это удобно, если вы вводите границу поэтапно — например, стартуете с небольшого пятна на старте сезона и постепенно открываете карту по мере роста комьюнити, вместо того чтобы сразу давать доступ ко всему разрешённому объёму.

Для батл-рояль-режимов и финальных ивентов та же команда set с коротким временем (минуты, а не дни) даёт классическое сужающееся кольцо — многие мини-игровые режимы на Minecraft-серверах построены именно на этом, без единого плагина.

Что происходит с игроками за пределами границы

За пределами основной зоны есть буфер, где игрока пока не наказывают, но уже предупреждают — экран у края границы окрашивается в характерную красную рябь. Дефолтные значения ванильного клиента:

  • Buffer (запас перед уроном) — 5 блоков за границей, где урон ещё не наносится.
  • Damage amount — 0.2 урона за блок за секунду сверх буфера (то есть чем дальше зашёл, тем быстрее тает здоровье).
  • Warning distance — предупреждение на экране появляется за 5 блоков до границы.
  • Warning time — 15 секунд предупреждения перед тем, как граница дойдёт до игрока при активном сужении.

Настроить эти параметры под себя можно так:

/worldborder damage amount 0.5
/worldborder damage buffer 3
/worldborder warning distance 10
/worldborder warning time 20

Зайти за пределы буфера физически можно — Minecraft не ставит невидимую стену, только наносит урон по нарастающей, так что теоретически с зельями регенерации или креативным иммунитетом к урону игрок может стоять за границей сколько угодно. Если вам нужен именно жёсткий физический барьер без урона (например, для декоративной границы карты в билд-сервере), это уже задача для плагина, а не встроенной команды — на Paper/Spigot для этого исторически используют плагин WorldBorder (Brettflan), у которого гибче настройки на регион и есть команда автозаполнения границы по уже сгенерированным чанкам через /wb fill.

Не только Minecraft: где похожая идея работает иначе

Концепция ограничения игрового мира шире, чем команда /worldborder — но стоит честно сказать, что готовый vanilla-инструмент именно с плавным сужением и предупреждениями есть по сути только в Minecraft. В других играх с процедурной или полупроцедурной генерацией задача решается иначе:

  • Rust — размер карты (server.worldsize) фиксируется один раз при генерации сида и не меняется на лету; чтобы «сжать» мир, придётся сгенерировать карту заново с меньшим значением, а не подвинуть границу у существующей.
  • ARK: Survival / ARK: Survival Ascended — карты в основном имеют фиксированный размер от разработчиков, динамической границы там нет в принципе.
  • Valheim — мир создаётся сразу целиком в пределах фиксированного радиуса (около 10 км от центра), исследование не увеличивает файл мира так драматично, как в Minecraft, потому что карта не дозаписывается новыми чанками бесконечно.

Иначе говоря, если вы администрируете не Minecraft, а что-то из survival-жанра с похожей проблемой роста сохранений, скорее всего решение — не border-команда, а изначально разумный выбор размера мира при создании сервера плюс регулярная чистка неиспользуемых регионов, о которой у нас есть отдельный материал про работу с сейв-файлами игрового сервера.

Как внедрить границу без бунта комьюнити

Вот тут придётся быть честным: жёсткая граница — это всегда фрустрация для части игроков, особенно тех, кто пришёл на сервер именно за ощущением бесконечного мира. Введённая внезапно, она читается как «нас обманули» — даже если технически решение оправдано местом на диске.

Что снижает недовольство на практике:

  1. Объявите заранее. Даже если вы уже всё настроили технически, дайте игрокам минимум несколько дней (а лучше неделю) с анонсом в Discord/чате сервера и, если есть MOTD, — с кастомным приветствием на сервере, где прямо указан будущий диаметр границы.
  2. Объясните причину. «Хотим держать TPS стабильным и не терять прогресс из-за раздутых бэкапов» звучит понятнее, чем молчаливое ограничение без объяснений.
  3. Дайте время вернуться. Используйте set с временем перехода (см. раздел выше) вместо мгновенного схлопывания — у тех, кто ушёл далеко, будет несколько дней, чтобы перенести базу или хотя бы забрать вещи.
  4. Компенсируйте, если строение попадает под снос. Если чья-то честно отстроенная база оказывается за новой границей, разумно предложить бесплатный телепорт с грузом внутрь новой зоны — это дешевле для лояльности, чем формальная правота «мы предупреждали».

Если сервер только запускается и активной базы игроков ещё нет, вводить границу сразу — гораздо проще: тогда это просто часть правил с первого дня, а не изменение уже привычного мира.

Нужен игровой сервер?

MAATRIX GAMES — 45+ игр, деплой за минуты, DDoS-защита, автобэкапы. Тарифы от 399 ₽/мес.

Создать сервер

Частые вопросы

Можно ли сделать границу не квадратной, а круглой?

Встроенный /worldborder даёт только квадрат. Круглая или произвольной формы граница — задача сторонних плагинов уровня WorldGuard с регионами произвольной геометрии, но там это уже не про экономию места на диске, а про контроль доступа к зонам.

Граница действует одинаково в Незере и в Энде?

В Незере координаты масштабируются в 8 раз относительно оверворлда — это происходит автоматически, отдельно настраивать не нужно. В Энде своя собственная система координат острова, и классический прямоугольный worldborder там ведёт себя иначе, чем в оверворлде — если у вас активно используется Энд, стоит проверить поведение на тестовом мире перед продакшеном.

Что будет с уже сгенерированными чанками за новой границей?

Они остаются на диске как есть — worldborder не удаляет файлы регионов и не проводит очистку задним числом, он только запрещает заходить в новые чанки за пределами и наносит урон игрокам, которые там оказались. Чтобы реально освободить место, нужна отдельная утилита обрезки региональных файлов (MCA Selector и подобные), это уже другая задача.

Нужно ли перезапускать сервер после команды /worldborder set?

Нет, все команды применяются мгновенно (или начинают плавный переход, если указано время) без рестарта. Значения сохраняются в level.dat мира автоматически.

Можно ли задать разную границу для разных миров на одном сервере (оверворлд/кастомные измерения через плагины)?

Ванильная команда управляет границей активного измерения по умолчанию (оверворлда). Если у вас несколько загруженных миров через Multiverse или аналог, для каждого мира нужно применять команду отдельно, находясь в контексте этого мира, либо использовать плагин с поддержкой per-world border.