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.
- The admin GUI scrolls the same option: Settings,
General, Server, language. Editing
config.ymlby hand works as well; run/manhunt reloadafterwards. - 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.languagekey 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 reloadlike 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
overridesblock 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.
- 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
100example ongame.kill.self-linesso the shape is visible; run/manhunt reloadafter 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 overridewhatphrases, and the challenges card tokens.upsellsubjects 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-guisetting-namesandsetting-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.ymltolang/<code>.yml, translate the values, then point the option at your file by editingconfig.ymland 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
generalsection with care:date-formatis thejava.timepattern behindgeneral_date, anddate-zoneis the IANA timezone behindgeneral_dateandgeneral_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.