Overview Chunker is designed to be more efficient and resilient than traditional pre-generators. Many pre-generators track thousands of chunks in memory, risking significant rollback or data loss if the server crashes. Chunker, by contrast, only tracks minimal state (like the current region’s position and how many chunks are completed), so crashes have less impact on the generation process.
It works best on Paper forks because it can utilize asynchronous chunk-loading (
CompletableFuture) for faster performance. On non-Paper servers (Bukkit/Spigot and others), it falls back to a synchronous chunk-loading method but still performs significantly faster than many default solutions.
You can configure Chunker to run automatically
only when there are no players online and to halt immediately if a player joins. This behavior is controlled by
auto_run in
settings.yml. You can also adjust how aggressively each world’s tasks run by changing
task_queue_timer and
parallel_tasks_multiplier. If you want to keep the server load minimal, set low concurrency or run only when the server is empty.
Adjustio-threads and worker-threads to match (or approach) your CPU’s thread count.
By default, Paper only uses half your threads for chunk tasks; raising these can help ensure asynchronous chunk generation runs at full speed.
Lower region-file-cache-size if running pregen on a fresh world with no players online.
Command Usage
The primary commands are:
Code (Text):
/pregen <ParallelTasksMultiplier> <PrintUpdateDelay> <world> <Radius or "default">
/pregenoff [world]
Examples
/pregen 4 10s world default
- Pre-generates the overworld (
world)
- Uses 4 parallel chunk-loading tasks (on Paper, these run asynchronously)
- Prints progress logs every 10 seconds
-
default uses the world border as the radius
/pregen 6 5s world 1000b
- Pre-generates the overworld
- 6 parallel tasks
- Prints logs every 5 seconds
-
1000b = 1000-block radius → Chunker calculates (
1000 / 16)²
- Pre-generates The End
- 1 parallel task
- Logs every 12 hours
-
100r = 100-region radius →
(100 × 32)² = 10,240,000 chunks
Command Parameters
ParallelTasksMultiplier Determines how many chunk-loading tasks run in parallel. On Paper, these tasks are async. Recommended: Keep at or below your CPU’s thread count.
PrintUpdateDelay How often progress logs appear. Add suffix s, m, or h.
<world> The world to pre-generate. Tab-completion supported.
<Radius> The target radius with a suffix:
b – Blocks (e.g., 20000b)
c – Chunks (e.g., 500c)
r – Regions (e.g., 30r)
default – Uses world border
/pregenoff [world] - No args = stops all worlds - With world name = stops that world only
Permissions (Defaults to OP)
chunker.pregen – Allows use of /pregen
chunker.pregenoff – Allows use of /pregenoff
chunker.* – Grants all Chunker permissions
Configuration: settings.yml
Code (YAML):
# Configuration
# auto_run: Set to true if you want pre-generation to start automatically when no players are on the server. # task_queue_timer: Queue speed (50–70 recommended) # parallel_tasks_multiplier: Number of concurrent async tasks (or "auto") # print_update_delay: Info print interval (e.g., 5s, 2m) # radius: How far to generate (e.g., 100b, 1c, 10r, or "default") world:
auto_run: false
task_queue_timer: 60
parallel_tasks_multiplier: auto
print_update_delay: 5s
radius: default
world_nether:
auto_run: false
task_queue_timer: 60
parallel_tasks_multiplier: auto
print_update_delay: 5s
radius: default
world_the_end:
auto_run: false
task_queue_timer: 60
parallel_tasks_multiplier: auto
print_update_delay: 5s
radius: default
Summary of Changes from Older Versions
No more Virtual Threads – Uses standard CompletableFuture concurrency on Paper.
Improved Schedulers – Custom async scheduler using ForkJoinPool.commonPool().
Minimal State Tracking – Uses small progress files per world (e.g., world_pregenerator.txt).
Quick Tips
Begin with parallel_tasks_multiplier = 1, then adjust.
Async loading (Paper and Folia) = much better performance.
Use print_update_delay of 10s+ to avoid excessive log output during long runs.