Skip to content

Cell & Spawns

For: intermediate admins tuning maps, plus advanced users sizing cells.

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 get and 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.
  • SCATTER shuffles 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 type
  • TEMPLE: desert pyramid or jungle pyramid
  • SHIPWRECK: ocean or beached
  • RUINED_PORTAL: any ruined portal variant
  • BURIED_TREASURE
  • MINESHAFT: regular and mesa
  • OCEAN_MONUMENT
  • MANSION
  • PILLAGER_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.