> For the complete documentation index, see [llms.txt](https://docs.marioded.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.marioded.com/configure-and-customize/menus.md).

# Catalog menus

Customize the replay catalog, details screen, buttons, and navigation.

**Edit:** `gui` in the role's `config.yml` · **Apply:** the role's reload command

The lobby and standalone player use the same menu configuration model. Their Watch action differs: lobby dispatches to another server; standalone player starts local playback.

## Where to configure menus

Edit `gui.catalog` and `gui.details` in that role's `config.yml`. Player creates this GUI only when availability is disabled at startup. Recorder does not have catalog menus.

Each menu has:

| Field    | Meaning                                                         |
| -------- | --------------------------------------------------------------- |
| `title`  | Inventory title, with MiniMessage formatting.                   |
| `layout` | Rows of nine characters; `x` marks paginated replay-card slots. |
| `items`  | Map of named configured item definitions.                       |

The default catalog has six rows: five rows of replay cards and a navigation row. The default details menu has three rows, information at slot 13, Watch at 11, and Back at 22.

{% hint style="info" %}
**Menu slots start at 0.** The player hotbar uses slots 1–9 instead. Keep this difference in mind when copying a slot number between guides.
{% endhint %}

## Item fields

| Field          | Meaning                                                                   |
| -------------- | ------------------------------------------------------------------------- |
| `slot`         | Fixed zero-based inventory slot; absent/null for the repeated entry item. |
| `entry`        | Whether this is the catalog's repeated replay card.                       |
| `visible-in`   | State names that must all be active. Empty means always visible.          |
| `material`     | Bukkit material name supported by the target server.                      |
| `amount`       | Stack amount; defaults to 1.                                              |
| `data`         | Legacy item damage/data, default 0.                                       |
| `name`, `lore` | MiniMessage display text.                                                 |
| `flags`        | Item flag names, such as `HIDE_ATTRIBUTES`.                               |
| `action`       | Namespaced action identifier; empty means no click action.                |
| `parameters`   | String key/value parameters for that action.                              |

Unknown/AIR item materials fall back to stone in the current menu item builder. Use the material names available on your actual server instead of relying on this fallback.

## Add a delete button

Merge an item under `gui.details.items`:

```yaml
gui:
  details:
    items:
      delete:
        slot: 15
        entry: false
        visible-in: [ready]
        material: BARRIER
        amount: 1
        data: 0
        name: '<red>Delete recording'
        lore:
          - '<gray>Deletes the selected replay.'
        flags: []
        action: reverse:delete
        parameters: {}
```

The standard registry includes deletion, but the default details menu does not place a delete button. This example invokes deletion directly; it does not add a separate confirmation dialog. Deletion still performs an authoritative catalog access check.

## Built-in actions

| Action                  | Effect                                                            |
| ----------------------- | ----------------------------------------------------------------- |
| `reverse:close`         | Closes the current menu.                                          |
| `reverse:back`          | Returns through menu navigation.                                  |
| `reverse:details`       | Opens details for the selected replay.                            |
| `reverse:page_previous` | Previous catalog page.                                            |
| `reverse:page_next`     | Next catalog page.                                                |
| `reverse:watch`         | Local playback or lobby dispatch, according to the owning plugin. |
| `reverse:delete`        | Authorized deletion of the selected replay.                       |

Actions needing a replay belong on replay cards/details, not arbitrary catalog background items with no selection. Third-party plugins can register their own IDs using the [menu API](/api-how-to-guides/ui-extensions.md).

## Visibility states

Catalog states include `loading`, `empty`, `ready`, `can-back`, and `can-advance`. Details use `loading`, `empty`, and `ready`.

The list is an **AND** condition. `[ready, can-advance]` requires both. `[loading, ready]` usually describes mutually exclusive states and is not “loading or ready.” Use separate items if you need alternative states.

## Placeholders

| Placeholder     | Value                                                     |
| --------------- | --------------------------------------------------------- |
| `<name>`        | Literal replay name, or a date-based fallback if unnamed. |
| `<description>` | Literal replay description.                               |
| `<id>`          | Replay UUID.                                              |
| `<date>`        | Start time formatted in UTC.                              |
| `<duration>`    | Recorded wall-clock duration as hours:minutes:seconds.    |
| `<world>`       | Terrain identifier, not necessarily a Bukkit world name.  |
| `<owners>`      | Comma-separated owner UUIDs.                              |
| `<page>`        | Current displayed catalog page.                           |

Specific views can supply additional values, such as the details view's `<watch>` text. Replay names/descriptions are inserted as literal data, not parsed as MiniMessage instructions.

## Reloading

Use `/reverselobby reload` or `/reverseplayer reload` after editing. Reopen a menu to inspect changes and to see fresh metadata. A malformed menu can reject configuration preparation; check the log rather than repeatedly deleting the configuration file.

## Next steps

* [Style the playback hotbar and HUD](/configure-and-customize/display.md).
* [Register your own menu action](/api-how-to-guides/ui-extensions.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.marioded.com/configure-and-customize/menus.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
