Playlists
Quick Start: Host a tournament.
- Playlists live in
advanced/playlists.yml and generate
with six defaults: standard and ranked 1v1, 2v2, and 4v4.
- Each id carries a GUI
icon, a physical pad block, a mode
(STANDARD or RANKED), and a composition with both team sizes
(minimum 1 each). Bad materials and modes warn and fall back;
blank ids are skipped.
/manhunt reload re-reads the file: new joins see new
definitions while running instances finish on theirs.
Quick Start (5 minutes)
- Set
multilobbies.use-pads to true so the physical pads work.
- Keep three standard playlists (
standard-1v1, standard-2v2,
standard-4v4); give each its own pad block.
- Place those three blocks as pads in the lobby.
- Run
/manhunt reload and open the browser from the toolbar.
That is a working queue: pads join, the browser lists, Any fills
whatever is closest, and matches start on full plus the countdown.
Add the ranked trio when you want the ladder too: Set up ranked
play walks the setup, and the tuning below
takes it from there.
Global ids and lobby overrides
multilobbies.playlists holds the global ids every lobby shares.
A lobby adds its own ids through multilobbies.playlists.<id>
dotted overrides in its lobby config; globals resolve first in
file order, then lobby-owned ids in override order.
- A lobby id that shadows a global id resolves to the global
definition and logs one SEVERE per lobby plus id per load on first
join-or-leave use, so rename one side to silence it.
Queue behavior (multilobbies)
| Key |
Default |
Meaning |
use-pads |
false |
Physical playlist pads join queues. Playlists stay available through the browser either way. |
countdown |
10 |
Seconds after an instance fills, cancellable like standard AutoStart. |
reminder-interval |
120 |
Seconds between players-still-needed prompts to queued players. |
broadcast-interval |
90 |
Seconds between server-wide playlist-needs-players broadcasts. |
hide-queued-rankeds |
true |
Obfuscate names in ranked join/leave queue messages. |
Quick Match (quickmatch)
| Key |
Default |
Meaning |
enabled |
true |
Master switch for both categories. |
timeout |
600 |
Seconds before a queue attempt leaves with the timeout message. |
rejoin-delay |
3 |
Seconds between leaving a match and the next resolve. |
skip-duration |
15 |
Seconds a double-shifted match or playlist stays out of candidates. |
expand-after |
20 |
Seconds before Any-mode opens a fresh queue of the best fit. Burned once a player double-shifts out of it. |
global-search.enabled |
true |
Consider other lobbies once the delay passes. |
global-search.after |
60 |
Seconds before other lobbies join the candidate set. Specific playlists always search globally; Any-mode attaches or migrates only to closer fits. |
Standard queues assign sides by role weight (LuckPerms
jmh-role-weight meta pulling toward each player's Role Preference);
ranked queues assign uniform and ignore weights. See
LuckPerms.
Ranked (ranked)
| Key |
Default |
Meaning |
enabled |
true |
Master switch for the ranked category and its gates; turning it off stops every ranked queue and cancels running ranked matches at once. |
season-length-days |
90 |
Days per season. Season 1 starts when ranked is first enabled (logged with its timestamp); rollover archives every rating into history and resets the live ladder to start-elo. Past seasons stay readable for history and placeholders. |
start-mode |
START_ELO |
START_ELO grants start-elo at once; PLACEMENT_MATCHES hides the number until placement ends. |
start-elo |
300 |
Internal elo for players with no ranked games this season. |
placement-matches |
3 |
Games hiding the number as Unranked in placement mode (1-20); the engine still uses it. |
decisive-ladder |
true |
Clamp gains so rank boundaries cross only on exact decisive matches. |
show-elo-in-tab |
true |
Mirror season elo into the vanilla tab-list number slot (Unranked shows 0). |
ranks |
[0, 500, 700, 1000, 1400, 1800, 2300] |
Rank thresholds, strictly increasing; the last met rank wins. Names and colors live in the ranked.ranks lang section. |
show-elo-suffix |
true |
Append the elo suffix to ranked display names. |
elo-suffix |
" <gray>[{rank}<gray>]<white>" |
Suffix format; {rank} is the colored rank name. |
gap-scale |
750 |
Elo gap scaling the skill term (100-2000). |
gap-strength |
1.0 |
Skill-gap weight, 0-1 (0 disables it). |
size-strength |
0.5 |
Team-size weight correction, 0-1 (0 disables it). |
auto-weights |
true |
Tune runner/hunter base weights from finished ranked matches. |
auto-weights-min-games |
10 |
Finished ranked matches before the tuner engages. |
auto-weights-window |
200 |
Matches kept for the tuner; oldest entries delete past this. |
auto-weights-half-life |
50 |
Matches for a stored result's recency weight to halve. |
matchmaking.elo-range-steps |
[100, 150, 200, 300, 450, 700, 1000, -1] |
Party-to-match average window per step; -1 is unlimited. |
matchmaking.elo-range-interval |
75 |
Seconds per step. |
round-robin-elo-scale |
auto |
Tournament round-robin per-match delta scale, 0.01-1.0; auto normalizes a perfect run to about one bracket title of the same size. |
A playlist can also run as a tournament:
Best-of, brackets, round-robin, or bracketed Best-of-N with a
pooled ranked ledger. See the tournament keys on the playlist
itself.
Ladder math
| Rule |
Behaviour |
| K32 moves |
Decided matches move every member K32. Base chances come from the size-shaped weights (runners win 1 in 3 at even sides); skill-gap odds scale with the team average gap; draws split the point; ratings floor at zero. |
| Decisive ladder |
Gains stop one below the next rank and losses stop on the rank floor unless the match starts exactly one point away. |
| Persistence |
The ladder lives in the jmanhunt_elo table on the stats database. Disabling statistics unwires it: gates read start-elo and standings read empty until statistics return. |
Match flow
- Admins flip the switch live with
/manhunt ranked <enable|disable|status>
(Commands).
- Lobbies pick a side with
lobby-mode in
settings/world-engine/lobby-config.yml: CLASSIC serves the
standard playlists, RANKED serves ranked ones only (anything else
reads as classic), and ranked lobbies show a Ranked tag on their
switcher entry.
- Every ranked participant sees a RANKED INFO block at match
start: a decisive line when one point decides their rank, plus
the Change bullet with the predicted loss, current elo, and
predicted gain (PROMOTION or DEMOTION on decisive elos).
- At match end each member gets exactly one feedback message plus
one anvil cue 0.2 seconds out: gains landing one below the next
rank and losses landing on the floor announce the decisive next
match, everything else reports the plain change. The end bullets
detail the new elo with the next threshold, plus the promotion
or demotion line when the rank changed. All strings live under
ranked in the lang files; the cues are the game.ranked-*
sounds. While the
cinematic tail counts 3-2-1, ranked
viewers see the same Change line as the number subtitle.
Auto-weights tuner
- Refits the runner weight per playlist from finished ranked
matches: recent results weigh most (halving every
auto-weights-half-life matches), samples recorded under
a different mods fingerprint count fifth, and the fitted weight
only engages past auto-weights-min-games sampled matches.
- Samples survive seasons and clear only through
/manhunt ranked resetweights <playlist> or the Ranked weights
panel (/manhunt playlists weights), which reports each
playlist's sampled games, fitted weight, and confidence.
Parties (parties)
| Key |
Default |
Meaning |
max-size |
4 |
Largest party, leader included. |
ranked-rank-limit |
true |
When true, every member must sit within one rank step of the leader to queue ranked. |
- Parties persist across relogs and disband when the last member
leaves. The leader queues the whole party at once: members are
pulled to the leader's lobby, every member must be online and
queueable, and parties that fit no side are refused up front
instead of searching silently.
- Leaving, kicking, disconnecting, or stepping off mid-queue evicts
just that member; joining a party is refused while either side
holds a queue attempt. See
Commands for the
/manhunt party
verbs.
Browser (browser)
standard-icon (IRON_SWORD) and ranked-icon (GOLDEN_AXE)
dress the two category buttons; the Any entries and playlist
buttons take their icons and pad blocks from
advanced.lobbies.role-pads.blocks.quickmatch-standard
(WHITE_CONCRETE) and quickmatch-ranked (ORANGE_CONCRETE),
overridable per lobby. Malformed values warn once and fall back to
the defaults.
Admin
/manhunt playlists opens the scrolling admin list; the
trailing stick drafts a new playlist through the id and pad block
dialogs, click entries to edit, and every save
writes advanced/playlists.yml at once. See Commands
for the editor layout.
- Per-playlist headcounts ride the
playlist placeholders;
per-playlist names and descriptions live under
multilobbies.playlists.<id> in the messages files.
- The per-playlist mode flips in the admin GUI mode field or with
/manhunt playlists mode <id> <ranked|standard>. The master
switch is CLI-only (/manhunt ranked enable|disable)
because disabling cancels live ranked matches at once; tuning
constants (seasons, ranks, strengths, auto-weights, matchmaking)
live in advanced/playlists.yml and re-read on /manhunt reload.