RE:NODE

Minecraft11 мин чтения

Голограммы, скорборд и TAB в Minecraft

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

0 прочтений

Большинству серверов нужны три вида информации на экране: парящий текст в мире (голограммы), панель справа (скорборд) и оформленный список игроков с заголовком, подвалом и префиксами рангов (таб-лист). Обычный набор на Paper - DecentHolograms для голограмм, плагин TAB для таб-листа, ников над головой и боковой панели и PlaceholderAPI, который снабжает их живыми значениями вроде баланса или ранга игрока. Все три бесплатные и хорошо поддерживаются. Правильно настроить нужно частоту обновления: каждый плейсхолдер в каждой строке вычисляется для каждого игрока при каждом обновлении, и боковая панель, обновляющая пятнадцать строк десять раз в секунду для пятидесяти игроков, - это измеримая доля вашего тика. Ванильных команд - text display-сущностей и /scoreboard - хватает простым серверам, и ничего лишнего они не стоят.

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

PlaceholderAPI: связующее звено#

Почти всё динамическое на скорборде или голограмме берётся из PlaceholderAPI. Это плагин, который позволяет другим плагинам публиковать значения в виде плейсхолдеров вроде %player_name%, %vault_eco_balance% или %luckperms_prefix%, а плагинам отображения - запрашивать их.

Большинство плейсхолдеров в самом PlaceholderAPI нет. Они поставляются в расширениях, которые скачиваются из его eCloud:

code
/papi ecloud download Player/papi ecloud download Vault/papi ecloud download Server/papi ecloud download LuckPerms/papi reload/papi parse me %player_name% has %vault_eco_balance_formatted%

/papi parse me <text> вычисляет плейсхолдеры для вас и печатает результат - это самый быстрый способ проверить, что плейсхолдер работает, прежде чем ставить его на скорборд. Если он печатает плейсхолдер без изменений, расширения нет или не установлен плагин, который предоставляет данные. Некоторые плагины регистрируют свои плейсхолдеры сами и расширения не требуют; это указано в их документации.

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

Голограммы с DecentHolograms#

DecentHolograms - распространённый бесплатный плагин голограмм для актуального Paper. Голограмма - это стопка строк в определённом месте; строки могут быть текстом, предметами или головами игроков, а у голограмм может быть несколько страниц, которые игроки перелистывают кликом.

code
/dh create welcome &6Welcome to the server/dh line add welcome 1 &7Type &f/rules &7before you build/dh line add welcome 1 #ICON: DIAMOND_PICKAXE/dh line add welcome 1 &7Online: &f%server_online%/dh movehere welcome/dh list/dh delete welcome

Что они делают:

  • /dh create <name> [content] создаёт голограмму там, где вы стоите, с необязательной первой строкой.
  • /dh line add <hologram> <page> <content> добавляет строку на страницу. Страница 1 - первая.
  • #ICON: <MATERIAL> превращает строку в парящий предмет вместо текста.
  • Плейсхолдеры работают в строках, если установлен PlaceholderAPI.

Голограммы сохраняются в виде файлов в plugins/DecentHolograms/holograms/, по одному на голограмму, поэтому их легко править пачкой, копировать между серверами и бэкапить.

Голограммы DecentHolograms пакетные: сервер не создаёт настоящих сущностей для каждой строки, так что лобби, полное голограмм, стоит серверу немного. Затраты - в обновлении. Каждая строка с плейсхолдерами обновляется по интервалу для каждого игрока, который её видит; держите интервал обновления длинным для медленно меняющихся значений (таблице лидеров не нужно обновляться каждую секунду) и не размещайте голограммы с обилием плейсхолдеров в многолюдных зонах спавна.

Старые серверы часто используют HolographicDisplays, который создавал стойку для брони на каждую строку. Для актуальных версий он развивается менее активно; ещё один современный вариант - FancyHolograms, построенный на display-сущностях. Выберите один плагин голограмм и оставайтесь на нём.

Ванильная альтернатива

С версии 1.19.4 в Minecraft есть text display-сущности, которые делают то же самое без всяких плагинов:

code
/summon minecraft:text_display ~ ~2 ~ {text:"Welcome to the server",billboard:"center"}

billboard:"center" заставляет текст всегда поворачиваться к игроку. Эта форма использует синтаксис текста версии 1.21.5 и новее; более ранние версии ожидают текст в виде JSON-строки. Text display - настоящие сущности, они сохраняются вместе с миром и не поддерживают PlaceholderAPI. Для горстки статичных табличек на маленьком сервере они идеальны. Для всего динамического или того, что вы будете часто переставлять, плагин удобнее.

Боковые скорборды#

Боковая панель - это блок в правой части экрана. Ванилла ограничивает её 15 строками и одной целью (objective) на слот отображения за раз.

Ванильный способ, которого хватает для мини-игр и простого учёта статистики:

code
/scoreboard objectives add kills playerKillCount "Kills"/scoreboard objectives setdisplay sidebar kills/scoreboard objectives modify kills numberformat blank

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

Боковая панель из плагина показывает каждому игроку его собственные строки, собранные из плейсхолдеров. У TAB есть модуль боковой панели (ниже), существуют и отдельные плагины скорбордов. Для любого из них два правила:

  • Пятнадцать строк - потолок, а читаемые панели обычно короче десяти. Название сервера, ранг, баланс, число игроков онлайн, сайт. Тринадцатую строку никто не читает.
  • Обновляйте то, что меняется. Число игроков онлайн может обновляться раз в несколько секунд; адрес сайта не меняется никогда и не должен вычисляться повторно вовсе.

Таб-лист с TAB#

TAB от NEZNAMY - стандарт для списка игроков. Он отвечает за заголовок и подвал, формат имени каждого игрока в списке, сортировку по рангу, префиксы и суффиксы ников над головой, боковую панель, цели belowname и playerlist, а также боссбары. Он работает на Paper и на Velocity или BungeeCord, так что в сети он может управлять таб-листом на всех бэкендах.

Конфигурация лежит в plugins/TAB/config.yml, а переопределения для групп и пользователей - в groups.yml и users.yml (или в базе данных в сетях). Структура менялась между мажорными версиями, поэтому начинайте с файла, который сгенерировала ваша версия. Упрощённые заголовок и подвал выглядят так:

plugins/TAB/config.yml (excerpt)
header-footer:  enabled: true  header:    - "&6&lMY SERVER"    - "&7Survival - 1.21"  footer:    - "&7Online: &f%online%  &7Ping: &f%ping%ms"    - "&7example.com"

%online% и %ping% - внутренние плейсхолдеры самого TAB, PlaceholderAPI им не нужен. Плейсхолдеры PlaceholderAPI тоже работают, как только он установлен.

Префиксы и сортировка берутся из групп. TAB может читать группу из LuckPerms, применять префикс для каждой группы и сортировать список так, чтобы персонал был наверху:

plugins/TAB/groups.yml (excerpt)
admin:  tabprefix: "&c[Admin] "  tagprefix: "&c"vip:  tabprefix: "&a[VIP] "_DEFAULT_:  tabprefix: "&7"

tabprefix - префикс в списке игроков; tagprefix - над головой. Многие серверы вообще не пишут префиксы в TAB, а задают их в LuckPerms и используют %luckperms_prefix% в TAB, чтобы у ранга был один источник истины.

Частота обновления и её цена#

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

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

Арифметика для боковой панели: 50 игроков x 10 строк с плейсхолдерами x 10 обновлений в секунду = 5000 вычислений плейсхолдеров в секунду. Если один из этих плейсхолдеров медленный, медленным становится сервер.

TAB позволяет задать интервалы обновления для каждого плейсхолдера в config.yml, в разделе интервалов обновления PlaceholderAPI, со значением по умолчанию и переопределениями для отдельных плейсхолдеров, в миллисекундах:

plugins/TAB/config.yml (excerpt)
placeholderapi-refresh-intervals:  default-refresh-interval: 500  "%server_uptime%": 1000  "%vault_eco_balance%": 2000  "%player_name%": -1

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

У TAB также есть /tab cpu, которая показывает, сколько процессорного времени тратит каждая функция TAB и каждый плейсхолдер. Если плейсхолдер дорогой, он окажется наверху. Это первая команда, которую стоит запустить, если вы подозреваете таб-лист или боковую панель, - ещё до spark. Если нужна полная картина, статья Как читать отчёт spark показывает, что плагины отображения видны в дереве вызовов, как и всё остальное.

Таблицы лидеров, таймеры и другие популярные элементы#

Большинство серверов в итоге хотят один и тот же набор элементов сверх базовых. У каждого есть дешёвый и дорогой способ.

Таблицы лидеров. Голограмма «десять самых богатых игроков» на спавне - классика. Дорогой способ - плейсхолдер, который при каждом вычислении сортирует все счета в экономике. Дешёвый способ - плагин или расширение, которое кеширует отсортированный список и обновляет его раз в несколько минут; так делает большинство плагинов экономики и статистики с плейсхолдерами топов, и в их документации сказано, как часто. Задайте такой же интервал обновления голограммы. Никто не заметит, что таблице лидеров три минуты; все заметят, если сервер подвисает при каждом её обновлении.

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

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

Боковые панели для отдельных миров. TAB и большинство плагинов боковой панели умеют показывать разную панель в зависимости от мира или условия - панель мини-игры внутри арены, панель выживания в остальных местах. Используйте условия, а не несколько плагинов, каждый из которых владеет панелью в своём мире; два плагина, которые борются за один элемент, - самая частая причина мерцания.

Информация для персонала. Строка только для персонала с TPS или MSPT полезна и дешёвая, но закройте её правом, чтобы обычные игроки её вообще не вычисляли. TAB поддерживает условия отображения на основе прав именно для этого.

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

Сети, Bedrock и другие пограничные случаи#

Сети за прокси. Установите TAB на прокси, чтобы таб-лист показывал игроков со всех бэкендов с единообразными префиксами. Плейсхолдерам, которые зависят от бэкенда, - например, балансу игрока на survival, - нужен bridge-плагин TAB на бэкендах, чтобы передавать значения PlaceholderAPI наверх. Голограммы остаются на каждом бэкенде своими. Схема описана в статье Сеть серверов за прокси Velocity.

Игроки Bedrock. Через Geyser клиенты Bedrock видят таб-лист и боковую панель, но форматирование может отличаться - некоторые цветовые коды и ширины отображаются иначе. Если значительная доля ваших игроков на Bedrock, держите оформление простым. Подробности есть в статье Кроссплей через Geyser.

Конфликт команд (teams). Префиксы ников используют команды скорборда. Управлять командой игрока может только один плагин одновременно. Если команды выставляют и TAB, и плагин ников, и плагин мини-игр, префиксы мерцают или пропадают. Выберите одного владельца ников и отключите эту функцию в остальных.

Мерцающие боковые панели. Старые плагины скорбордов перестраивали всю панель при каждом обновлении, и некоторые клиенты отображают это как мерцание. TAB и современные плагины обновляют строки на месте. Если вы видите мерцание, обычно это второй плагин, который тоже пишет в боковую панель.

На RE:NODE в консоли есть автодополнение по Tab, что помогает с длинными командами /dh и /papi, а в файловом менеджере есть редактор с подсветкой синтаксиса для YAML плагина TAB, так что ошибка в отступах видна ещё до перезагрузки. График CPU относительно лимита вашего тарифа сразу показывает, если новая боковая панель чего-то стоила.

Разумная стартовая настройка#

Для типичного survival-сервера:

  1. PlaceholderAPI с расширениями Player, Server, Vault и LuckPerms.
  2. TAB с заголовком из двух строк (название сервера, режим игры), подвалом с числом игроков онлайн и сайтом, префиксами из LuckPerms и персоналом в начале списка.
  3. Боковая панель из шести-восьми строк: ранг, баланс, онлайн, время игры, сайт. Плейсхолдеры обновляются раз в одну-две секунды, статичные строки - никогда.
  4. DecentHolograms на спавне для правил, приветствия и еженедельной таблицы лидеров, обновляемой раз в минуту.
  5. Проверка /tab cpu после настройки и после каждого добавления.

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

FAQ#

Нужен ли PlaceholderAPI для TAB?

Не для собственных плейсхолдеров TAB вроде %online% и %ping%. Он нужен для всего, что приходит из других плагинов: балансов, рангов из LuckPerms, приватов, времени игры. Большинство серверов его ставят.

Почему на моём скорборде справа красные числа?

Это ванильное отображение очков. В 1.20.3 и новее /scoreboard objectives modify <objective> numberformat blank скрывает их для ванильных целей; у плагинов боковой панели обычно тоже есть опция, чтобы их скрыть.

Голограммы вредят производительности?

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

Почему префиксы постоянно пропадают или мерцают?

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

Можно ли обойтись ванильными командами вместо плагинов?

Да, для статичных голограмм (text display-сущности) и общих скорбордов вроде счётчика убийств. Ванилла не умеет показывать каждому игроку его собственные динамические значения или оформленные заголовок и подвал с живыми плейсхолдерами.


Комментарии

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

0/2000