Skip to content

menus

Every menu is a file in guis/. You can retheme any of them freely - change materials, names, lore, sizes and slots. After editing, run /cosmeticsadmin reload.

File Menu
cosmetics-menu.yml The /cosmetics menu.
equip-menu.yml Equip / unequip / sell confirmation for one cosmetic.
cosmetics-market.yml The /cosmetics market menu.
market-confirm.yml Market purchase confirmation.
case-confirm.yml Case opening confirmation.

The file root is the menu itself: Title, Size (a multiple of 9), an Items section, and one or more slot lists depending on the menu (below). Inside Items, there are two kinds of entry:

  • Filler / decoration - any entry named Filler-Item (or Filler-Item2, …) with a Slots list and no Actions. Painted into its slots as background.
  • Action items - any entry with an Actions list. The menu dispatches on the action, not the item’s key, so you can rename and move these items anywhere. Give a button a different job by changing its Actions.

Slots use either Slot: (a single number) or Slots: (a list where each entry is a number or an a-b inclusive range, e.g. [10-16, 19-25]).

Title: "&8Cosmetics"
Size: 54
Cosmetic-Slots: [10-16, 19-25, 28-34, 37-43]
Items:
Filler-Item:
Material: BLACK_STAINED_GLASS_PANE
Name: "&r"
Slots: [0-9, 17-18, 26-27, 35-36, 44, 47, 49, 51, 52]
Filter:
Material: HOPPER
Slot: 45
Name: "&3&lFilter: &b{category}"
Lore:
- "{print-categories}"
- ""
- "&e➥ Click to cycle!"
Actions:
- "[cycle-filter]"
Key Menu Fills with
Cosmetic-Slots cosmetics-menu The paged cosmetic icons.
Listing-Slots cosmetics-market The paged market listings.
Preview-Slot equip-menu, confirm menus The single item being equipped / bought.

Each menu understands its own actions. Any item can carry them.

Cosmetics menu (cosmetics-menu.yml): [cycle-filter], [cycle-sort], [previous-page], [next-page], [open-market]. Clicking a cosmetic opens the equip menu if owned, otherwise flashes the Locked icon.

Equip menu (equip-menu.yml): [equip], [unequip], [sell]. The [equip] item is shown only while the cosmetic is unequipped and [unequip] only while equipped - give each its own item and the menu swaps them automatically.

Market menu (cosmetics-market.yml): [cycle-filter], [cycle-sort], [previous-page], [next-page], [search], and the pair [my-listings] / [all-listings] (toggles between your listings and everyone’s - each shows only in the opposite view).

Confirmation menus (market-confirm.yml, case-confirm.yml): [confirm] completes the purchase / case open, [cancel] returns without buying.

Available on any menu item, run when the click isn’t a built-in action:

  • [command] / [console] <cmd> - run as console
  • [player] <cmd> - run as the player
  • [message] <text> - send a chat message
  • [close] - close the menu
  • [open-cosmetics] - open the cosmetics menu
  • [open-market] - open the market

The argument is the text after ]; {player} and PlaceholderAPI %...% are resolved.

The filter and sort buttons print the list of options in their lore via these tokens, and show the current choice:

Token Shows
{category} Current filter category.
{print-categories} One line per category.
{sort} / {print-sort-types} Current / all menu sort options.
{sort-market} / {print-sort-types-market} Current / all market sort options.

Each printed line is styled by the selection formats in config.yml. Left-click cycles forward, right-click cycles backward. The list of categories and sort options themselves is set in config.yml.

market-confirm.yml and case-confirm.yml share the same layout: Title, Size, an optional Preview-Slot (the item being bought/opened), and [confirm] / [cancel] buttons. A confirm button can occupy several slots via Slots.

Title: "&8Confirm Purchase"
Size: 27
Preview-Slot: 13
Items:
Confirm:
Material: LIME_DYE
Slot: 10
Name: "&a&lConfirm Purchase"
Actions:
- "[confirm]"
Cancel:
Material: RED_DYE
Slot: 16
Name: "&c&lCancel Purchase"
Actions:
- "[cancel]"

Page-limit feedback icons (No-Previous-Page, No-Next-Page, Locked, Insufficient-Funds, Already-Owned) and the menu sounds live in config.yml, not in these files.