Benchmark World Management
Benchmarks need a controlled, reproducible environment. By default VoxelBench creates and destroys a disposable flat world per run, but you can pin a specific world so every run uses the same map — useful when running comparative tests over time. Every world managed by the plugin lives under a `voxelbench_*` folder prefix. This prefix is enforced everywhere: the plugin will refuse to touch any world that doesn't start with it. Your survival map is safe.
Why pin a world?
- Reproducibility across runs: chunks are identical bit-for-bit, so variance between two runs is driven by server load rather than terrain.
- Pre-baked test scenarios: build a redstone contraption once, benchmark its tick cost over the lifetime of your server hardware.
- Hybrid runtimes: on Mohist/Arclight, world creation goes through a
custom Bukkit
ChunkGeneratorto bypass Forge'sWorldType.FLATinterception. A pinned world skips that path entirely after the first creation.
Commands
| Command | Description |
|---|---|
/bench world list | All voxelbench_* worlds known to the server. |
/bench world show | The world currently pinned (or <none>). |
/bench world set <name> | Pin voxelbench_<name> for subsequent runs. |
/bench world unset | Clear the pin; auto-temp resumes. |
/bench world create <name> | Create a brand-new flat world voxelbench_<name>. |
/bench world delete <name> | Unload and delete a voxelbench_<name> world. |
Permission: voxelbench.world (default: op).
Auto-temp vs pinned
| Mode | Behaviour |
|---|---|
| Auto-temp (default) | Each /bench start creates voxelbench_temp_<timestamp>, runs in it, then deletes it. Zero permanent state. |
| Pinned | /bench world set reuses the same world every run. |
| Pinned, strict | Config benchmark.auto-temp-world: false with target-world: "" — runs refuse to start unless a world is pinned. |
The pin survives restarts. It's persisted to config.yml under
benchmark.target-world.
Crash recovery
When a benchmark starts, every online player is saved and teleported
into the benchmark world. If the server crashes mid-run, on next boot the
plugin scans for trapped players (still inside a voxelbench_* world)
and restores them to their saved location automatically. No manual
recovery needed.
Persistence across restarts (v1.2)
Operator-created voxelbench_<name> worlds (i.e. anything not matching
the voxelbench_temp_<digits> auto-temp pattern) are now auto-loaded at
plugin enable. Previously, on hybrid runtimes the world definition was
lost on every server restart and you had to re-create it manually.
The auto-temp worlds remain ephemeral — the
TempWorldOrphanCleaner removes any leftover voxelbench_temp_*
folders found at startup (the server crashed mid-run, the plugin was
disabled mid-test, etc).
Multiverse-Core integration
When Multiverse-Core
is installed, VoxelBench delegates world creation to it. Worlds you
create through /bench world create show up in /mv list and respect
your Multiverse settings (gamemode, weather lock, etc.).
When Multiverse isn't present, the plugin falls back to a direct Bukkit
WorldCreator path. Both paths produce the same flat overworld.
Stale-folder protection (v1.2)
/bench world create <name> refuses to run when a voxelbench_<name>
folder already exists on disk from a previous session:
[VoxelBench] World folder 'voxelbench_arena' already exists on disk.
Use /bench world delete arena first, or pick another name.
Without this guard the plugin would load the legacy chunks, then layer fresh flat-generated chunks on top → a half-flat, half-old terrain. v1.1 had this footgun; v1.2 fixes it.
Safety guards summary
| Guard | What it prevents |
|---|---|
voxelbench_* prefix lock | Operators with voxelbench.world cannot delete your survival/lobby maps. |
| Auto-temp orphan cleaner | Leftover voxelbench_temp_* folders from crashed runs are removed at startup. |
| Stale-folder refusal | /bench world create refuses to load pre-existing chunks. |
| Crash-proof player rescue | Players trapped in a benchmark world on restart are teleported back to their pre-bench location. |