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_SWORDSlots
| Key | Does |
|---|---|
slot, slots | Where the item goes. |
priority | Several items may share a slot; the lowest priority whose if holds is shown. |
if | An expression; the item exists only while it is true. |
require, deny | Checked on a click. Also require-left, -right, -middle, -shift-left, -shift-right with matching deny-.... |
click | A 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