Content generated with AI — it may contain mistakes.

Menus

Chest menus

menus/<id>.yml: ExyliaLib's menu format plus slot priority, conditions, per-click requirements and lists that fill themselves.

menus/<id>.yml is a normal chest window, drawn for every client. The format is ExyliaLib's (lists, pages, fillers and groups are on ExyliaLib: Menus), plus what a DeluxeMenus file does. Opening keys (command, permission, fallback...) are on Opening and fallbacks.

command: kits
title: "{primary}&lKITS"
size: 27
items:
  vip_kit:
    slot: 13
    priority: 1                               # lowest first among the items of a slot
    if: "perm('kits.vip') and level() >= 5"   # the item is only there while this holds
    material: DIAMOND_SWORD
    name: "{letters}Kit {letters_black}▸ <gradient:{highlight}:{warning_light}>VIP</gradient>"
    require: "balance() >= 100"               # must hold for a click to run
    deny: ["[MESSAGE] {error}You need $100."] # run when it does not
    click:
      - "left: [MONEY] take 100"
      - "left: [CONSOLE] kit give vip %player_name%"
      - "right: [MESSAGE] {letters}The VIP kit."
      - "shift_left: [SCREEN] kit_preview"
  member_kit:
    slot: 13                                  # shown when vip_kit is not
    priority: 2
    material: IRON_SWORD

Slots

KeyDoes
slot, slotsWhere the item goes.
prioritySeveral items may share a slot; the lowest priority whose if holds is shown.
ifAn expression; the item exists only while it is true.
require, denyChecked on a click. Also require-left, -right, -middle, -shift-left, -shift-right with matching deny-....
clickA list of interaction lines, each optionally prefixed by left:, right:, shift_left:...

[CLOSE] closes the menu and [SCREEN] <id> opens any menu, whatever its form. Everything a screen step written in brackets does works here. actions: (next_page, previous_page, back, refresh) stay for the menu's own buttons. These keys live in ExyliaLib, so every Exylia plugin's menus can use them.

Lists that fill themselves

A pagination block can list its own rows, paged by the arrows under navigation, with no Java.

pagination:
  slots: "10-16,19-25"
  entries:                                  # one card per entry, in priority order
    spawn:
      priority: 1
      if: "perm('warp.spawn')"              # left out of the list (not a gap) while false
      material: COMPASS
      name: "{info}Spawn"
      click: ["[CLOSE]", "[PLAYER] warp spawn"]
    mine:
      material: IRON_PICKAXE
      name: "{info}Mine"
      require: "level() >= 10"
      deny: ["[MESSAGE] {error}You need level 10."]
      click: ["[CLOSE]", "[PLAYER] warp mine"]
  navigation:
    previous: { slot: 30 }
    next: { slot: 32 }

An entry takes every key a slot does. There is one list per menu.

Online players

source: online-players lists everybody the viewer can see instead, drawn by item_template with %target_name% and %target_uuid%. skip-viewer: true leaves the viewer out. The list follows players joining and leaving while it is open. menus/players.yml is a full example.

pagination:
  slots: "10-16,19-25"
  source: online-players
  skip-viewer: true
  item_template:
    material: "playerhead-%target_name%"
    name: "{info}%target_name%"

Something missing on this page? Tell us on Discord