-
-
Notifications
You must be signed in to change notification settings - Fork 0
Performance Tuning
The plugin exists to make spawner farms cheap, and out of the box it already is. This page is for servers running thousands of spawner blocks, where the remaining costs start to matter.
| Work | Scales with | Notes |
|---|---|---|
| Generation cycle | number of spawner blocks | Not with stack size — a 100,000-stack block costs the same as a 1-stack one |
| Anti-ESP updates | players moving x spawners within TRACKING_RADIUS
|
The most common real cost on a busy server |
| Database writes | changed spawners per cycle | On a dedicated thread, off the tick |
| Open storage menus | menus open, refreshed once per second | Negligible unless hundreds are open |
The key insight: stack size is free. Encouraging players to consolidate 100 blocks into one 100-stack block is a hundredfold reduction in generation work with no change to their output.
SETTINGS:
GENERATION_INTERVAL_SECONDS: 10The most direct lever. Doubling it halves the number of cycles, and the catch-up maths means long-run output is identical — players get the same total, in larger, less frequent lumps.
| Value | Feel |
|---|---|
1–3
|
Very responsive, most expensive. Only for small servers. |
5 (default) |
A good balance. |
10–15
|
Noticeably chunkier, meaningfully cheaper. Fine for most large servers. |
30+ |
Storage visibly jumps. Players may think it is broken. |
Requires a restart to change the task period; after a reload the value affects output rates immediately, but the task keeps its original rhythm.
SETTINGS:
PROCESS_ONLY_LOADED_CHUNKS: trueLeave this on. Off, every spawner in every world is processed whether or not its chunk is loaded — pointless work for farms nobody is near.
Skipped time is not lost: it accumulates and is paid out when the chunk loads again.
SETTINGS:
REQUIRE_PLAYER_NEARBY: true
PLAYER_NEARBY_RADIUS: 16Off by default, and the biggest saving available on a large server: with chunk loaders keeping
farms permanently loaded, PROCESS_ONLY_LOADED_CHUNKS alone saves nothing.
Trade-off: players must be present for their farm to run. Combined with catch-up they still receive everything on return, but it changes the feel — an AFK farm becomes a visit-to-collect farm. Announce it before switching it on.
ANTI_ESP:
TRACKING_RADIUS: 64Anti-ESP recalculates when a player crosses a block boundary, over every spawner within this
radius in their world. Lowering it from 128 to 64 cuts the per-move work by roughly a factor
of four in a dense area.
Keep it comfortably above REVEAL_RADIUS — it is automatically raised to at least
REVEAL_RADIUS + 8, but a value that tight makes spawners pop in and out as players walk.
Defaults are fine.
SETTINGS:
GENERATION_INTERVAL_SECONDS: 5
PROCESS_ONLY_LOADED_CHUNKS: true
REQUIRE_PLAYER_NEARBY: false
ANTI_ESP:
TRACKING_RADIUS: 128SETTINGS:
GENERATION_INTERVAL_SECONDS: 10
PROCESS_ONLY_LOADED_CHUNKS: true
REQUIRE_PLAYER_NEARBY: false
ANTI_ESP:
TRACKING_RADIUS: 96SETTINGS:
GENERATION_INTERVAL_SECONDS: 15
PROCESS_ONLY_LOADED_CHUNKS: true
REQUIRE_PLAYER_NEARBY: true
PLAYER_NEARBY_RADIUS: 24
ANTI_ESP:
TRACKING_RADIUS: 64
REVEAL_RADIUS: 7Also lower MAX_STACK_PER_BLOCK if you have not already — a lower ceiling means more blocks per
player, which is worse for performance, so the reason to lower it is economy balance, not
speed. For performance you want stacks high.
The defaults are already right. Work is dispatched per region, so it parallelises across region
threads. If a single region is hot, that is a concentration of spawners in one area — /spawner
and browse that world to find it.
- SQLite is fine at any scale for a single server; the file sits on local disk with no network round trip.
- MySQL only pays off when several servers share data. A remote database adds latency to every write — worth it for a network, not for one server.
Writes are already asynchronous, so database latency does not hit your TPS. It does affect how quickly data is durable, which matters on a hard crash.
Check your spawner count
/spawner version
The Managed spawners line is the number that drives everything on this page.
Profile properly — /spark profiler or timings. Look for SpawnerGenerationTask (generation)
and AntiEspManager (movement). If neither appears near the top, this plugin is not your problem.
Find the concentrations
/spawner
The admin panel shows spawners per world, and the biggest stacks per page.
| Idea | Why not |
|---|---|
Lowering MAX_STACK_PER_BLOCK
|
More blocks for the same output. Strictly worse. |
Lowering STORAGE_CAP_PER_LOOT_KEY
|
Storage size has no per-cycle cost. |
| Removing drop entries | A few extra entries per cycle is noise. |
| Disabling XP | One multiplication per cycle. |
| Turning off anti-ESP | Only helps if profiling actually points at it — lower TRACKING_RADIUS first. |
- How It Works — why stack size is free
- spawners.yml — every setting above
- Anti-ESP — concealment cost in detail
Repository · Releases · Issues · Discord · MIT License
Getting started
Reference
Configuration
Features
Operations
Development