Skip to content

Developer Tools

For: advanced users and developers only.

These commands exist for developers: primarily for authoring default lobby presets. They offer no safety rails and are not intended for production servers.

Schematic Tools

/manhunt dev schem saves and loads lobby schematics in JManhunt/settings/world-engine/lobby-schematics/. The lobby presets do not read that directory: they paste only the bundled dev/lobby-schematics/ resources, so ship a finished preset by copying its file there and rebuilding. Requires jmanhunt.command.dev.schem (default: op).

/manhunt dev schem pos1
/manhunt dev schem pos2
/manhunt dev schem save <name>
/manhunt dev schem load <name>
/manhunt dev schem list

pos1 and pos2 record the corners of a region: your feet block at the moment each runs. save <name> captures everything between the corners (including entities) to <name>.jmhlobby, overwriting without asking. load <name> pastes the file into your current world centered on your feet block. Only list works from the console; the rest need a player position and refuse console senders.

The .jmhlobby Format

A .jmhlobby file is a zip containing exactly two entries: schem.nbt (the vanilla structure bytes) and lobby.json (the lobby boxes and teleports collected with them). Saving collects every lobby bounds box at least partly inside the region, plus every lobby teleport whose block sits inside it. Coordinates in the manifest are relative to the region's minimum corner, so pasting anywhere rebuilds the entries at the right offsets.

A teleport whose lobby collected no boundary is an orphan: it is dropped from the bundle with a console warning naming the lobby and the teleport. A region with no bounds or teleports inside still saves a valid bundle with empty lists.

On load, the structure pastes first, then the bundled bounds and teleports are written into the lobby config at the paste corner, creating missing lobby entries and overwriting the bounds and teleports of existing ones (overrides and other fields are preserved). Overwritten lobby ids always warn in the console. Command loads that would overwrite ask first: rerun the same load within 10 seconds to confirm. Automated preset pastes during lobby generation never ask. Entries only build when the paste lands in the lobby world: loading anywhere else places blocks only, since lobby entries are lobby-world coordinates. With the world engine off, nonzero lobbies are skipped. Hand-written bundles listing one lobby twice apply the last entry.

lobby.json looks like this:

{
  "format": 1,
  "origin": {
    "x": 100,
    "y": 64,
    "z": 100
  },
  "bounds": [
    {
      "lobby": 0,
      "min": {
        "x": 0,
        "y": 0,
        "z": 0
      },
      "max": {
        "x": 9,
        "y": 9,
        "z": 9
      }
    }
  ],
  "teleports": [
    {
      "lobby": 0,
      "x": 5.5,
      "y": 1.0,
      "z": 5.5,
      "yaw": 90.0,
      "pitch": 0.0
    }
  ]
}

origin is the save-time minimum corner. Bounds are relative min/max block corners per lobby id; teleports are relative coordinates rounded to one decimal place, plus look direction.

Legacy .nbt files still load through the old blocks-only path. Where both exist for one name, the bundle wins; list shows both kinds.

dev is deliberately hidden from /manhunt <tab> completion.

Debug Output

/manhunt debug [INFO|WARN|SEVERE] sets the level of the terse lifecycle lines (cell fetches, buffer fills, match starts and ends, end-cell operations, border mode changes, and portal reroutes) for yourself, or for the console when run from it. Bare /manhunt debug toggles output on at INFO or off. Each line carries its level tag: [INFO] for routine flow, [WARN] for degraded paths such as lobby fallbacks, [SEVERE] for failures needing admin attention. SEVERE shows only severe lines, WARN adds warnings, INFO shows all. Nothing persists across restarts; there is no config default.

Lobby Preset Internals

Presets are dev-time data: they live in Core/dev.yml inside the jar, never in the plugin data folder, and cannot be edited at runtime. To change a preset's schematic or commands, edit that file (plus dev/lobby-schematics/ for the artwork) and rebuild.

Each preset pastes its schematic from the bundled dev/lobby-schematics/ resources with the structure midpoint at 0,64,0, then runs its console commands (meant for lobby teleports; {world} and {preset} are substituted) before the first teleport lands. A missing schematic warns in the console and leaves void, with a bare spawn at y=65 as the fallback. Where a preset name has a .jmhlobby bundle, it wins over the legacy .nbt, and its bundled bounds and teleports build into the lobby config at the paste corner. Files dropped into the data-folder lobby-schematics/ directory are ignored by preset pastes: that folder is the dev authoring workspace only.