Перейти к содержимому

Онлайн-игроки

Главный сценарий для GeneratedMenu: постраничный браузер онлайн-игроков. Каждая голова собирается автоматически из каталога PLAYERS, в lore - здоровье и мир. ЛКМ телепортирует админа к игроку, Shift+ЛКМ кикает. Доступ ограничен админами через общий сниппет rulesAdmin.

  • Сборка генерируемого меню из каталога + матрицы + шаблонов
  • Использование плейсхолдеров каталога (%ctg_player_name%, %ctg_player_health%, %ctg_player_world%)
  • Различение типов кликов: click { left { ... } shift_left { ... } }
  • Действие command с console: для запуска команд от имени консоли
  • Встроенная пагинация через pageNext / pagePrev (общие ${buttonNext} и ${buttonPrev})
  • Плейсхолдеры пагинации: %page%, %pages_count%, %pages_total%
  • Ограничение доступа на уровне меню: верхнеуровневое rules: ${rulesAdmin}

Генерируемое меню собирается из трёх блоков:

catalog { type: PLAYERS } # источник динамического содержимого
matrix { # как разложить элементы
cells: [ "_________", "_xxxxxxx_", ... ]
templates {
"x" { ... шаблон предмета ... }
}
}
items: [ # статичные предметы (рамки, кнопки, счётчик)
...
]

Каталог выдаёт поток объектов. Матрица решает, куда какой объект каталога попадёт (ячейки x поочерёдно занимают записи из каталога). Статичные предметы из items: рендерятся на каждой странице на одних и тех же местах.

Внутри шаблонов матрицы текущий объект каталога доступен через %ctg_<key>%. У каталога PLAYERS объект игрока имеет ключи name, health, food_level, world, gamemode и ещё несколько. У разных типов каталогов - разные ключи, полную таблицу смотрите в документации по генерации.

Блок click позволяет задать обработчики на конкретный тип нажатия:

  • left { ... } - только ЛКМ
  • right { ... } - только ПКМ
  • shift_left { ... } - Shift + ЛКМ
  • shift_right { ... } - Shift + ПКМ
  • drop { ... } - клавиша дропа (Q)

Если описан только один вариант клика, остальные клики ничего не делают. В этом меню left отвечает за телепорт, а shift_left - за кик. Так обычный shift+ЛКМ не приведёт случайно к телепорту.

Генерируемые меню автоматически разбиваются на страницы, если в каталоге больше записей, чем влезает в матрицу. Действия pageNext и pagePrev переключают страницы. Общие шаблоны ${buttonNext} и ${buttonPrev} уже навешивают эти действия на стрелки.

Если меню умещается на одну страницу (записей в каталоге меньше, чем слотов в матрице), кнопки next/prev всё равно отрисуются, но их действия станут no-op.

Плейсхолдеры %page%, %pages_count% и %pages_total% показывают состояние пагинации - удобно для заголовков вида “Страница 2 / 5” или счётчика в футере.

Чтобы оставить только часть игроков, добавьте фильтры в каталог:

catalog {
type: PLAYERS
filters {
permission: "myserver.online_visible"
notWorld: ["staff_world"]
}
}

Чтобы добавить ещё админских действий, расширьте блок click хендлерами right, shift_right и т.д. - каждый со своей командой через действие command.

Чтобы полностью поменять источник данных (просматривать миры, регионы, BungeeCord-серверы), замените catalog { type: ... } на WORLDS, BUNGEE_SERVERS или любой другой зарегистрированный тип каталога.

После установки набора примеров:

  1. Положите бандл в plugins/AbstractMenus/menus/example/.
  2. /am reload.
  3. Убедитесь, что у вашей учётки есть право abstractmenus.admin.
  4. Введите /ame_online в игре.
  5. ЛКМ по голове игрока - телепорт. Shift+ЛКМ - кик.