RE:NODE

Minecraft14 мин чтения

Minecraft server.properties: все ключи и значения по умолчанию

Все ключи файла server.properties в Minecraft, их значения по умолчанию и то, что стоит указать на деле: view distance, сложность, whitelist, MOTD, RCON и query.

0 прочтений

server.properties - это вся конфигурация ванильного сервера Minecraft и первый слой конфигурации Paper. Это плоский список примерно из шестидесяти пяти пар «ключ - значение»: сервер записывает его при первом запуске, читает один раз при старте и больше не трогает. Большинство ключей вам не понадобятся никогда. Около десятка определяют, каково на сервере играть, а три-четыре решают, переживёт ли он встречу с чужими людьми.

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

Как работает файл и как его безопасно править#

Это файл свойств Java. Значит, одна пара key=value на строку, без кавычек вокруг значений, без пробелов вокруг = и с # для комментариев. Из этого вытекают два неприятных следствия:

  • Двоеточие внутри значения нужно экранировать обратной косой чертой, поэтому тип уровня по умолчанию записан как level-type=minecraft\:normal, а не minecraft:normal. Если вставить форму без экранирования, на некоторых версиях вы молча получите мир по умолчанию.
  • Обратную косую черту в пути в стиле Windows нужно удваивать.

Файл читается ровно один раз, при запуске сервера. Правка во время работы сервера ничего не меняет, а /reload файл не перечитывает - /reload перезагружает только конфигурацию плагинов и ничего больше. Измените файл, затем перезапустите сервер. Бывает и наоборот: несколько команд пишут в файл сами, так что /whitelist on выставляет на диске white-list=true. Если вы правите файл при работающем сервере, эта запись может затереть ваше изменение, поэтому сначала остановите сервер.

server.properties
#Minecraft server propertiesmotd=§6The Longhouse §8| §fsurvival 1.21max-players=24difficulty=normalview-distance=8simulation-distance=6spawn-protection=0white-list=trueenforce-whitelist=true

§ - это знак параграфа, с которого в Minecraft начинаются старые цветовые коды. Обычно работает и сам символ §, вписанный буквально, но экранированная запись переживёт любой редактор и любую кодировку, так что используйте её. В MOTD доступны только старые шестнадцать цветов: ни hex-цвета, ни JSON в этом поле нет. Значок сервера вообще не свойство: это PNG размером 64 на 64 с именем server-icon.png в корне сервера. Подробно о форматировании - в статье MOTD, значок и resource pack.

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

Ключи, от которых зависит, каково играть#

Если вы отредактируете всего восемь строк, пусть это будут эти.

КлючПо умолчаниюЧем заменить
motdA Minecraft ServerЧто-нибудь, по чему сервер узнают в списке
max-players20Сколько потянут ваши память и CPU
difficultyeasynormal для сервера выживания, hard, если вы серьёзно
gamemodesurvivalОбычно не трогают
pvptruefalse на строительном или семейном сервере
view-distance108 для большинства серверов, 6 при большой нагрузке
simulation-distance106, иногда 5
spawn-protection160, если спавн не является общественной постройкой

difficulty принимает peaceful, easy, normal или hard по названию в версиях 1.14 и новее; старые версии использовали числа от 0 до 3. Значение применяется из этого файла при каждом запуске, поэтому команда /difficulty меняет его только до следующего перезапуска. peaceful не просто прекращает спавн враждебных мобов: он убирает уже появившихся и не даёт голоду убивать игрока, а это куда более серьёзная перемена, чем большинство подразумевает.

spawn-protection - это квадрат, а не круг: значение задаёт радиус в блоках, так что 16 защищает область 33 на 33 вокруг спавна мира от строительства всеми, кто не оператор. Защита включена по умолчанию и сбивает с толку тех, у кого не получается поставить первый дом. На частном сервере выставьте 0. К тому же она вообще не действует, пока нет хотя бы одного оператора, и поэтому кажется, что она включается сама в тот день, когда вы назначаете оператором себя.

allow-flight=false вопреки названию не имеет отношения к античиту. Он определяет, выгонит ли сервер игрока, который дольше примерно пяти секунд находится в воздухе без распознанной причины. Любому плагину, дающему полёт, и любому серверу, где много летают на элитрах, нужно значение true, и читерам оно не помогает, потому что настоящие летающие читы этой проверкой и так не ловятся.

player-idle-timeout=0 - это число минут, через которое бездействующего игрока выгоняют, а 0 означает «никогда». На загруженном сервере с малым числом слотов значение 20 освобождает места. Отсчёт идёт от последнего действия игрока, а не от последнего движения.

Генерация мира и сам мир#

КлючПо умолчаниюЧто делает
level-nameworldПапка, в которой лежит мир
level-seedпустоSeed для мира, которого ещё нет
level-typeminecraft\:normalПресет генератора
generator-settings{}JSON для плоских миров и миров из одного биома
generate-structurestrueДеревни, крепости, вся сгенерированная архитектура
max-world-size29999984Предел радиуса границы мира, в блоках
allow-nethertruefalse полностью закрывает Незер
hardcorefalseСложность зафиксирована на hard, смерть переводит в наблюдатели
initial-enabled-packsvanillaData pack, включённые в новом мире
initial-disabled-packsпустоData pack, выключенные в новом мире

level-name - это переключатель, который часто упускают. Укажите папку, которой не существует, и при следующем запуске сервер создаст там новый мир, оставив старый нетронутым на диске. Так начинают новый сезон, ничего не удаляя, и так же случайно «теряют» мир, опечатавшись в названии. Верните прежнее значение, и исходный мир вернётся.

level-seed действует только в момент создания мира. Когда level.dat уже существует, seed в нём зафиксирован, и правка этой строки не даёт вообще ничего. level-type принимает minecraft:normal, minecraft:flat, minecraft:large_biomes, minecraft:amplified и minecraft:single_biome_surface начиная с 1.19; до появления пространств имён это были простые слова default, flat, largebiomes, amplified. Не забывайте про экранированное двоеточие.

generate-structures=false стоит знать ради одного случая: сервер, где нужны пещеры, руды и биомы, но не нужны деревни, храмы и крепости, которые можно грабить. Комната с порталом в Энд при этом не исчезает в том смысле, который важен: без крепостей до Энда не добраться без плагина или портала, построенного вручную, так что выключайте это осознанно.

initial-enabled-packs и initial-disabled-packs действуют только при создании мира. Data pack, добавленные позже, кладутся в world/datapacks/ и управляются командой /datapack - см. руководство по data pack.

Игровых правил в этом файле нет. keepInventory, doFireTick, randomTickSpeed, mobGriefing и остальные хранятся в level.dat и задаются командой /gamerule, а значит, переживают перезапуск сами по себе и здесь их не выставить. В шпаргалке по серверным командам перечислены те, что стоит менять.

Ключи производительности и какие из них действительно важны#

КлючПо умолчаниюПримечания
view-distance10Сколько чанков отправляется каждому игроку. Самый мощный рычаг
simulation-distance10Сколько чанков вокруг игрока обновляется по тикам. С версии 1.18
entity-broadcast-range-percentage100Как далеко клиентам отправляются сущности
network-compression-threshold256Размер пакета, начиная с которого пакеты сжимаются
max-tick-time60000Сторожевой таймер: через сколько миллисекунд сервер завершит сам себя
max-chained-neighbor-updates1000000Предел цепочки редстоуна, уменьшает лаги от подавления обновлений
sync-chunk-writestrueСинхронная запись чанков на диск
use-native-transporttrueСетевой слой epoll в Linux. Оставьте включённым
region-file-compressiondeflateС версии 1.20.5. Есть также none и lz4
pause-when-empty-seconds60С версии 1.21.2. Останавливает тики, когда на сервере никого нет
rate-limit0Сколько пакетов в секунду до кика. 0 - выключено

view-distance - число, которое люди должны менять первым и трогать последним. Каждый чанк внутри радиуса генерируется, загружается, хранится в памяти и отправляется каждому игроку, который может его видеть, поэтому стоимость растёт квадратично: переход с 10 на 8 убирает около трети загруженной области, а с 10 на 6 - почти две трети. На сервере с 2 ГБ и больше чем парой игроков разумный выбор по умолчанию - 8, а 6 - то, к чему вы опускаетесь, когда страдает частота тиков. Ниже 5 играть уже неприятно, потому что становятся заметны туман и внезапное появление объектов.

simulation-distance, появившийся в 1.18, разделил прежнее единственное число на два. View distance - это то, что игроки видят; simulation distance - то, что действительно обновляется по тикам: мобы, посевы, редстоун, воронки, печи. На практике оно ограничено view distance, и понижать именно его дешевле, потому что игрок видит на восемь чанков, а работать из них должны только шесть. Подвох - фермы: всё, что находится за пределами simulation distance каждого игрока онлайн, перестаёт работать, так что значение 4 тихо сломает железную ферму, которую кто-то построил у края своей прорисовки.

network-compression-threshold=256 сжимает любой пакет больше 256 байт. Значение -1 полностью отключает сжатие, обменивая нагрузку на канал на нагрузку на CPU, и подходит только для локальной сети - например, за прокси на том же хосте. 0 сжимает вообще всё и почти всегда хуже.

max-tick-time - это сторожевой таймер, а не настройка производительности. Если один тик длится дольше 60 секунд, сервер решает, что завис, сохраняет трассировку потоков и завершает работу. У Paper есть собственная версия того же механизма с ранним предупреждением. Значение -1 отключает сторожевой таймер, что иногда полезно, пока вы отлаживаете загрузку огромного мира, но как постоянное состояние плохо: вы лишаетесь отчёта о сбое, который показывает, что именно зависло.

pause-when-empty-seconds появился в 1.21.2 и по-настоящему полезен на маленьком сервере: через заданное число секунд без единого игрока сервер перестаёт обновлять мир по тикам, и нагрузка на CPU падает почти до нуля. Как только кто-то заходит, работа возобновляется мгновенно. Но вместе с этим останавливаются задания по расписанию и фермы, зависящие от времени, поэтому поставьте 0, если у вас что-то должно работать и при пустом сервере.

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

Доступ, аутентификация и модерация#

КлючПо умолчаниюЧто делает
online-modetrueПроверять каждого игрока через Mojang
white-listfalseЗаходить могут только игроки из списка
enforce-whitelistfalseВыгонять игроков не из списка, уже находящихся на сервере
enforce-secure-profiletrueТребовать подписанный чат
prevent-proxy-connectionsfalseОтклонять игроков, чей провайдер не совпадает
accepts-transfersfalseС версии 1.20.5. Принимать пакеты переноса
op-permission-level4Уровень, который выдаёт /op
function-permission-level2Уровень, с которым выполняются функции и data pack
broadcast-console-to-opstrueПоказывать операторам команды из консоли
broadcast-rcon-to-opstrueПоказывать операторам команды из RCON
log-ipstrueЗаписывать адреса игроков в лог
hide-online-playersfalseСкрывать выборку игроков в списке серверов
enable-statustrueВообще отвечать на пинг списка серверов
text-filtering-configпустоПуть к конфигурации фильтра чата

enforce-secure-profile=true требует от клиентов подписанного Mojang профиля чата. Выключение позволяет подключаться некоторым пиратским и модифицированным клиентам и тоже относится к тому, что делают не по той причине. На серверной части за прокси обычно ставят false, потому что этим занимается прокси.

white-list и enforce-whitelist - пара, которая ведёт себя странно. Включение whitelist сразу перестаёт пускать новых игроков, но не трогает тех, кто уже подключён; убирает их именно enforce-whitelist=true. Операторы обходят whitelist полностью, если принудительная проверка не включена. Порядок работы описан в статье whitelist и права, а сам файл индексируется по UUID, а не по имени.

log-ips=false стоит рассмотреть, если вы не хотите хранить адреса игроков в логах, которые уходят на сторону, когда кто-то просит помочь с отладкой. Вы лишаетесь возможности связать альтернативный аккаунт по адресу, а это настоящий инструмент модерации, так что тут компромисс, а не чистая победа. Более широкий вопрос разбирается в статье логи, которые стоит хранить.

prevent-proxy-connections=true спрашивает ответ аутентификации Mojang, не похоже ли соединение игрока на VPN или прокси, и отклоняет его, если похоже. Для законных игроков в некоторых мобильных и корпоративных сетях это даёт ложные срабатывания, так что инструмент грубый.

Query, RCON и удалённое управление#

КлючПо умолчаниюЧто делает
enable-queryfalseОтвечать по протоколу query GameSpy4
query.port25565UDP-порт для query
enable-rconfalseВключить удалённую консоль
rcon.port25575TCP-порт для RCON
rcon.passwordпустоОбязателен, если RCON включён
enable-jmx-monitoringfalseОтдавать метрики JVM через JMX

Query - это протокол только для чтения, который по UDP отвечает на вопросы «кто онлайн, какая версия, какая карта». Им пользуются сайты со списками серверов и боты статуса. Включение ничего не стоит, кроме открытого UDP-порта, и в отличие от пинга списка серверов он может сообщить полный список игроков.

RCON - это удалённая консоль: обычное TCP-соединение, пароль и затем произвольные команды сервера. Из «обычного TCP» и «произвольных команд сервера» следуют два факта. Пароль передаётся открытым текстом, а тот, кто его знает, получает на вашем сервере уровень 4. Никогда не выставляйте 25575 в интернет без чего-либо перед ним, используйте длинный случайный пароль и по возможности предпочитайте консоль панели. Материал RCON без риска короткий, и пяти минут на него не жалко. В тарифах RE:NODE выделения под query и RCON добавляются на вкладке Network, а пароль RCON генерируется для каждого сервера, а не выбирается вами.

Resource pack#

КлючПо умолчаниюЧто делает
resource-packпустоПрямая ссылка на скачивание .zip
resource-pack-sha1пустоSHA-1 этого файла, hex в нижнем регистре
resource-pack-promptпустоТекст в формате JSON, показываемый в окне согласия
resource-pack-idпустоС версии 1.20.3. UUID пакета
require-resource-packfalseОтключать игроков, отказавшихся от пакета

URL должен быть прямой ссылкой на файл: страница общего доступа Dropbox или Google Drive отдаёт HTML, а не zip, и клиент молча не справляется. SHA-1 на практике не необязателен: без него клиенты кэшируют по URL и не замечают, что вы заменили пакет, так что обновление пакета требует либо нового имени файла, либо правильного хеша. Вычислите его командой sha1sum pack.zip и вставьте hex в нижнем регистре.

require-resource-pack=true превращает отказ в отключение от сервера - это правильная настройка для сервера, игра на котором зависит от собственных текстур, и неправильная для сервера, где они всего лишь украшение. Поле prompt принимает исходный текстовый компонент JSON, тот же формат, что и у /tellraw, так что обычный текст нужно обернуть: {"text":"Please accept our pack"}.

Ключи, о которых вы прочтёте, но которых больше нет#

Старые руководства полны настроек, которые сервер убрал, а поиск их съедает целый вечер.

  • max-build-height удалён в 1.17, когда высота мира стала свойством измерения, а не сервера.
  • snooper-enabled исчез вместе с телеметрией, которой управлял.
  • announce-player-achievements стал игровым правилом announceAdvancements.
  • Числовые значения вроде difficulty=1 заменены названиями в 1.14, хотя старые файлы всё ещё принимаются.
  • resource-pack-hash давным-давно вытеснен ключом resource-pack-sha1.

И наоборот, некоторые ключи новее руководства, которое вы читаете: simulation-distance - это 1.18, enforce-secure-profile - 1.19, accepts-transfers и region-file-compression - 1.20.5, bug-report-link - 1.21, pause-when-empty-seconds - 1.21.2. Если ключа нет в файле, созданном вашим сервером, значит, его нет в вашей версии, и добавление вручную ничего не даст.

Рабочий пример: сервер выживания на двадцать игроков и 4 ГБ#

Вот весь server.properties, который работает, с убранными значениями по умолчанию, чтобы были видны принятые решения:

server.properties
motd=§aThe Longhouse §8» §fSurvival SMPmax-players=24difficulty=normalpvp=trueview-distance=8simulation-distance=6spawn-protection=0allow-flight=trueplayer-idle-timeout=30level-name=worldlevel-seed=white-list=trueenforce-whitelist=trueonline-mode=trueenable-command-block=falseop-permission-level=2enable-rcon=falseenable-query=truenetwork-compression-threshold=256

Рассуждения по порядку: читаемый MOTD; на несколько слотов больше привычных двадцати, потому что 4 ГБ это тянут; сложность normal, поскольку на easy цикл выживания становится тривиальным; view и simulation distance урезаны до того, что комфортно помещается в 4 ГБ кучи; защита спавна выключена, чтобы можно было строить рядом с ним; полёт разрешён, потому что элитры существуют, а ложные выгоны хуже самой настройки; кик за простой через тридцать минут; whitelist включён и принудителен до того, как адрес попадёт куда-либо; командные блоки выключены, потому что в руках оператора уровня 2 они превращаются в дыру для удалённого выполнения кода; и op-permission-level=2, чтобы /op выдавал инструменты строительства, а не /stop.

Эта комбинация плюс плагин прав и ночной backup - сервер, который можно оставить работать. Всё, что дальше, - тонкая настройка: это руководство по Paper и, для размера кучи, руководство по JVM.

FAQ#

Почему моё изменение в server.properties ничего не сделало?

Файл читается только при запуске. Перезапустите сервер. Если вы правили его при работающем сервере, проверьте файл ещё раз после перезапуска: сервер может переписать его при остановке и затереть то, что вы напечатали.

Чем отличается view distance от simulation distance?

View distance - это то, как далеко клиенту отправляются чанки, то есть она определяет, что видят игроки, и почти всю нагрузку на память. Simulation distance - то, как далеко чанки реально обновляются по тикам, то есть она определяет, появляются ли мобы, растут ли посевы и работает ли редстоун. Понижать simulation distance дешевле и менее заметно, но фермы за её пределами перестают работать.

Можно ли задать здесь игровые правила вроде keepInventory?

Нет. Игровые правила живут в мире, а не в server.properties. Задайте их один раз командой /gamerule keepInventory true, и они сохранятся между перезапусками, потому что хранятся в level.dat.

Как сменить seed мира на существующем сервере?

Никак. Seed фиксируется при генерации мира. Смените level-name на новую папку и задайте level-seed, и сервер создаст новый мир при следующем запуске, оставив старый на диске.

Безопасно ли поднимать max-players выше 20?

Сама настройка не обеспечивает ничего, кроме числа. Ограничивают вас память под загруженные чанки и одно ядро на тик. Поднимайте значение вместе с понижением view distance и следите за временем тика, а не за числом игроков.

Игнорирует ли Paper какие-то из этих настроек?

Paper читает их все и добавляет поверх собственные слои в bukkit.yml, spigot.yml и config/paper-*.yml. Некоторые из них там переопределяются - в частности view и simulation distance для каждого мира, лимиты спавна мобов и радиусы исчезновения, - поэтому если изменение здесь на Paper как будто не действует, проверьте, не задаёт ли то же самое файл Paper.


Комментарии

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

0/2000