Skip to content

category-menu.yml

The paged category view - entry slots, discovered and undiscovered entry formats, dates, filters, buttons and tokens.

guis/category-menu.yml is the layout every category opens in. It is shared by all categories; only the title comes from each category file. After editing, run /indexadmin reload.

Pressing Esc in a category menu returns to the main menu it was opened from.

Size: 54
Entry-Slots: [10-16, 19-25, 28-34, 37-43]
Key Default Description
Size 54 Menu size, a multiple of 9.
Entry-Slots [10-16, 19-25, 28-34, 37-43] The slots entries are placed in, in order. Each page holds as many entries as there are slots here (28 by default). Numbers or a-b ranges.

There is no Title key here; leave it out so each category’s own Title is used.

Like the main menu, this file is read without filling in defaults, so a key you delete stays deleted. Every required section below is checked on load.

How each entry looks. The icon’s material is always the entry’s own item; this section sets the text and look for the two states.

Entry-Format:
Undiscovered:
Name: "&c&l{item}"
Item-Flags: [HIDE_ADDITIONAL_TOOLTIP, HIDE_ATTRIBUTES]
Lore:
- "&7Pick up this item anywhere"
- "&7in the world to discover it."
- ""
- "&cInformation:"
- "&4 - &7Found by: &f{found} &7players"
- ""
- "&c&lUNDISCOVERED"
Discovered:
Name: "&a&l{item}"
Glow: true
Item-Flags: [HIDE_ADDITIONAL_TOOLTIP, HIDE_ATTRIBUTES]
Lore:
- "&7You have already discovered"
- "&7this item for your index."
- ""
- "&aInformation:"
- "&2 - &7Discovered: &f{time-ago}"
- "&2 - &7Date: &f{date}"
- "&2 - &7Found by: &f{found} &7players"
- ""
- "&a&lDISCOVERED"
Key Required Description
Name yes The icon name.
Lore no Lore lines.
Glow no Enchant glint. Default false.
Item-Flags no Bukkit item flags to hide tooltip parts. An unknown flag fails the load.

Both Undiscovered and Discovered are required. Clicking an entry does nothing.

Date-Format: "{day} MMM yyyy '@' h:mma"

The {date} token on discovered entries. A Java date pattern (dd, MM, MMM, yyyy, HH, mm, h, a, …, with literal text in single quotes), plus {day} for the day of the month as an ordinal (1st, 2nd, 23rd). The default prints 2nd Mar 2026 @ 4:05PM. Dates use the server’s timezone and English month names.

Time-Ago:
Seconds: "{amount}s ago"
Minutes: "{amount}m ago"
Hours: "{amount}h ago"
Days: "{amount}d ago"
Month: "{amount} month ago"
Months: "{amount} months ago"
Year: "{amount} year ago"
Years: "{amount} years ago"

The {time-ago} token on discovered entries. The largest unit that fits is used, with {amount} as the count. Month and Year are the singular forms, used when the amount is 1. A month is 30 days and a year 365. All eight keys are required.

Filters:
Selected: "&5 - &f&l{filter}"
Unselected: "&5 - &7{filter}"
Names:
ALL: "All"
FOUND: "Found"
NOT-FOUND: "Not Found"

The filter decides which entries the menu shows: ALL, only FOUND (discovered) or only NOT-FOUND. Every category opens on ALL.

Key Description
Selected The {filters} line for the active filter. {filter} is its name.
Unselected The {filters} line for every other filter.
Names.ALL, Names.FOUND, Names.NOT-FOUND The filter names, used in {filter}. All three are required.

{filters} is a list token: put it alone on a lore line and it expands to one line per filter, in the order All, Found, Not Found.

Buttons and background, in the same format as the main menu: Slot/Slots, the standard item fields, an optional Head-Owner (TARGET or VIEWER) and an Actions list. When items overlap, the item with the fewest slots wins, and entries are drawn on top of the entry slots.

Key Slot Does
Filler-Item 0-53 Black glass background.
Barrier-Item 10-16, 19-25, 28-34, 37-43 Glass panes under the entry slots, visible on a page that is not full.
Progress-Item 4 The category name, target and progress.
Back-Item 45 [main] - back to the main menu.
Previous-Item 48 [previous].
Page-Indicator 49 Shows {page} of {pages}.
Next-Item 50 [next].
Filter-Item 53 [filter], with the {filters} list in its lore.
Action Does
[main] Open the main menu of the same index (yours, or the player you are viewing).
[previous] / [next] Turn the page ([previous-page] / [next-page] also work). On the first or last page, the button flashes its temporary icon and plays NO-PAGE-FOUND.
[filter] Left-click cycles the filter forward, right-click backwards. Goes back to page 1 and plays FILTER-CHANGED.
[close] Close the menu for good (no return to the main menu).
[back] Go back to the main menu it was opened from.

The generic actions from the main menu ([console], [player], [message], [broadcast], [actionbar], [title], [sound]) work here too. See main menu actions.

Page buttons are always drawn, even when there is only one page.

Temporary-Icons:
No-Previous-Page:
Material: BARRIER
Name: "&c&lError!"
Lore:
- "&7You are already on the first page!"
No-Next-Page:
Material: BARRIER
Name: "&c&lError!"
Lore:
- "&7You are already on the last page!"
Key Flashed when
No-Previous-Page [previous] is clicked on the first page.
No-Next-Page [next] is clicked on the last page.

The icon replaces the clicked button for about two seconds, then the button comes back. Clicks on a flashing slot are ignored.

The category menu does not get the index-wide tokens of the main menu ({discovered}, {rank}, {leaderboard}, …). Every item gets:

Token Value
{player}, {viewer} The player looking at the menu.
{target} The player whose index is shown.
{category} The category’s Display-Name.
{collected} Entries of this category the target has discovered.
{category-total} Entries in this category.
{category-percentage} The target’s completion of this category, rounded down.
{filter} The active filter’s name.
{filters} List token: every filter, formatted with Filters.Selected / Unselected.
{page}, {pages} The current page and the page count ({max-page} is the same as {pages}).
{results} How many entries the active filter shows.

Entry icons get all of the above, plus:

Token Value State
{item} The entry’s name. Both
{found} How many players have discovered this entry. Updated with the leaderboard, so it can lag by up to Leaderboard.Refresh-Interval. Both
{date} When the target discovered it, in Date-Format. Discovered
{time-ago} How long ago, in Time-Ago. Discovered

The menu title comes from the category file and is fixed when the menu opens, so it cannot show {page}. Use the Page-Indicator item for that.