Match End¶
Quick Start: Run your first match.
What players see and where they go at the end: limbo notes, announcements, end delay, and disconnect handling.
Limbo Feedback¶
Players waiting to spawn (headstart holds, join holds, respawn waits) see personal return notes on the countdown marks. The match sees a solo note with the waiter's role color when exactly one waits; two or more waiting players broadcast a headcount instead, at most every:
- Waiting players hear only their personal notes; the solo, headcount, and headstart broadcasts skip them (the countdown sound still plays match-wide). Every spawn announces in chat.
- The final seconds also show as big title numbers to each waiting player, counting down in their own view:
- The number blends from
announce.countdown.lower-colorat 1 toannounce.countdown.upper-colorat the titled max (middle numbers interpolate; with a max of 1 the lower color always shows). Each titled number plays both the standard countdown sound andsounds.game.limbo-countdown. The title clears the moment the wait ends.
Role Announcement¶
Every participant learns their own role the moment a match starts, as a title with a sound (chat is off by default). All three toggle independently:
settings:
players:
identity:
announce-roles:
chat:
enabled: false
title:
enabled: true
timing:
fade-in-seconds: 0.0
stay-seconds: 3.0
fade-out-seconds: 0.35
glow:
role-enabled: true
victory-enabled: true
defeat-enabled: false
cancelled-enabled: false
mode: WAVE # WAVE or LINEAR
radius: 0.3 # 0 to 1 across the title
max-blend: 0.8 # strongest glow, 0 to 1
sounds:
enabled: true
- Runs before the pre-start window opens, so players always learn their
roles before anything can happen. Spectators are announced too; only
noneandafkplayers are skipped. - Each role hears its own sound (
sounds.announce.*). When both chat and title are disabled, no announcement plays at all. Players who join mid-match hear the same announcement for their own role.
Each role title lives under announce.<role> in the active lang file with
a title and a subtitle ({rolecolor} is the role color):
announce:
hunter:
title: "<#db3540>⚔ <bold>{rolecolor}HUNTER</bold> <#db3540>⚔"
subtitle: "<#dedcd5>Kill all Runners"
- While
glowis enabled, a highlight inannounce.glow-colorsweeps across the title letters during the first 45% of its stay, then the raw title shows for the rest.WAVEeases like a sine,LINEARruns straight;radiusis how much of the title around the sweep blends toward the glow color, andmax-blendcaps how far that blend goes. One glow config drives every glow title; each title only toggles it on or off.
Finish Titles¶
Winners see a victory title, losers a defeat title, and cancelled
matches show one title to everyone. Each carries the win reason as
its subtitle ({winreason}), and each toggles the shared glow
independently through the glow block above (victory-enabled,
defeat-enabled, cancelled-enabled).
- Eliminated players, spectators, and leavers root for the team they fought for in that match: hunters only when they were hunters and never speedrunners, otherwise the speedrunners (both teams, or never a participant, all root for the runners). Spectators see the cancelled title too.
The titles live under announce.victory, announce.defeat, and
announce.cancelled in the active lang file:
announce:
victory:
title: "<#ebca28>★ <bold><#f59e42>VICTORY</bold> <#ebca28>★"
subtitle: "<#dedcd5>🏆 {winreason}"
- Win reasons live under
win-reasonsin the active lang file, one past-tense line per cause (eliminated-runners,exit-end,kill-mobwith{mob}, and the rest). Custom<win:>reasons polish themselves: a leading letter uppercases, while emoji or tag starts pass through.
Advancement Announcements¶
Advancement chat is match-scoped: when a participant earns an
advancement in a running match, only their own match sees the line.
The message key is manhunt.advancement-made with placeholders
rolecolor, player, and advancement:
manhunt:
advancement-made: "{prefix}{rolecolor}{player} <white>has made the advancement {brandcolor}[{advancement}]"
- Recipe unlocks, hidden advancements, and display-less advancements stay silent, as do pre-start matches. Vanilla announcement is forced off (see Game Rules).
Match End Delay¶
How long the plugin waits between the win or cancel announcement and final cleanup (end commands, lobby return, deactivation):
- The match summary broadcasts halfway through the delay. Interval
modifiers stop at match end, so they never fire during it. Set to
-1to skip the delay entirely; other negatives count as zero. - To cancel right away without waiting, run
/mh end -i(-immediate). Stats post instantly, then end commands and cleanup. It also works mid delay. Cancelling never saves career stats, with or without the flag.
End Toolbar¶
Partway through the delay, every online active participant gets a configurable hotbar (party favors for the celebration window):
advanced:
advanced-match-controls:
finish:
toolbar:
at: 0.2 # fraction of the end delay, 0 to 1
items: "" # comma-separated materials, blank for none
- Items deal into hotbar slots 0 onward (the first 9 win); unknown
materials warn once per match and skip. Icon data works, so
LEATHER_CHESTPLATE[color, FF0000]arrives dyed. - Immediate ends never deal the toolbar, and cancelled matches skip it too. The items persist like match loot: lobby entry clears them while the lobby toolbar is enabled, and keeps them otherwise.
Disconnect Handling¶
What happens when a participant disconnects mid-match, per role:
advanced:
advanced-match-controls:
disconnect-handling:
speedrunner:
reconnect-grace-seconds: 60
max-strikes: 3
hunter:
reconnect-grace-seconds: 60
max-strikes: 3
combat-logging:
punishment: KILL
window-seconds: 8
reconnect-grace-secondsis how long a disconnected player has to rejoin before removal. A removed speedrunner counts as dead (no speedrunners left means the hunters win); a removed hunter simply leaves (no hunters left means the speedrunners win).max-strikesis how many disconnects a player can accumulate before the next one removes them instantly. Strikes carry across reconnects within the match. Set to1to disable retries entirely.combat-loggingdecides what happens when a player who was recently damaged by an opponent quits mid-match.punishment: KILL(the default) treats the quit as a death: the quitter loses one life and the marking killer is credited (stats, death message, and kill triggers). Elimination still waits until lives run out, and the normal strike plus reconnect grace still apply on top.punishment: NONEdisables the death credit and keeps the strike and grace behavior only. Unknown values warn once and behave asKILL.window-secondsis how long after combat damage a player counts as in combat (8 by default, 1 to 300). Damage inside the window refreshes the mark, and only a fresh mark credits a quit. Changes apply on reload with no restart.- Two fragile windows skip the grace entirely: quitting during the root headstart or during a mid-match join hold eliminates on the spot (combat log death credit still applies first). Quitting during a respawn delay keeps the grace, but cut to the respawn clock: still offline at clock zero means eliminated, never revived.
- A forfeit no one played cancels instead of crowning a winner: when one side fully disconnects with under 3 minutes played and 2 half hearts exchanged at most, the match cancels. And when nobody is left online in a match, it cancels instantly, whoever quits last.