Hybrid Runtime Support
A *hybrid runtime* is a server software that exposes both Bukkit and Forge APIs on the same JVM — letting Forge mods and Bukkit plugins coexist. VoxelBench supports the major hybrids first-class as of v1.2.
Supported hybrids
| Runtime | Versions tested | CI status |
|---|---|---|
| Mohist | 1.20.1, 1.20.2 | First-class. CI smoketest. |
| Arclight | 1.20.1, 1.20.4 | First-class. CI smoketest. |
| NeoTenet | 1.21.1 | Soft-skipped in CI on upstream brokenness; detected at runtime. |
| Banner, Magma, CatServer, Cardboard | Various | Detected as hybrid; same compatibility envelope as the above. |
The plugin detects the runtime at startup and announces it:
[VoxelBench] Server runtime: Mohist 1.20.1-...
Hybrid mode active — Paper-only optimisations disabled.
What changes on a hybrid
- Flat-world generation routes through a custom Bukkit
ChunkGenerator(FlatChunkGenerator). Forge intercepts the standardWorldType.FLATsilently on Arclight/Mohist, which used to produce default-overworld terrain instead of flat. The custom generator bypasses the NMS layer. - Paper-only optimisations (asynchronous chunk I/O hooks, certain region-scheduler shortcuts) are skipped — they don't exist on the hybrid's Bukkit API.
- Folia-only scheduler shortcuts are skipped — same reason.
- World persistence is critical here: hybrids historically lost
voxelbench_*world definitions on restart. ThePersistedBenchmarkWorldLoaderreloads them at plugin enable. - Entity spawning in un-ticking chunks is handled defensively —
the plugin pre-loads chunks before spawning to avoid the
world.spawnEntity()-returns-null-silently pitfall.
What stays the same
- Every built-in benchmark runs.
- Reports submitted to the backend carry the same shape.
- The extension API surface is identical.
/bench worldand/bench customwork normally.
Known limitations
- Some Forge mods install custom dimension types or intercept
block-place events; results from gameplay tests can vary if those
mods are loaded. Run the benchmark on a dedicated
voxelbench_*flat world to isolate plugin behaviour from mod side-effects. - Mohist 1.20.1: the
WorldType.FLATinterception requires the v1.2 fix. v1.1 produced default-overworld terrain on this runtime. samples.entitySpawn(the bundled API sample) caps at 50 000 mobs per run on hybrids. Above that, NMS entity-id allocation slows down measurably.
Configuration tips
benchmark:
# On hybrids we strongly recommend pinning a target world rather
# than relying on auto-temp. World creation is more expensive on
# hybrids (mod chunk listeners + Bukkit chunk events), and the
# auto-temp churn becomes the bottleneck.
target-world: "voxelbench_arena"
auto-temp-world: false
See Configuration and World Management for the operational details.