Cell & Spawns¶
Quick Start: Scale up for big servers.
The game world, the size of each spiral cell, where players spawn inside a cell, and where they return after a match:
world-engine:
enabled: false
general:
world-name: world
cell-size: 10000
tp-spread-radius: 5
cell-layout: SPIRAL
spawnpoint-algorithm:
enabled: true
search:
max-retries: 8
y-tolerance: 7
spawn-close-to-structure:
enabled: false
structures: [VILLAGE, TEMPLE, SHIPWRECK, RUINED_PORTAL]
attempts: 3
max-distance: 125
- When
enabled, matches teleport participants to a fresh cell on start and return them to the lobby at the end. Spectators travel along and land on the shared spectator spawn. - Enabling it also spreads strongholds past the vanilla
128-per-world limit; tweak the rates in
settings/world-engine/strongholds.json.
world-name is the world partitioned into cells. Leave it on the
default overworld unless you have a reason not to.
Cell Size¶
cell-size is the size of one spiral cell in blocks, hard-capped at
50,000. Do not go below 5,000, and do not change it after cells have
already been generated: every size lays its own grid, so cells from two
sizes can overlap and clip into each other.
Cell Index¶
- The engine hands out cells from a persistent counter. Inspect it
with
/manhunt worldengine cellindex getand overwrite it with/manhunt worldengine cellindex set <value>. - Set values clamp to the addressable grid; if the counter ever grows past it, it restarts at zero on the next fetch with a console warning telling you to reset the world manually.
- The capped grid always stays inside the vanilla world border at every cell size.
Cell Layout¶
cell-layout decides where each counter value lands on the grid:
SPIRAL(default) hands out adjacent cells marching outward from the origin. It is predictable (cell 12 sits next to cell 11) and keeps match areas inside a small set of region files, which keeps the on-disk footprint tight and manual cleanup easy.SCATTERshuffles every index through a seeded permutation, so consecutive matches land far apart instead of side by side. Players cannot predict or pre-explore where the next match will be, and chunk generation spreads across the whole grid instead of hammering one growing frontier. It is still a true permutation: no cell repeats until every addressable cell has been used once.
Scatter costs vs spiral: match areas land in many region files (larger footprint, harder manual cleanup), and locations are not guessable from the index. Only switch layouts with no live matches: running matches remap immediately, and cells from before the switch may overlap new ones.
Spawn Spread¶
tp-spread-radius is the radius around each cell center used when
picking player spawns. Keep it between 5 and 15; it hard-caps at
cell-size / 2. The Start Border uses this
value in its size calculation.
Mid-match joiners scatter the same way: into the match cell when the engine runs it, or around the recorded start center when it does not. Joiners also arrive vulnerable: any leftover game-end invulnerability is cleared on entry, so released holds play fair.
Spawnpoint Algorithm¶
- Validates every spawn: below tree leaves, with air at the feet and head blocks (grass and torches count as air; pressure plates do not).
- Water, lava, and powder snow are never picked, and ocean and lava cells are skipped when fetching.
- The spawning block below is never lava: solid ground wins, and water ground is a last resort when no solid roll exists.
Spawns are height-leveled around the median roll within y-tolerance,
re-rolling up to max-retries times. Turn the algorithm off for plain
highest-block spawns.
Obstructed Respawn Re-picks¶
When a death-respawn pin is missing or blocked, the plugin re-picks around living teammates, falling back to enemies when none are alive. Holds re-pick both when the hold starts and when it releases, so mid-hold grief cannot strand anyone.
Spawn Close to Structure¶
Keeps a cell only when a listed structure sits within max-distance
(50 to 200, default 125) blocks of it. Each fetch runs up to attempts
lookups (1 to 5, default 3); on exhaustion the last passing spawn is
kept. Allowed words:
VILLAGE: any village typeTEMPLE: desert pyramid or jungle pyramidSHIPWRECK: ocean or beachedRUINED_PORTAL: any ruined portal variantBURIED_TREASUREMINESHAFT: regular and mesaOCEAN_MONUMENTMANSIONPILLAGER_OUTPOST
Unknown words are skipped with a warning. Keep the list focused: each lookup costs performance on cell fetch. Pair this with the overworld structure boosts.
Lobby Teleports & Bounds¶
Lobby teleport points, boundary boxes, and upkeep live on their own page now: see Multi-Lobby Boundaries.
The fastest way to get a lobby is /manhunt worldengine tpto lobbyworld,
run twice: it generates the jmh_lobby void world (filled by the
DEFAULT preset, or the preset you name) and points lobby 0 at the
spawn automatically.
Set advanced.lobbies.general.lobby-world-name to use your own world instead.