Skip to content

Chunk Pregeneration

LlaGuiTo edited this page Oct 5, 2026 · 1 revision

Chunk Pregeneration

Applies to Utility Nexus Admin 1.2.0 for Minecraft 1.21.1 (NeoForge).

Why pregenerate at all

When a player explores, the chunks they walk into are generated on the spot, on the server, on the frame they arrive. That is a tick-time spike exactly when someone is trying to play, and it compounds as a group moves together.

Pregenerating moves that cost to a time when nobody is waiting on it.

The design goal: be invisible

A pregenerator that competes with the server is worse than no pregenerator. So this one is budgeted, not greedy.

Every tick it stops as soon as either time limit is reached:

Default Range
pregen.maxMillisPerTick 8 ms 1 – 40
pregen.maxServerMspt 45 ms 10 – 500

If the server's own tick is already approaching your MSPT target, pregeneration yields. The default budget of 8 ms is deliberately small — it is a ceiling on what pregen may ever cost, not a target.

Rate limits

Default Range
pregen.chunksPerTick 8 1 – 200
pregen.maxConcurrentChunks 4 1 – 64

These bound the work per tick; the time budgets above bound the time. Both apply — whichever is hit first stops the tick's work.

Where and how much

Default Range
pregen.startX 0 any int
pregen.startZ 0 any int
pregen.radius 0 −1 = unlimited
pregen.dimension minecraft:overworld any dimension id

radius is in blocks, and -1 means unlimited — which combined with the per-tick budgets means it will keep going as long as you let it.

Work and rest

Pregeneration runs in cycles, not continuously:

Default Range
pregen.workSeconds 300 5 – 86400
pregen.restSeconds 120 0 – 86400
pregen.resumeGraceSeconds 30 0 – 3600
pregen.startupDelaySeconds 60 0 – 3600

Five minutes of work, two of quiet, by default.

startupDelaySeconds is there so pregeneration does not compete with server startup. A default of 60 seconds means it waits for the world to finish loading.

resumeGraceSeconds is the pause after a manual pause before it resumes.

Yielding to players

pregen.ignorePlayers, default true, decides whether player presence is ignored during a burst.

With it true, pregeneration keeps working while players are online — it just stays inside its time budgets. With it false, it is more conservative.

Either way the time budgets are what actually protect the server. This setting is about intent, not safety.

The schedule window

Off by default:

Default Range
schedule.enabled false —
schedule.startHour 8 0 – 23
schedule.endHour 10 0 – 23
schedule.burstChunksPerTick 64 1 – 200
schedule.burstMaxConcurrentChunks 16 1 – 64
schedule.burstMaxMillisPerTick 30 1 – 40
schedule.burstMaxServerMspt 500 10 – 500
schedule.ignorePlayers true —
schedule.autoStopAtWindowEnd true —
schedule.requireRestartAfter true —

The burst values are much more aggressive than the normal ones — 64 chunks per tick against 8, and a 500 ms MSPT ceiling against 45. That is the point: the window is meant to be hours when the server should be empty, so the budget can be far larger.

Two of these matter:

  • schedule.autoStopAtWindowEnd — stops at endHour rather than continuing indefinitely.
  • schedule.requireRestartAfter — whether the schedule needs a restart to take effect again.

Commands

Under /una pregen:

start Start pregeneration.
stop Stop it.
pause / resume Pause and continue.
status Current state.
radius Get or set the radius.
center Set the centre.
dimension Get or set the dimension.
enabled Get or set enabled.
config Show the current settings.

See Commands and Config.

Practical advice

Start smaller than you think you need. A radius of 5000 blocks is a lot of chunks. The budgets mean it will not hurt the server, but it will take a long time.

Watch status while it runs rather than assuming. If the server is struggling, the numbers you want are the ones you can lower: chunksPerTick first, then maxMillisPerTick.

Generated chunks are ordinary chunks. Nothing about them depends on this mod, so uninstalling leaves your world valid.

Clone this wiki locally