Style the viewer experience
Change what players see and click during playback: the hotbar controls, the action bar and progress, the sidebar, and all command messages.
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:<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.
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.
Message structure and defaults
Every role readsmessages.yml. Player and recorder use general and the role section (player / recorder); lobby message keys are at the root of its file. Comments group help, playback/recording status, catalog actions, input errors, editing and reload feedback. There is no translation registry or additional message nesting.
Defaults use English consistently: aqua for headings/actions, gray for explanations, white for values, green for success, yellow for paused/busy/nonfatal states, and red for errors or destructive actions. Help is split into readable lines; invalid pages, session UUIDs and clip numbers have specific instructions. Technical command failures show a short user message while the details go to the server log.
Configurable actions
For example, a translated action row can be:
run_command and suggest_command are used for compatibility with 1.8.8 clients. Set an action row to '' to hide the buttons; an empty save reply hides its action row as well.
Configuration key cleanup
reload-failedreplacesreload-preparation-failure; unusedreload-restart-requiredandreload-refresh-failureare removed. Reload failure does not promise that every change was rolled back.- Unused
player.list-hover,player.not-watching,player.forward-usage,player.backwards-usage, andrecorder.stopped-hoverare removed. Playback errors use the existing playback messages; skip syntax is explained in the main help. general.command-failed(player/recorder) and lobbycommand-faileddescribe unexpected command failures. Lobby has a separateno-permissionfor command permission errors, at the root of itsmessages.yml.- Player
list-usageand recorderclip-usage,invalid-clip-number,invalid-session, andreload-usageprovide focused input help.
Hotbar configuration
Player’slayout.yml has playing and hud sections. Under playing, states supplies reusable lists of text values and items defines the hotbar.
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:
Built-in hotbar actions
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.
Natural completion keeps the final scene visible and uses the paused appearance and paused HUD/sidebar text. It does not automatically return viewers to the lobby. The viewer chooses to resume/restart or stop watching.
Existing customized configuration is not overwritten. In layout.yml, update playing.items.pause.states.paused.lore to explain that resume affects all viewers and restarts after the end. Keep Stop watching text individual in playing.items.stop.appearance; the existing reverse:stop bindings already use individual exit without changing action IDs. In messages.yml, update player.help stop/resume descriptions, player.already-paused and player.paused resume hover text, and player.stopped feedback to match these semantics. Reload with /reverseplayer reload after editing.
HUD
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 underplayer.scoreboard in messages.yml, not layout.yml:
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
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.
Time placeholders accept a duration pattern directly, without a separate configuration setting:
H, m, s for hours, minutes and seconds; double a token (HH, mm, ss) for a minimum of two digits. <time:mm:ss> shows 00:21 at 21 seconds and 62:03 at 3723 seconds. <time:HH:mm:ss> shows 01:02:03 at 3723 seconds. Minutes accumulate when hours are omitted; seconds accumulate when both hours and minutes are omitted. Separators may be customized, for example <time:'mm / ss'>.
Without an argument, time placeholders use m:ss, switching to H:mm:ss at one hour. Patterns apply to HUD and scoreboard titles/lines. Existing configurations can opt in by replacing <time> with <time:mm:ss> and reloading the player.
Translation and reload
Player and recorder havegeneral 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.
For the settings that back these changes, see Configure Reverse.
