Menu Customization

Every chest GUI IgniteSky opens is backed by an editable file in gui/, one per menu. You can retitle a menu, resize it, recolour its frame, and move, reskin or rename any icon - without touching code and without a separate menu plugin. Edits are picked up on /is admin reload.

How it works

Each menu reads its layout file and falls back to a sensible built-in default for anything the file leaves out. That means a file can be empty, half-filled, or fully customised, and the menu still works. Delete a file entirely and the menu uses its defaults.

Bedrock players get native forms

With Geyser + Floodgate installed, Bedrock players see these chest menus as native Cumulus forms: every clickable icon becomes a button that runs the same action. No setup is needed and Java players are unaffected; without Floodgate everyone gets the normal chest GUI.

gui/main.yml
title: "<gradient:#00c6ff:#0072ff>Your Island</gradient>"   # MiniMessage; omit for the language-file title
rows: 6                       # menu height in rows (1-6)
border: CYAN_STAINED_GLASS_PANE   # frame material; omit for no recolour
filler: GRAY_STAINED_GLASS_PANE   # backdrop material for empty slots
 
items:
  info:
    slot: 13                  # where the icon sits (0-based)
    material: PLAYER_HEAD     # icon material
    name: "<gold>My Island"   # MiniMessage override; omit to keep the translated name
    lore:                     # MiniMessage lines; omit to keep the translated lore
      - "<gray>Everything about your island."
    glow: true                # add an enchant glint (no real enchantment)

Per-menu keys

KeyMeaning
titleMiniMessage menu title. Omit to use the language file's title.
rowsMenu height, 1-6. Omit for the menu's default size.
borderFrame (outer ring) material. Omit to leave the default framing.
fillerBackdrop material for otherwise-empty slots.
items.<key>.slot0-based slot for that element.
items.<key>.materialIcon material.
items.<key>.nameMiniMessage name override (else the translated name).
items.<key>.loreMiniMessage lore lines (else the translated lore).
items.<key>.glowtrue to add an enchant glint.

Item name and lore are intentionally optional: leave them out and the icon keeps its translated text from lang/<code>.yml, so a layout file can stay purely about slots, materials and glow if you only want to rearrange.

Data-driven entries

Menus that list generated content - block values, block counts, the bank ledger, public warps, the leaderboard - build those entries from live data, so the file controls the frame (title, size, filler) and the navigation icons rather than every cell.

Which menus

Every menu has a file: main, mode-select, map-select, confirm, members, member-action, invite, bank, banklogs, warps, public-warps, top, upgrades, missions, counts, values, bans, coop, settings, rating, visitors, snapshot, skill-tree, guestbook, cosmetics, prestige, prestige-top. The bundled defaults are written to gui/ on first run, so you always have a working file to edit.

Native dialogs sit on top

Some surfaces (settings, confirmations, the admin editor) can render as native dialogs instead of chest menus on Paper 1.21.7+. When dialogs are off, or on an older client, they fall back to these chest layouts.

Custom menus (build your own)

Beyond restyling the built-in menus, you can define entirely new menus in menus.yml -slots, items, click actions and requirements -and open them with /is menu <id>. No code, no second plugin. Use it for a server hub, a rules book, an info panel, a custom shop front, or a staff toolbox.

menus.yml
menus:
  hub:
    title: "<gradient:#3bb2ff:#9b6bff>Server Hub</gradient>"
    size: 27
    items:
      island:
        slot: 11
        item: { material: GRASS_BLOCK, name: "<green>My Island" }
        actions:
          go: { type: PLAYER_COMMAND, command: "is home" }
          close: { type: CLOSE_MENU }
      shop:
        slot: 13
        item: { material: EMERALD, name: "<yellow>Shop" }
        requirements:
          perm: { type: PERMISSION, permission: "server.shop" }
        actions:
          open: { type: PLAYER_COMMAND, command: "shop" }

Each item can carry requirements (gates that hide/deny the action) and actions (what a click does). Both are named maps, not lists.

ActionsRequirements
CLOSE_MENU · COMMAND · CONSOLE_COMMAND · PLAYER_COMMAND · MESSAGE · ACTION_BAR · PLAY_SOUND · OPEN_MENU · GIVE_ITEM · TAKE_ITEM · TELEPORT · BROADCAST · TITLE · BACK · REFRESHPERMISSION · NO_PERMISSION · LEVEL · HAS_ITEM · RATE_LIMIT · PLACEHOLDER_EQUALS

OPEN_MENU chains to another menu id, and RATE_LIMIT lets a button self-throttle (e.g. a daily reward). This complements the built-in menus rather than replacing them.