> 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/display.md).

# Hotbar, HUD, and messages

Make the viewer experience your own with controls, colors, progress, and messages.

| What you want to change            | Where to edit                                                      |
| ---------------------------------- | ------------------------------------------------------------------ |
| Playback items and click actions   | `layout.yml` → `playing`                                           |
| Action bar and experience progress | `layout.yml` → `hud`                                               |
| Sidebar                            | `messages.yml` → `player.scoreboard`                               |
| Command replies                    | Role-specific message sections                                     |
| Catalog inventories                | [Menu settings](/configure-and-customize/menus.md) in `config.yml` |

After editing, use the role's reload command. Keep a copy of a working layout so you can compare changes.

## MiniMessage

Reverse's configured display text uses MiniMessage:

```yaml
name: '<gold><bold>Replay controls'
```

Use tags such as `<yellow>`, `<bold>`, and `<gray>`. `&a`-style legacy color codes are not the intended message syntax. Replay metadata is inserted as literal text; it is not a way to inject formatting into the menu template.

{% hint style="success" %}
**Start small:** change one item name or one HUD line, reload, and check it in a replay. Once that works, customize the rest using the same pattern.
{% endhint %}

Placeholder names depend on the message or display surface. A command error's `<error>` is not automatically available to every HUD line. Start from the generated message's placeholders when translating it.

## Hotbar configuration

Player's `layout.yml` has `playing` and `hud` sections. Under `playing`, `states` supplies reusable lists of text values and `items` defines the hotbar.

```yaml
playing:
  states:
    intervals: ['1.0', '5.0', '10.0', '30.0']
    speeds: ['0.25', '0.5', '1.0', '2.0', '4.0', '8.0']
```

These are string lists. Built-in actions parse the values they own. Use positive finite speeds and nonnegative finite seek values.

Each hotbar item defines `enabled`, `slot` (1–9), a base `appearance`, optional named `states` appearances, and click `bindings`. Slots must be unique among active items.

Example of a fixed seek button under `playing.items`:

```yaml
playing:
  items:
    jump_ahead:
      enabled: true
      slot: 8
      appearance:
        material: ARROW
        data: 0
        amount: 1
        name: '<yellow>Forward 10 seconds'
        lore: ['<gray>Left click to jump forward.']
      states: {}
      bindings:
        LEFT:
          action: reverse:seek
          parameters:
            direction: forward
            seconds: '10'
```

Merge this item rather than replacing the other default controls. Slot 8 is unused by the defaults.

## Built-in hotbar actions

| Action                      | Parameters/behavior                                                                                                         |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| `reverse:pause_toggle`      | Toggles shared session pause.                                                                                               |
| `reverse:pause`             | Pauses the session.                                                                                                         |
| `reverse:resume`            | Resumes the session.                                                                                                        |
| `reverse:interval_next`     | Cycles the item's selected seek interval.                                                                                   |
| `reverse:interval_previous` | Cycles the interval in the opposite direction.                                                                              |
| `reverse:speed_increase`    | Selects a faster configured speed where available.                                                                          |
| `reverse:speed_decrease`    | Selects a slower configured speed where available.                                                                          |
| `reverse:speed_set`         | `speed`: explicit positive finite speed.                                                                                    |
| `reverse:seek`              | `direction`: `forward`/`backwards`; optional `seconds` and `ticks`. Without explicit magnitude, uses the selected interval. |
| `reverse:stop`              | Stops the session.                                                                                                          |

Hotbar items can show `<seconds>` for the chosen seek interval and `<speed>` for session speed. A `paused` appearance can replace a pause item's normal appearance. Extensions may register more actions; see [UI integrations](/api-how-to-guides/ui-extensions.md).

## HUD

```yaml
hud:
  action-bar: '<gray><state> <white><time>/<playback_total> <gray><speed>x'
  playing-text: '<green>playing'
  paused-text: '<red>paused'
  experience-bar: true
```

Set `action-bar: ''` to disable the text. Set `experience-bar: false` to disable the experience progress output. Disabling an already enabled HUD through reload clears its previous output.

## Sidebar

The player's sidebar is under `player.scoreboard` in **`messages.yml`**, not `layout.yml`:

```yaml
player:
  scoreboard:
    enabled: true
    title: '<gold><bold>REPLAY'
    lines:
      - '<white>Time: <yellow><time>/<playback_total>'
      - '<white>Recorded: <yellow><duration>'
      - '<white>Speed: <yellow><speed>x'
      - '<white>State: <state>'
    playing-text: '<green>Playing'
    paused-text: '<red>Paused'
```

Set `enabled: false` to remove the sidebar. Empty title/lines are permitted but are not the same as disabling it. Lines beyond the client's supported limit are dropped with a log warning.

## Session placeholders

| Placeholder             | Meaning                                              |
| ----------------------- | ---------------------------------------------------- |
| `<speed>`               | Session speed multiplier.                            |
| `<time>`                | Current replay timeline time.                        |
| `<total>`, `<duration>` | Recorded wall-clock duration.                        |
| `<playback_total>`      | Playable timeline extent.                            |
| `<ticks>`               | Current tick.                                        |
| `<total_ticks>`         | Timeline tick count including tick 0 and final tick. |
| `<percent>`             | Formatted progress percentage.                       |
| `<state>`               | Configured playing/paused text for that surface.     |

Use `<playback_total>` beside `<time>` for a meaningful playback progress line. Use `<duration>` when you want to show how long recording lasted in real time.

## Translation and reload

Player and recorder have `general` and role-specific message sections. Lobby has messages inside its main configuration. Keep the existing structure and preserve placeholder names while translating the surrounding text.

Run the role's reload command after editing. Player reload refreshes active session display. Restart is still needed for underlying storage/network/world choices. Other plugins that continuously write the same hotbar, action bar, XP bar, or scoreboard can conflict; test those combinations explicitly.

{% content-ref url="/pages/DS9lJU3axZUuD438vhEu" %}
[Configuration](/configure-and-customize/configuration.md)
{% endcontent-ref %}


---

# 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/display.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.
