Skip to content

theme.yml

The look of the whole plugin: its colours by role, its message prefix, its menus. Every text the plugin shows — lang/en.yml, the scoreboard, menus, holograms, the names and lines of the other files — is written with the theme's tokens instead of colour codes: change a colour here and it changes everywhere at once.

How it plays: Chat, scoreboard and settings

Theme Builder

Design it with live previews, and download the files: Theme Builder.

Every example on this page is taken from the shipped theme.yml. Changes apply with /hcf reload.

Colours

theme.yml
colors:
  primary: "#F5B32E"
  secondary: "#FFE39A"
  text: "#F7F1E3"
  muted: "#B3A88F"
  dark: "#5E5540"
  success: "#8CE36B"
  error: "#F2594B"
  warning: "#FFD24A"

Each role is a hex colour, #rrggbb — or a gradient, two colours or more: "#F5B32E>#FF4D3D", "#5EF0A8>#56C8FF>#B07CFF". The text a gradient colours fades from one to the next, letter by letter, up to the next colour change; a bold or an underline inside it stays on every letter. A gradient suits primary best — the prefix, titles and scoreboard labels — and reads badly on a long sentence.

A text uses a role as a token:

Token As shipped Used for
{primary} #F5B32E gold The prefix, titles, names, scoreboard labels
{secondary} #FFE39A cream Values: players, teams, numbers, times
{text} #F7F1E3 The body of a message, chat
{muted} #B3A88F Secondary information, item descriptions
{dark} #5E5540 Brackets, separators, the list symbol
{success} #8CE36B Something done
{error} #F2594B Something refused, a cooldown
{warning} #FFD24A Announcements, events, a cooldown running

Legacy codes (&a, &l, &r...) still work anywhere, and so does a hex colour of your own written &#rrggbb. A brace a player types — in chat, a ticket — is never read as a token.

Prefix, list symbol, titles

theme.yml
# Starts the announcements - events, the map's phases, a team's own news - and
# any message you add it to with {prefix}.
prefix: "{primary}&lHCF&r{dark} » "
# The list symbol: scoreboard rows, event lines.
bullet: "➥"
# Menu and scoreboard titles in small capitals: ᴀʙɪʟɪᴛɪᴇꜱ.
small-caps-titles: true
Key As shipped What it does
prefix HCF » in bold gold What {prefix} becomes. The shipped messages put it on the announcements: events, the map's phases, a team's own news (a member joined, an ally, a focus, a rally, raidable). Add it to any message you like
bullet ➥ What {bullet} becomes: the scoreboard's Label ➥ value rows, event lines
small-caps-titles true Menu and scoreboard titles in small capitals: ᴀʙɪʟɪᴛɪᴇꜱ
theme.yml
menus:
  # full: panes all around the menu; bars: the top and bottom rows; none.
  frame: full
  # The frame's pane and the four corners'.
  pane: BLACK_STAINED_GLASS_PANE
  corner-pane: YELLOW_STAINED_GLASS_PANE
  # What starts the line of an item saying what a click does.
  action: "» "
Key As shipped What it does
frame full full: panes all around the menu; bars: the top and bottom rows; none
pane · corner-pane black · yellow stained glass The frame's pane and the four corners'. Panes show no tooltip
action » What {action} becomes: the start of an item's "click to" line

Every menu — /settings, /ability, the Pocket Bard, /dyes, /tickets, the kit layout editor — places its items centred inside the frame, a few spread out on one row. When they do not fit, the menu has pages, with arrows in its bottom row. The Pocket Bard's sets sit at the slots abilities.yml gives them, the frame going around them. The page arrows, and the line under an item's name, are in lang/en.yml under menus.

A whole look in one file

theme.yml
# A theme can carry a whole look, so one file is all a server needs to import.
# Each section below is optional; what it sets is used in place of the other
# file's, and what it leaves out stays theirs.
#
# messages:          any text of lang/en.yml, by its key - nested or dotted
#   menus:
#     next: "{primary}Next »"
#   team.chat.format-team: "{primary}[Team] {secondary}%player%{dark}: {text}%message%"
#
# chat:              chat.yml's line format
#   format: "%kills%%prefix%{text}%player%%suffix%{dark}: {text}%message%"
#   kills-format: "{dark}[{primary}%value%{dark}]&r "
#
# nametags:          apollo.yml's nametags (Lunar Client)
#   team-line: "%color%%team% {dark}| {warning}%dtr%"
#   name-line: "%color%%player%"
#   colors:
#     self: "&a"
#     ally: "&9"
#     enemy: "&c"
#     focus: "&d"
#     neutral: "&f"
#
# schedule-colors:   events.yml's weekly-schedule.menu.colors - each event's colour
#   koth: "&6"       in /schedule, by kind or by an event's id (an id wins)
#   citadel: "&5"

A theme may also carry what other files hold, so one theme.yml is all a server imports. Each section is optional; what it sets is used in place of the other file's, what it leaves out stays theirs:

Section In place of Holds
messages lang/en.yml Any text, by its key — nested as in lang/en.yml, or dotted on one line
chat chat.yml format, kills-format: how a chat line looks
nametags apollo.yml team-line, name-line, colors by relation: the Lunar Client nametags
schedule-colors events.yml weekly-schedule.menu.colors Each kind of event's colour in /schedule, by kind or by an event's id — an id wins

Everything you can change in the interfaces

Interface What Where In the Theme Builder
Every text Colours by role, gradients, the prefix, the list symbol theme.yml ✓
Chat A player's line, the kills badge chat.yml (format, kills-format), or theme.yml chat ✓
Chat Team and ally chat lang/en.yml team.chat, or theme.yml messages ✓
Chat Every message's wording and colours lang/en.yml, or theme.yml messages ✓
Menus Frame, panes, "click to" line, small-capital titles theme.yml menus, small-caps-titles ✓
Menus Page arrows, page line, the line under a name lang/en.yml menus, or theme.yml messages ✓
Menus /settings, /dyes, /tickets, kit layout, /leaderboard, /schedule titles and lines lang/en.yml (settings, classes.dyes, staff.ticket.menu, kit.layout, stats.top, events.planning), or theme.yml messages ✓
Menus /leaderboard's items, how many places ui.yml leaderboard-menu ✓
Menus Each kind of event's colour in /schedule events.yml weekly-schedule.menu.colors, or theme.yml schedule-colors ✓
Menus /ability and Pocket Bard titles, the Pocket Bard's slots abilities.yml (menu-title, pocket-bard) —
Menus Which /settings switches exist, in which order settings.yml offered —
Scoreboard On or off, refresh, title, rows, sections ui.yml scoreboard ✓
Scoreboard Each ready-made row (%combat_line%...) lang/en.yml ui.scoreboard, classes.scoreboard, or theme.yml messages ✓
Signs Kit and [Refill] signs' first line, elevators', death and event signs' lines lang/en.yml (kit.sign.header, elevator.sign, pvp.death-sign, events.capture-sign), or theme.yml messages ✓
Tab list On or off, header, footer ui.yml tablist ✓
Nametags Team line, name line, colour by relation (Lunar Client) apollo.yml nametags, or theme.yml nametags ✓
Holograms Capture zones' title and lines lang/en.yml events.hologram, or theme.yml messages ✓
Holograms Your own holograms in game, /hologram (Holograms) —
Items Partner items', kits', the crowbar's, the staff toolbar's names and lore abilities.yml, kits.yml, crowbar.yml, staff.yml the tokens

The Theme Builder writes a complete theme.yml and ui.yml; what it leaves at its shipped value, it leaves out of messages, chat, nametags and schedule-colors, so the other files keep theirs. Any message can be reworded there. It reads an existing theme.yml back, and a link like …/theme-builder.html?palette=aurora opens it on one of its 14 palettes.

The whole shipped file

View it on GitHub.

theme.yml
# ---------------------------------------------------------------------------
# theme.yml - the look of the whole plugin
#
# Every text the plugin shows - lang/en.yml, and the names and lines of the other
# files - can use these tokens instead of colour codes:
#
#   {primary}    the main colour: the prefix, titles, names
#   {secondary}  values: players, teams, numbers, times
#   {text}       the body of a message
#   {muted}      secondary information, item descriptions
#   {dark}       brackets and separators
#   {success}    something done
#   {error}      something refused
#   {warning}    announcements and events
#   {prefix}     the message prefix below
#   {bullet}     the list symbol below
#
# Change a colour here and it changes everywhere at once. Legacy codes (&a,
# &l...) and hex colours written as &#rrggbb still work anywhere.
#
# A colour may be a gradient: two colours or more, "#F5B32E>#FF4D3D". The text
# it colours fades from one to the next, letter by letter.
#
# Design yours with live previews, and download this file, with the Theme
# Builder: https://lawkeys-dev.github.io/hcf-core/tools/theme-builder.html
#
# /hcf reload applies changes. Lines "# --8<-- [start:...]" and "# --8<--
# [end:...]" mark the parts the online documentation quotes from this file.
# ---------------------------------------------------------------------------

colors:
  primary: "#F5B32E"
  secondary: "#FFE39A"
  text: "#F7F1E3"
  muted: "#B3A88F"
  dark: "#5E5540"
  success: "#8CE36B"
  error: "#F2594B"
  warning: "#FFD24A"

# Starts the announcements - events, the map's phases, a team's own news - and
# any message you add it to with {prefix}.
prefix: "{primary}&lHCF&r{dark} » "
# The list symbol: scoreboard rows, event lines.
bullet: "➥"
# Menu and scoreboard titles in small capitals: ᴀʙɪʟɪᴛɪᴇꜱ.
small-caps-titles: true

menus:
  # full: panes all around the menu; bars: the top and bottom rows; none.
  frame: full
  # The frame's pane and the four corners'.
  pane: BLACK_STAINED_GLASS_PANE
  corner-pane: YELLOW_STAINED_GLASS_PANE
  # What starts the line of an item saying what a click does.
  action: "» "

# A theme can carry a whole look, so one file is all a server needs to import.
# Each section below is optional; what it sets is used in place of the other
# file's, and what it leaves out stays theirs.
#
# messages:          any text of lang/en.yml, by its key - nested or dotted
#   menus:
#     next: "{primary}Next »"
#   team.chat.format-team: "{primary}[Team] {secondary}%player%{dark}: {text}%message%"
#
# chat:              chat.yml's line format
#   format: "%kills%%prefix%{text}%player%%suffix%{dark}: {text}%message%"
#   kills-format: "{dark}[{primary}%value%{dark}]&r "
#
# nametags:          apollo.yml's nametags (Lunar Client)
#   team-line: "%color%%team% {dark}| {warning}%dtr%"
#   name-line: "%color%%player%"
#   colors:
#     self: "&a"
#     ally: "&9"
#     enemy: "&c"
#     focus: "&d"
#     neutral: "&f"
#
# schedule-colors:   events.yml's weekly-schedule.menu.colors - each event's colour
#   koth: "&6"       in /schedule, by kind or by an event's id (an id wins)
#   citadel: "&5"