Skip to content

Messages

Quick Start: Pick your goal.

Every chat line, actionbar, title, and GUI label the engine sends lives in one YAML file per language under lang/ in the data folder (plugins/JManhunt/lang/). English generates from built-in defaults on first run; the bundled translations copy over the first time you select them.

Setting value File Language
EN_US (default) lang/en-us.yml English
ES_ES lang/es-es.yml Spanish
DE_DE lang/de-de.yml German
FI_FI lang/fi-fi.yml Finnish
ZH_CN lang/zh-cn.yml Chinese (Simplified)
RU_RU lang/ru-ru.yml Russian

Switching Language

The settings.server.language option holds the active language. Bare EN, ES, DE, FI, ZH, and RU work too, in any letter case. Switching is live: messages rebind the moment the value changes, with no restart.

/manhunt config settings server language FI
  • The admin GUI scrolls the same option: Settings, General, Server, language. Editing config.yml by hand works as well; run /manhunt reload afterwards.
  • Lobby overrides of this option are stored but have no effect, since messages are global.
  • Upgrading servers re-apply the value once: the old settings.server.announce.language key is retired and dropped on load.

Per-player Language

Players keep their own language on top of the server one. The settings head in the lobby toolbar opens the lobby settings panel, where the Earth head leads to the language submenu: English, Español, Deutsch, Suomi, 中文, Русский, or the server default. The same toggle lives on the command line:

/manhunt language        # show your current language
/manhunt language fi     # menus and messages in Finnish
/manhunt language default

The override translates nearly everything each recipient sees:

  • Lobby surfaces: toolbar buttons, the settings panel, the quick-match browser, the lobby switcher, and the cosmetics menus, plus the direct replies those send.
  • Match queue: the queue actionbar, join and leave confirmations, reminders, needs-players notices, pad chat, autostart countdowns, and party gate feedback.
  • Match lifecycle: join and leave announcements, eliminations, death lines, respawn notices, role changes, headstart and limbo countdowns, spectator transfers, and match start, cancel, and time-limit notices. The console keeps the server language.
  • Party, ranked, and tournament notices: party invites and roster lines, ranked gain and loss summaries, tournament registration and round notices, series scores, standings, and the tournament summary.
  • Lobby join and leave announcements, role pad feedback, and compass teammate and lock lines.
  • Match and modifier GUIs, admin GUIs, and the remaining broadcasts: menu titles, button names and lore, setting dialogs, history and summary renders, compass actionbars, team chat, the autostart shortfall nag, and tournament history. Only the debug channel stays on the server language.

  • The choice persists across restarts and follows /manhunt reload like any other text.

  • Brand-new players skip the choice when their Minecraft client already speaks a shipped language: the first join adopts the client locale automatically, and anything without a translation follows the server language.

Formatting Rules

Messages use MiniMessage formatting. Classic & color codes (like &7 or &6) still work anywhere: they convert automatically. Placeholder formatting in config.yml follows the same rules. Changes apply after /manhunt reload.

  • Set any message to an empty string ("") to disable it: it will never be sent. (A single space still counts as a message.)
  • Each role's color lives under role-colors: as one key per role, used by role headers and every message that names a role; & codes work there too.
  • The top-level error-color: key recolors every engine error line at once.
  • The top-level plain-color: key recolors the plain body of engine messages the same way. It never resets, so text keeps the color until another tag overrides it.

Editing Messages

Keep every {placeholder} and <tag> exactly where it is: they carry names, counts, colors, and timings into the rendered line. Colors and emoji stay as written; only the surrounding words change. The formatting rules above apply to every language.

New engine keys land in English: a translated file that misses a key reads the English default for it until you translate the new line. Switching languages never leaks words across: every load starts from the English defaults, then the selected file overlays its translations.

Message Overrides (Per Lobby)

  • The overrides block at the bottom of each lang file swaps messages for one lobby: the lobby id first, then the same nesting as the file itself, with text or text lists as leaves.
  • The file itself is the global: lobbies without a block read the base lines.
  • Only the active server-language file's overrides take effect, and a malformed block logs a warning on load and reads the base lines.
overrides:
  "2":
    game:
      kill:
        self-lines:
        - "tripped over the reindeer"
        - "ate too many candy canes"
  • Two surfaces honor overrides today: the kill line pools (game.kill.self-lines, fallback-lines, runner-victim-lines, hunter-victim-lines, friendly-fire-lines) and the film narration (cinematic-messages.messages).
  • A non-empty override replaces the whole pool for that lobby. Every file ships a lobby 100 example on game.kill.self-lines so the shape is visible; run /manhunt reload after editing.

Shared Words

Single words that code inserts into templates live in their own sections, so one translation covers every line that uses them. Translate the values, never rename keys or drop a {slot}.

  • role-names: one display name, plural, and mid-sentence plural per role. The mid-sentence plural reads inside flowing text (German and Finnish nouns keep their capitals there).
  • words: list separators, on/off states, the count-part template ({word}, {middle}, {role}), the digits zero to nine, the modifier and preset nouns, the setting bound phrases behind {bounds}, plus the status details and states, the override what phrases, and the challenges card tokens.
  • upsell subjects and blockers: the named reasons behind every paid-edition refusal ({count}, {unit}, {role}, {roles}, {tag}, {key}, {name}, {group}, {id}, {lobby}, {attribute}).
  • Skip reasons, schematic counts, death-suffix words, GUI confirm words, ordinal suffixes, and override modes sit with their own sections next to the templates that use them.
  • manhunt-gui setting-names and setting-descriptions: the button name and one-line lore behind every native settings path, including the JMHScript option types and the icon-data help. Keys use slashes (settings/match/start), never dots: Bukkit would read dotted keys as nested sections and the lookup would miss. Translate the values, never rename a key.

Custom Languages

  • Copy lang/en-us.yml to lang/<code>.yml, translate the values, then point the option at your file by editing config.yml and reloading.
  • The command and GUI only offer the four bundled options; hand edits accept any code. A code with no file warns and falls back to English.
  • Fill in the general section with care: date-format is the java.time pattern behind general_date, and date-zone is the IANA timezone behind general_date and general_time, ideally your language's most popular zone. Unknown zones fall back to the server timezone, then to UTC.

Legacy messages.yml

The single messages.yml is retired: it is never read, and startup logs one warning when it still exists. Re-apply any tweaks from it under lang/ and delete it when done.