RE:NODE

EssentialsX config.yml: настройки, которые действительно важны

Автор Команда RE:NODE
15 мин чтения


Файл config.yml в EssentialsX занимает около 1400 строк, а на обычном выживательном сервере менять приходится, пожалуй, строк двадцать. Важны кулдаун и задержка телепорта, ранги домов в sethome-multiple, блок экономики (starting-balance, currency-symbol, min-money, max-money), format и group-formats для чата, а также ключи спавна, которые решают, где окажется новый игрок. Несколько разделов не работают, пока не установлен jar соответствующего модуля, а большинство изменений применяется командой /essentials reload - но не все. В этом руководстве мы проходим по файлу в том порядке, в котором вы будете его править, с реальными значениями по умолчанию из актуального конфига 2.x, и отмечаем места, где комментарии в файле легко понять неправильно.

Где лежит config.yml и какие модули он настраивает#

После первого запуска EssentialsX создаёт свою папку рядом с остальными плагинами:

code
plugins/Essentials/  config.yml      the file this guide is about  kits.yml        kit contents, including the 'tools' first-join kit  worth.yml       sell prices for /sell and /worth  spawn.yml       spawn points set with /setspawn  userdata/       one YAML file per player: balance, homes, nickname  warps/          one file per warp

Основную работу делает главный jar: дома, варпы, телепорты, наборы, экономика, ники, AFK, почта. Всё остальное - отдельные jar-модули, которые скачиваются оттуда же, откуда и основной, и должны иметь ровно ту же версию. Несовпадение версии модуля - частая причина стектрейса при запуске после обновления.

МодульЧто добавляетРаздел в config.yml
EssentialsX ChatФорматирование чата, радиус локального чатаchat:
EssentialsX Spawn/spawn, /setspawn, обработка первого входаnewbies: и ключи спавна
EssentialsX ProtectПереключатели урона, взрывов и физикиprotect: (prevent, disable)
EssentialsX AntiBuildПрава на строительство, чёрные списки предметовprotect: (alert, blacklist)
EssentialsX GeoIPСтрана при входе и в /whoisсвой файл plugins/EssentialsGeoIP/config.yml
EssentialsX DiscordМост чата с Discordсвоя папка

Главное в этой таблице - правый столбец. Раздел chat: присутствует в основном конфиге независимо от того, есть ли у вас модуль Chat, и если править его без jar-файла Chat, не произойдёт вообще ничего: предупреждения нет, настройка просто никогда не читается. Если изменение будто игнорируется, сначала проверьте, что модуль лежит в plugins/, и только потом - всё остальное. Ставьте только те модули, которыми пользуетесь: каждый из них регистрирует обработчики событий на сервере, который выполняет игровую логику в одном потоке. Более широкий вопрос о том, что устанавливать, разобран в статье Minecraft plugins worth installing.

В заголовке файла перечислены правила YAML, которые стоит знать до первой правки: только пробелы, никаких табуляций; структуру задаёт отступ; апостроф внутри текста в одинарных кавычках пишется дважды (don''t); текст с символами берётся в кавычки; а если вы используете любую букву с диакритикой или валютный символ, кроме $, файл нужно сохранять в UTF-8, а не в ANSI.

Телепорты: кулдауны, задержки и безопасность#

Четыре ключа определяют, как ощущается телепортация, и именно их игроки замечают в первую очередь.

plugins/Essentials/config.yml
teleport-safety: trueteleport-cooldown: 0teleport-delay: 0teleport-invulnerability: 4tpa-accept-cancellation: 120

teleport-cooldown - это пауза в секундах между телепортами. Это один общий таймер для /home, /tp, /spawn, /warp и остальных команд, а не отдельный таймер на каждую, поэтому при кулдауне 30 секунд игрок, который только что вернулся домой, не сможет и /spawn в течение 30 секунд. На выживательном сервере значение от 10 до 60 останавливает спам телепортами и не воспринимается как наказание.

teleport-delay - это задержка перед телепортом: игрок должен стоять на месте указанное число секунд, прежде чем телепорт сработает, а движение или удар отменяют его. Эта настройка не даёт сбежать из боя через /home, и на PvP-сервере она значит гораздо больше, чем кулдаун. Обычно ставят от трёх до пяти секунд; если больше десяти, игроки перестают пользоваться домами и начинают строить дороги в Незере, что, возможно, вам и нужно.

teleport-invulnerability даёт несколько секунд, в течение которых после телепорта по команде игрока нельзя ранить другим игрокам, и он сам не может ранить их. Это нужно, чтобы /tpa в гущу боя не означал мгновенную смерть и чтобы его нельзя было использовать для засады.

teleport-safety определяет, что произойдёт, если место назначения небезопасно - лава, обрыв, внутри блока. При true Essentials переместит игрока в ближайшую безопасную точку; при false телепорт будет отменён с предупреждением. Оставьте включённым. tpa-accept-cancellation - это время, через которое запрос /tpa истекает.

Три права смягчают эти правила для персонала:

ПравоЭффект
essentials.teleport.cooldown.bypassИгнорирует teleport-cooldown
essentials.teleport.timer.bypassПропускает задержку teleport-delay
essentials.teleport.timer.moveМожно двигаться во время задержки, не отменяя телепорт

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

Если нужны разные кулдауны для разных команд, teleport-cooldown - неподходящий инструмент. Более новый блок command-cooldowns задаёт отдельный кулдаун для каждой команды, работает и с командами других плагинов и по умолчанию переживает перезапуск (command-cooldown-persistence: true):

yaml
command-cooldowns:  home: 30  spawn: 10  tpr: 600

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

Дома и лимиты sethome-multiple#

Лимит домов - настройка, которую чаще всего настраивают неверно, потому что он зависит от двух прав, а не от одного.

yaml
sethome-multiple:  default: 3  vip: 5  staff: 10

Имена внутри sethome-multiple - это ранги домов, и они не обязаны совпадать с вашими группами прав. Больше одного дома у игрока будет, только если у него есть essentials.sethome.multiple; с одним этим правом он получает число из default. Чтобы получить число своего ранга, нужны оба права: essentials.sethome.multiple и essentials.sethome.multiple.vip. Если у игрока есть право ранга, но нет базового права, у него остаётся один дом - отсюда растут почти все темы вида "я поставил VIP 5 домов, а у них по-прежнему 1". Право essentials.sethome.multiple.unlimited полностью снимает лимит.

Рабочая схема для трёх уровней в терминах LuckPerms выглядит так:

code
$ lp group default permission set essentials.sethome.multiple true$ lp group vip permission set essentials.sethome.multiple.vip true$ lp group staff permission set essentials.sethome.multiple.staff true

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

Остальные ключи домов невелики, но по каждому стоит принять решение:

  • spawn-if-no-home: true отправляет на спавн игрока, который ввёл /home, не имея ни одного дома. Поставьте false, если /home в таком случае должна просто не сработать.
  • confirm-home-overwrite: false - включите это, потому что /sethome с уже существующим именем заменяет дом без вопросов, а игроки делают это случайно.
  • world-home-permissions: false - поставьте true вместе с essentials.worlds.<worldname>, чтобы /home нельзя было использовать для перехода в мир, куда игрок не должен попадать. На сервере, где рядом с выживанием есть творческий мир, именно так инвентари перетекают между ними; более широко эта проблема разобрана в статье про несколько миров с Multiverse.

Плата за дома задаётся в command-costs, о нём дальше.

Блок экономики#

Экономика входит в основной jar. Проектирование - Vault, плагины магазинов, источники и стоки денег, перенос балансов в базу данных - описано в руководстве по экономике EssentialsX и Vault. Здесь - только ключи и их значения по умолчанию.

plugins/Essentials/config.yml
starting-balance: 0command-costs:  home: 50  sethome: 500  back: 100  kit-tools: 1500currency-symbol: '$'currency-symbol-suffix: falsemax-money: 10000000000000min-money: -10000economy-log-enabled: falseminimum-pay-amount: 0.001

starting-balance выплачивается один раз, когда при первом входе игрока создаётся его файл userdata. Если изменить значение позже, для тех, кто уже заходил, ничего не изменится.

currency-symbol может быть любым символом при условии, что файл сохранён в UTF-8: знак фунта или евро в файле, сохранённом в ANSI, в игре превратится в вопросительный знак или мусор. Для символов, которые пишутся после числа, задайте currency-symbol-suffix: true. Форматирование чисел настраивается отдельно: раскомментируйте currency-format: "#,##0.00", чтобы управлять десятичными знаками, и currency-symbol-format-locale (например, de-DE для 1.234,50), чтобы выбрать, какой символ разделяет тысячи.

По умолчанию min-money равен -10000, и комментарий к нему объясняет, что это значит: уйти в минус игрок может, только если у него есть essentials.eco.loan. То есть по умолчанию в долг не залезает никто, но нижняя граница существует на случай, если вы кому-то выдадите кредиты. Значение 0 полностью отключает овердрафты, какие бы права ни были выданы. max-money по умолчанию равен десяти триллионам; сам файл предупреждает, что чрезвычайно большие числа могут привести к неожиданным последствиям, а потолок, который игрок реально может достичь, - более полезное число.

command-costs берёт плату за каждое использование. Ключ - имя команды, а для наборов используется kit-<name>. Режимы крика и вопроса из модуля Chat можно тарифицировать как chat-shout и chat-question. Тот, у кого есть essentials.nocommandcost.<command> или essentials.nocommandcost.all, не платит ничего, а подстановка вроде essentials.* у группы персонала их включает - поэтому проверяйте цены с обычного аккаунта.

Остальная часть блока, вкратце:

КлючПо умолчаниюЧто делает
economy-log-enabledfalseЗаписывает сделки по табличкам и /sell в trade.log
economy-log-update-enabledfalseДополнительно записывает каждую транзакцию Vault - много шума
pay-excludes-ignore-listfalseБлокирует /pay тому, кто вас игнорирует
show-zero-baltoptrueПоказывает нулевые балансы в /baltop
baltop-requirements0, 0Минимальные баланс и время игры для попадания в список
baltop-entry-limit-1Ограничивает число кэшируемых записей baltop на больших серверах

В комментарии самого файла к economy-log-update-enabled сказано, что он быстро заполняет журнал и предназначен для тестирования; в обычной работе держите его выключенным. После изменения show-zero-baltop выполните /baltop force, потому что список кэшируется.

sell-multipliers позволяет рангу продавать дороже, чем указано в worth.yml: default: 1.0, double: 2.0 и право essentials.sell.multiplier.<rank>. Это источник денег. Множитель 2x на предмет, который можно фармить, вдвое увеличивает скорость, с которой деньги попадают на сервер, так что назначайте цену с учётом этого.

Форматирование чата с EssentialsX Chat#

Ничего из этого не работает без модуля Chat. Когда он установлен, раздел chat: управляет форматом и дальностью каждого сообщения.

yaml
chat:  radius: 0  format: '<{DISPLAYNAME}> {MESSAGE}'  group-formats:    default: '&7{DISPLAYNAME}&7:&r {MESSAGE}'    admin: '&c[{GROUP}]&r {DISPLAYNAME}&7:&f {MESSAGE}'  world-aliases:    world_nether: "&cN&r"

radius: 0 - это глобальный чат. Любое другое число делает чат локальным в пределах стольких блоков. Игроки с essentials.chat.shout всё равно могут достучаться до всех, начав сообщение с !, с essentials.chat.question - с ?, а essentials.chat.spy видит всё независимо от расстояния. Локальный чат меняет характер сервера сильнее любой другой отдельной настройки: на тихих серверах с ним становится пусто, так что включайте его, только если игроков достаточно для разговоров поблизости.

Плейсхолдеры, которыми вы действительно будете пользоваться: {DISPLAYNAME}, {USERNAME}, {NICKNAME}, {PREFIX}, {SUFFIX}, {GROUP}, {WORLDNAME} и {WORLD} (псевдоним из world-aliases), а также {MESSAGE}.

Почти все попадаются на две ловушки:

  • Двойные префиксы. {DISPLAYNAME} уже включает префикс и суффикс из вашего плагина прав. Формат {PREFIX} {DISPLAYNAME} выводит ранг дважды. Используйте один {DISPLAYNAME} или {PREFIX}{NICKNAME}{SUFFIX}, если хотите расставить их сами.
  • Названия групп чувствительны к регистру. Ключ в group-formats должен точно совпадать с названием группы - и если у группы LuckPerms задано отображаемое имя, Essentials видит именно его. Формат, который никогда не применяется, почти всегда означает заглавную букву или отображаемое имя.

Префиксы приходят из LuckPerms через Vault, поэтому для того, чтобы {PREFIX} что-то показывал, нужны оба плагина. Цветовые коды в строке формата задаются через &; смогут ли игроки использовать цвета в собственных сообщениях, определяется отдельными правами. paper-chat-events: true использует современные события чата Paper и является единственной настройкой чата, для смены которой нужен полный перезапуск - выключайте её, только если конфликтует другой плагин чата.

Если вы связываете чат с Discord, у стороны Discord свой формат; альтернатива модулю Essentials описана в статье DiscordSRV и интеграция с Discord.

Спавн, первый вход и возрождение#

Модуль Spawn отвечает за три момента: первый вход игрока, каждый следующий вход и возрождение после смерти.

yaml
newbies:  announce-format: '&dWelcome {DISPLAYNAME}&d to the server!'  spawnpoint: newbies  kit: toolsspawn-on-join: falserespawn-at-home: falserespawn-at-home-bed: truerespawn-at-anchor: falserespawn-listener-priority: highspawn-join-listener-priority: high

Задавайте спавны в игре, а не в файле. Встаньте там, где должны появляться все, и выполните /setspawn; встаньте в точке прибытия новичков и выполните /setspawn newbies. Именно это второе имя имеется в виду в spawnpoint: newbies. Если отдельный спавн для новичков не нужен, задайте spawnpoint: none, и новые игроки будут появляться на спавне мира. /setspawn <group> работает для любого названия группы, так персонал может появляться не там, где все остальные.

kit: tools выдаёт набор tools из kits.yml при первом входе независимо от стоимости, прав и кулдауна набора. Проверьте, что в нём действительно лежит то, что вам нужно; по умолчанию это стартовый набор, а набор первого входа сам по себе - небольшой источник ресурсов. Значение '' в announce-format отключает приветственное сообщение для всех.

spawn-on-join - та самая настройка "спавн при входе", которую все ищут. true отправляет каждого игрока на спавн при каждом входе; она также принимает название группы или список групп, так что на спавн можно отправлять только игроков default, а игроки с рангом будут входить там, где вышли:

yaml
spawn-on-join:  - default  - guests

Тот, у кого есть essentials.spawn-on-join.exempt, остаётся там, где вышел. На лобби или хабе здесь должно быть true; на выживательном сервере обычно false, потому что возврат на спавн при каждом входе раздражает, когда у людей уже есть база.

Возрождение определяется ключами respawn-at-. respawn-at-home: true отправляет погибшего игрока в его первый дом или к кровати, если respawn-at-home-bed тоже true. respawn-at-anchor управляет тем, учитываются ли якоря возрождения в Незере.

Два приоритета обработчиков - это место, где Essentials встречается с другими плагинами, которые тоже перемещают игроков. Если место возрождения должны определять Multiverse или плагин лобби, задайте respawn-listener-priority: lowest; none даёт ванильное поведение; highest заставляет Essentials побеждать. Оба приоритета меняются только при полном перезапуске.

AntiBuild и GeoIP#

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

yaml
protect:  disable:    build: true    use: true    warn-on-build-disallow: true  alert:    on-placement: LAVA,TNT,LAVA_BUCKET    on-use: LAVA_BUCKET    on-break:  blacklist:    placement: LAVA,TNT,LAVA_BUCKET    usage: LAVA_BUCKET    break:    piston:    dispenser:

Если установлен jar AntiBuild и build: true (значение по умолчанию), любой без essentials.build не может ставить и ломать блоки, а при use: true - ещё и использовать предметы. Это правильно для сервера, где новичков нужно сначала принять, прежде чем им можно строить, и катастрофа, если вы положили jar лишь потому, что он был в той же загрузке. Либо выдайте essentials.build группе default, либо задайте build и use в false и оставьте AntiBuild только ради чёрных списков.

Чёрные списки принимают названия материалов Bukkit через запятую. placement и usage по умолчанию содержат лаву и TNT; break может защищать что-то вроде BEDROCK, а piston и dispenser не дают этим механизмам сдвигать или выстреливать материал. essentials.protect.exemptplacement, exemptusage и exemptbreak пропускают персонал. Списки alert отправляют сообщение каждому, у кого есть essentials.protect.alerts, когда кто-то ставит или использует материал из списка, - это дешёвое раннее предупреждение о гриферстве лавой. Для более тонкого контроля есть права для отдельных материалов, например essentials.build.place.<material>. AntiBuild - грубый инструмент; настоящую защиту от гриферства с приватами и журналами блоков смотрите в статье про защиту от гриферов и античит.

Модуль Protect использует тот же раздел protect:, а именно prevent: и переключатели урона в disable: (fall, pvp, drown, lavadmg и другие). Отключить PvP на всём сервере - это protect.disable.pvp: true.

У GeoIP свой файл, plugins/EssentialsGeoIP/config.yml:

plugins/EssentialsGeoIP/config.yml
database:  show-cities: false  download-if-missing: true  license-key: ""  update:    enable: true    by-every-x-days: 30show-on-login: trueshow-on-whois: true

Он использует базу MaxMind GeoLite2, которую больше нельзя скачать анонимно. Создайте бесплатный аккаунт MaxMind, сгенерируйте лицензионный ключ и вставьте его в license-key; без него загрузка не удастся, и модуль будет записывать ошибку при каждом запуске. Когда всё заработает, персонал с essentials.geoip.show видит страну каждого игрока при входе и в /whois, а essentials.geoip.hide скрывает местоположение игрока.

Подумайте, прежде чем его ставить. Показ персоналу, откуда подключаются игроки, - это персональные данные, на небольшом сервере он редко нужен, а за прокси он сообщает местоположение прокси для всех, если IP-адреса игроков не пересылаются - как это сделать, описано в руководстве по сетям на Velocity.

Перезагрузка и когда нужен перезапуск#

В заголовке файла сказано прямо: после правки выполните /essentials reload (или /ess reload). В консоли сервера команда пишется без слеша - essentials reload, - потому что консоль является вводом сервера, а не окном чата. Это заново читает config.yml, наборы, worth и языковые файлы, не затрагивая остальной сервер.

Некоторые изменения при перезагрузке не применяются:

  • respawn-listener-priority и spawn-join-listener-priority - в комментариях к ним сказано про перезапуск.
  • chat.paper-chat-events - перезапуск.
  • Добавление, удаление или обновление любого jar-модуля - перезапуск.
  • show-zero-baltop - перезагрузка, затем /baltop force.

Чем никогда не стоит пользоваться, так это общесерверной /reload или менеджером плагинов, который подгружает jar на лету. Она перезагружает все плагины сразу, включая Essentials, и оставляет обработчики и задачи зарегистрированными наполовину так, что это выглядит как баги в том плагине, который сломается первым. Paper не зря предупреждает об этом в консоли. Перезапуск занимает секунды.

Перезагрузка, которая будто ничего не делает, обычно означает, что YAML не разобрался. Следите за консолью, когда запускаете её: символ табуляции, пропущенный пробел после двоеточия или неэкранированный апостроф приводят к ошибке с указанием строки, и ваша правка Essentials не применена. На RE:NODE редактор в файловом менеджере подсвечивает синтаксис YAML, что ловит большинство ошибок отступов до сохранения, а консоль в реальном времени показывает вывод перезагрузки. Перед крупной правкой сделайте бэкап в панели - восстановление делается одной кнопкой - и храните рядом копию рабочего config.yml. Что ещё должно входить в такой бэкап, описано в статье Backing up and restoring a Minecraft world.

Диагностика проблем#

Настройка полностью игнорируется. Её модуль не установлен, или YAML не разобрался. Разделы chat:, newbies: и protect: зависят от jar-файлов модулей.

У игроков один дом при любом ранге. У них есть право ранга, например essentials.sethome.multiple.vip, но нет базового essentials.sethome.multiple. Нужны оба.

Ранги в чате отображаются дважды. В формате одновременно используются {PREFIX} и {DISPLAYNAME}. Уберите {PREFIX}.

Формат группы никогда не применяется. Дело в регистре или в отображаемом имени LuckPerms. Выполните lp user <name> info и скопируйте название группы в точности.

После обновления никто не может строить. AntiBuild был установлен вместе с остальными модулями. Выдайте essentials.build группе default или задайте protect.disable.build и use в false.

Символ валюты показывается как вопросительный знак. Файл был сохранён в ANSI. Сохраните его в UTF-8 и выполните reload.

Телепорты постоянно отменяются. Это работает teleport-delay: игрок двигался или получил удар. Выдайте персоналу essentials.teleport.timer.move, если ему нужно продолжать двигаться.

Новые игроки появляются не на спавне новичков. Команда /setspawn newbies не выполнялась, или место входа обрабатывает другой плагин. Проверьте spawn-join-listener-priority и перезапустите сервер после его изменения.

FAQ#

Включена ли экономика EssentialsX по умолчанию?

Да. Экономика входит в основной jar и работает с первого запуска, устанавливать модуль не нужно. Балансы, /pay, /balance и /baltop работают сразу; другие плагины обращаются к ней через Vault.

Применяет ли /essentials reload все изменения?

Большинство. Приоритеты обработчиков, paper-chat-events и любые изменения в установленных jar-модулях требуют полного перезапуска. Всё в разделах экономики, телепортов, домов и формата чата применяется при reload.

Как запретить игрокам использовать /back после смерти?

Места смерти записываются для /back только у игроков с essentials.back.ondeath. Не выдавайте это право группе default или назначьте цену на back в command-costs, если хотите, чтобы команда была доступна, но дорога.

Можно ли задать свой спавн для каждого ранга?

Да. Встаньте в каждую точку и выполните /setspawn <group> с названием группы. Игроки отправляются на спавн своей группы, а если его нет, на общий спавн.

Нужен ли мне модуль GeoIP?

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