Minecraft Field guide

Minecraft Chunk Pregeneration with Chunky: Eliminate Exploration Lag

How to configure and run chunk pregeneration on a Minecraft server using the Chunky plugin: setting world borders, optimizing CPU threads, and eliminating TPS drops during player exploration.

Minecraft Chunk Pregeneration with Chunky: Eliminate Exploration Lag

Real-time chunk generation is the leading cause of server lag, sudden TPS collapse, and rubberbanding across multiplayer Minecraft servers. Whenever players take flight with Elytra, navigate boats, or explore uncharted regions, the server process must simultaneously execute Perlin noise math for terrain elevation, carve intricate 3D caves, place structures, and calculate lighting grids. Pre-rendering the entire world using the Chunky plugin permanently solves this bottleneck.

This article explains how to install and configure Chunky on Paper and Purpur servers, establish safe world boundaries, monitor generation tasks, and budget server disk capacity.

Why Real-Time Chunk Generation Causes Severe TPS Drops#

Following the Caves & Cliffs world height expansion, the Minecraft vertical build space encompasses 384 blocks (ranging from Y=-64 to Y=320). This expanded voxel volume and complex 3D noise generation demand substantially more CPU cycles for every 16×16 chunk created.

When an ungenerated chunk is requested by an active player:

  1. The server spawns asynchronous tasks to calculate terrain density and structures.
  2. The main server thread is forced to synchronize completed chunks before streaming them over the network.
  3. If chunk creation stalls, server tick duration exceeds 50 milliseconds (MSPT > 50), causing TPS to collapse from 20.0 down to single digits.
  4. Players experience severe rubberbanding, delayed block breaks, and invisible chunk borders.

Pregenerating chunks writes finalized binary data into .mca region files on disk beforehand. When players traverse pre-rendered territories, the server merely reads cached data off disk, reducing exploratory CPU load to negligible levels.

Installing Chunky and Defining World Borders#

Chunky is a high-performance, asynchronous pregeneration plugin fully compatible with Paper, Purpur, Spigot, and Fabric. Download the latest jar directly into the plugins/ directory:

bash
cd /opt/minecraft/plugins
wget https://github.com/pop4959/Chunky/releases/latest/download/Chunky.jar

Restart the server daemon to initialize configuration files:

bash
sudo systemctl restart minecraft
sudo journalctl -u minecraft -n 30 --no-pager | grep -i "chunky"

Before initiating chunk rendering, establish an explicit worldborder. This prevents players from wandering beyond the pregenerated perimeter in the future:

bash
/worldborder center 0 0
/worldborder set 10000

This command enforces a 10,000 by 10,000 block boundary (a 5,000-block radius extending from coordinates X:0, Z:0).

Executing and Monitoring Chunk Pregeneration Tasks#

Access the server console or connect via RCON to specify Chunky generation geometry:

bash
/chunky world world
/chunky shape square
/chunky center 0 0
/chunky radius 5000

Set a reasonable log interval and start generation:

bash
/chunky quiet 10
/chunky start

The quiet 10 setting restricts console logging to one line every 10 seconds, keeping system logs readable during long generation runs.

To inspect progress in real time, run:

bash
/chunky progress

The output provides chunk counts, percentage completion, generation throughput (chunks/sec), and estimated time to completion (ETA).

If the server experiences heavy player traffic during peak hours, you can pause and resume the task without losing progress:

bash
/chunky pause
/chunky continue

Through a managed server management panel, server CPU, memory, and storage metrics are tracked automatically, ensuring that intensive background maintenance runs cleanly without degrading player experiences.

Calculating Storage Requirements for Region Files#

Pregeneration requires adequate storage headroom on fast NVMe drives. Minecraft chunks are stored in region files containing 32×32 chunks (512×512 blocks) in world/region/:

  1. A 5,000-block radius covers a 10,000 × 10,000 block surface area.
  2. This area comprises approximately 390,625 individual chunks (around 400 .mca region files).
  3. Modern world generation generates region files ranging between 15 MB and 30 MB each, depending on cave structures and biome complexity.
  4. Total disk allocation for a 5,000-block radius ranges between 8 GB and 12 GB for the Overworld, plus an additional 3 GB to 5 GB for the Nether and End dimensions.

Verify available storage before starting the pregeneration process:

bash
df -h /opt/minecraft

Pregenerating Nether and End Dimensions#

To completely eliminate exploration lag, the Nether and End dimensions must also be pre-rendered. Switch world contexts in Chunky and adjust coordinates according to the dimension coordinate ratio:

bash
/chunky world world_nether
/chunky center 0 0
/chunky radius 1250
/chunky start

Because 1 block in the Nether corresponds to 8 blocks in the Overworld, a 1,250-block radius in the Nether fully encloses the 10,000-block Overworld boundary.

Once generation finishes, the plugin outputs: [Chunky] Task finished for world!The world is now fully baked into disk cache, guaranteeing stable 20.0 TPS even during high-speed exploration.

Sources#