Skip to content

Performance Tuning

BeestoXd edited this page Aug 15, 2026 · 1 revision

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.

Where the time actually goes

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.

The four settings that matter

1. GENERATION_INTERVAL_SECONDS

SETTINGS:
  GENERATION_INTERVAL_SECONDS: 10

The 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
13 Very responsive, most expensive. Only for small servers.
5 (default) A good balance.
1015 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.

2. PROCESS_ONLY_LOADED_CHUNKS

SETTINGS:
  PROCESS_ONLY_LOADED_CHUNKS: true

Leave 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.

3. REQUIRE_PLAYER_NEARBY

SETTINGS:
  REQUIRE_PLAYER_NEARBY: true
  PLAYER_NEARBY_RADIUS: 16

Off 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.

4. ANTI_ESP.TRACKING_RADIUS

ANTI_ESP:
  TRACKING_RADIUS: 64

Anti-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.

Profiles

Small server (under 500 spawner blocks)

Defaults are fine.

SETTINGS:
  GENERATION_INTERVAL_SECONDS: 5
  PROCESS_ONLY_LOADED_CHUNKS: true
  REQUIRE_PLAYER_NEARBY: false
ANTI_ESP:
  TRACKING_RADIUS: 128

Medium (500–5,000)

SETTINGS:
  GENERATION_INTERVAL_SECONDS: 10
  PROCESS_ONLY_LOADED_CHUNKS: true
  REQUIRE_PLAYER_NEARBY: false
ANTI_ESP:
  TRACKING_RADIUS: 96

Large (5,000+)

SETTINGS:
  GENERATION_INTERVAL_SECONDS: 15
  PROCESS_ONLY_LOADED_CHUNKS: true
  REQUIRE_PLAYER_NEARBY: true
  PLAYER_NEARBY_RADIUS: 24
ANTI_ESP:
  TRACKING_RADIUS: 64
  REVEAL_RADIUS: 7

Also 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.

Folia

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.

Database

  • 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.

Diagnosing

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.

Things that do not help

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.

See also

Clone this wiki locally