Skip to content

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:

settings:
  match:
    leaving:
      limbo-broadcast-interval: 20
  • 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:
settings:
  match:
    leaving:
      limbo-countdown-enabled: true
      limbo-countdown-titled-seconds: 3   # 1 to 15
  • The number blends from announce.countdown.lower-color at 1 to announce.countdown.upper-color at 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 and sounds.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 none and afk players 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 glow is enabled, a highlight in announce.glow-color sweeps across the title letters during the first 45% of its stay, then the raw title shows for the rest. WAVE eases like a sine, LINEAR runs straight; radius is how much of the title around the sweep blends toward the glow color, and max-blend caps 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-reasons in the active lang file, one past-tense line per cause (eliminated-runners, exit-end, kill-mob with {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):

advanced:
  advanced-match-controls:
    finish:
      end-delay: 10.0      # in seconds
  • The match summary broadcasts halfway through the delay. Interval modifiers stop at match end, so they never fire during it. Set to -1 to 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-seconds is 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-strikes is how many disconnects a player can accumulate before the next one removes them instantly. Strikes carry across reconnects within the match. Set to 1 to disable retries entirely.
  • combat-logging decides 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: NONE disables the death credit and keeps the strike and grace behavior only. Unknown values warn once and behave as KILL.
  • window-seconds is 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.

Next Steps