Свой сервер

Конфиг server.properties

Файл, который сервер создаёт сам и который правят вслепую. Тут у каждой строки написано, что случится, если её поменять, — а значения по умолчанию взяты из документации, а не из чужих гайдов.

Основное

Первое, что меняют после установки.

Две строки под названием сервера. Цвет ставится кодами §, а сами коды в файле пишутся как \u00A7 — собрать строку целиком проще в генераторе MOTD.

Больше игроков — больше памяти и больше нагрузка на процессор. Ставить с запасом бессмысленно: слоты не резервируются.

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

Пусто — слушать все адреса машины. Заполняют только на нескольких сетевых картах; ошибка тут делает сервер недоступным снаружи.

true — пускать только лицензионные аккаунты; false — пиратский сервер, и тогда ник ничем не подтверждён: любой может зайти под чужим. Под прокси (BungeeCord, Velocity) ставят false, но закрывают порт снаружи.

Пускать только тех, кто в whitelist.json. Единственная защита от случайных гостей на пиратском сервере.

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

Игровой процесс

Каким сервер будет для игрока.

Режим, в котором появляется новый игрок.

На мирной враждебные мобы не появляются вовсе, а голод не убивает.

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

false — игроки не наносят друг другу урон напрямую. Утопить, поджечь и уронить в пропасть по-прежнему можно.

Каждый вход переводит игрока в режим по умолчанию. Полезно на выживании, где кто-то остался в творческом.

Про полёт в выживании: с false сервер выкидывает за «читы на полёт», и это ломает элитры на плагинах. На сервере с плагинами ставят true.

false — порталы не работают вовсе, а игроки, оставшиеся в аду, останутся там навсегда.

Сколько блоков вокруг точки появления нельзя ломать никому, кроме операторов. 0 — защиты нет; на сервере с плагинами обычно так и делают, а защиту вешают на регион.

Минуты без действий, после которых игрока отключает. 0 — не выгонять; ставят на людных серверах, где слоты кончаются.

Без этого командные блоки в мире стоят, но не срабатывают — и это первая причина «у меня не работает механизм».

4 — полный доступ, включая /stop и /op. Ниже ставят, чтобы помощники не могли выключить сервер.

С каким уровнем прав выполняются функции датапаков. Ниже четвёртого часть команд в них просто не сработает.

Мир

Генерация и границы. После первого запуска большинство этих значений уже не изменить.

Имя папки с миром. Смена имени = новый мир: старый останется на диске нетронутым, и это самый простой способ начать заново.

Пусто — случайное. Действует только при создании мира; на готовый мир не влияет никак.

Тоже только при создании. Плоский мир задаётся вместе с generator-settings.

JSON для плоского мира и одиночного биома. У обычного мира не используется.

Деревни, крепости, храмы. Выключают редко и только на новых мирах.

Граница мира в блоках от центра. Уменьшают, чтобы карта не росла бесконечно вместе с местом на диске.

Через сколько секунд пустой сервер перестаёт считать мир. Экономит процессор на маленьких серверах; 0 — не останавливаться.

Сеть и производительность

Тут живут причины лагов и разрывов соединения.

Главная настройка нагрузки: чанки грузятся квадратом со стороной 2×N+1 на каждого игрока. Снижение с 10 до 6 обычно спасает слабый сервер сильнее всего остального вместе.

На каком расстоянии мир живёт: растут посевы, работают фермы, движутся мобы. Дальше этого игрок видит застывшую картинку.

Пакеты крупнее сжимаются. −1 выключает сжатие вовсе — так делают внутри одной машины под прокси, где канал бесплатный, а процессор дорог.

Насколько далеко клиент видит мобов и предметы, в процентах от обычного. Снижение до 50 заметно разгружает сеть на людном сервере.

Миллисекунды на один тик, после которых сервер считает себя зависшим и падает. −1 отключает сторож; так делают, когда сервер падает на длинной генерации мира.

Сколько пакетов в секунду позволено игроку до отключения. 0 — без лимита.

false ускоряет сохранение мира на медленном диске, но при падении машины теряется больше. На VPS с NVMe разницы почти нет.

Ускоренная работа с сетью на Linux. На Windows значение игнорируется.

Сервер спрашивает у Mojang, совпадает ли страна игрока. Ломает вход тем, кто заходит через VPN, — а таких много.

lz4 быстрее, но файлы крупнее; none — вообще без сжатия. Менять стоит только на слабом процессоре с быстрым диском.

Ресурспак

Пак, который сервер раздаёт при входе.

Прямая ссылка на zip. Сервер раздаёт ровно один пак — если своих паков несколько, их сначала сливают в один.

Хеш файла. Без него клиент качает пак заново при каждом входе, и это первая причина «долгий вход на сервер».

Что написано в окне «сервер предлагает ресурспак». Поддерживает JSON-текст.

Отказавшегося от пака выкинет с сервера. Ставят на сборках, где без пака половина предметов выглядит не тем, чем является.

Удалённое управление

RCON и запросы состояния.

Удалённая консоль. Пароль ходит по сети почти открытым, поэтому порт наружу не открывают никогда.

Без пароля RCON не включится. Не тот пароль, что от панели хостинга, и не тот, что от почты.

Операторы видят в чате, что кто-то делает через удалённую консоль.

Отдаёт список игроков и версию по UDP. Нужен старым мониторингам; современные (в том числе наш) обходятся обычным пингом.

Служебное

Редко трогают, но знать полезно.

false прячет сервер из списков: он останется рабочим, но мониторинги и клиент покажут его недоступным.

В пинге не будет ников. Онлайн числом при этом виден.

Требует от клиента подписи чата. На пиратском сервере это ставят в false, иначе часть клиентов не зайдёт вовсе.

false убирает адреса из логов — иногда нужно, чтобы не хранить лишние персональные данные.

Разрешает другим серверам передавать сюда игроков командой /transfer.

Команды из консоли видны операторам в чате.

Метрики JVM наружу. Нужно единицам и только вместе с настроенным сборщиком.

Защита от бесконечных редстоун-цепочек: длиннее — обновления обрываются, а сервер остаётся жив.

Куда клиент отправит игрока по кнопке «сообщить о проблеме».

Список через запятую. Сюда добавляют встроенные наборы вроде bundle или update_1_21.

Ссылка на внешний сервис фильтрации чата. Пусто — фильтра нет.

Что нужно знать про конфиг

  • Файл читается только при запуске. Правки на живом сервере ничего не меняют до перезапуска — кроме тех, что дублируются командами вроде /difficulty.
  • Половина настроек мира действует только при создании. Зерно, тип мира и настройки генератора на готовый мир не влияют вовсе: чтобы они сработали, нужен новый мир — то есть новое имя папки.
  • Дальность прорисовки — главная настройка нагрузки. Каждый игрок держит в памяти квадрат чанков со стороной 2×N+1: при 10 это 441 чанк на человека, при 6 — 169.
  • Коды § в файле пишутся как §. Сам символ в properties-файле превращается в мусор — escape-запись мы подставляем сами. Собрать описание с цветом целиком проще в генераторе MOTD.
  • Пустое значение — это законное значение. server-ip= означает «слушать все адреса», а не «не задано»; стирать такую строку из файла не нужно.
  • Порядок строк не важен, а вот пробелы вокруг знака равенства — важны: max-players = 20 сервер прочтёт как значение « 20» и не примет.
  • После правок сервер перепишет файл сам. Он добавит недостающие ключи со значениями по умолчанию и уберёт незнакомые — свои комментарии в нём не выживают.

Значения по умолчанию сверены с minecraft.wiki (Server.properties) и относятся к Java Edition. Скрипт запуска для этого же сервера собирает генератор файла запуска.

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

Почему настройки server.properties не применились?

Файл читается только при запуске: правку надо сохранить и перезапустить сервер. Половина настроек мира (сид, генератор, тип мира) вдобавок действует только при создании мира.

Как включить сервер без лицензии?

online-mode=false — тогда сервер не проверяет аккаунты у Mojang. Вместе с ним обязателен белый список: без проверки под чужим ником зайдёт кто угодно.

Какая настройка сильнее всего влияет на нагрузку?

Дальность прорисовки (view-distance). Она задаёт, сколько чанков сервер держит и рассылает на каждого игрока, и растёт квадратом от числа.