ChunkManager icon

ChunkManager -----

Optimizes chunk loading to reduce server lag.



Config explained
Each section of config.yml has its own spoiler. Open the ones you care about.

Code (Text):

chunk-loading-radius: 3
max-chunks-to-load: 5
max-cache-size: 100
cache-expiration-time: 30000
 
  • chunk-loading-radius - how many chunks around each player get loaded ahead of time. Higher feels smoother but uses more RAM and CPU. 3 is a good start.
  • max-chunks-to-load - how many chunks the plugin may load per server tick. Stops a sudden rush of loading from lagging the tick.
  • max-cache-size - how many chunks are kept in a quick-access memory cache.
  • cache-expiration-time - time in milliseconds before a cached chunk is dropped. 30000 = 30 seconds.

Code (Text):

dynamic-radius:
  enabled: true
  high-tick-threshold: 50
  high-memory-threshold: 75
  low-tick-threshold: 40
  low-memory-threshold: 60
 
Lets the loading radius shrink or grow on its own based on how the server is doing.
  • high-tick-threshold / high-memory-threshold - when tick time (ms) or memory use (%) goes above these, the radius drops to protect performance.
  • low-tick-threshold / low-memory-threshold - when things are calm and you are below these, the radius is allowed to grow back.

Code (Text):

maintenance:
  enabled: false
  radius: 2
  tick-time-threshold: 70.0
  memory-threshold: 80.0
  auto-maintenance: true
 
A safety mode that clamps the radius down hard when the server is struggling.
  • radius - the small radius used while in maintenance mode.
  • tick-time-threshold / memory-threshold - the points where auto-maintenance kicks in.
  • auto-maintenance - let the plugin turn this mode on and off by itself. Turn it off if you only want to control it with /maintenance.

Code (Text):

chunk-processor:
  core-threads: 0
  max-threads: 0
 
Background worker threads used for chunk jobs. 0 means auto (picked from your CPU cores). Leave at 0 unless you really want a fixed number.

Code (Text):

smart-unloading:
  enabled: true
  heat-decay-rate: 0.95
  heat-decay-interval: 5000
  cold-threshold: 1.0
  min-chunk-age: 30000
  visit-heat-increase: 10.0
  proximity-heat-bonus: 5.0
  safety-radius: 3
 
Every chunk has a "heat" value. Visited chunks get hot, ignored chunks cool down, and cold chunks get unloaded to free memory.
  • heat-decay-rate - how fast heat cools off. Closer to 1 cools slower.
  • heat-decay-interval - how often (ms) cooling runs.
  • cold-threshold - heat below this counts as cold and can be unloaded.
  • min-chunk-age - a chunk must be loaded at least this long (ms) before it can be unloaded. Stops load/unload flapping.
  • visit-heat-increase - how much heat a chunk gains when used.
  • proximity-heat-bonus - heat given to chunks near a player.
  • safety-radius - chunks within this many chunks of any player are never unloaded.

Code (Text):

preloaded-chunks:
  respect-force-loaded: true
  respect-plugin-tickets: true
  pause-unload-during-pregen: true
  pregen-detect-seconds: 5
  pregen-chunk-threshold: 12
 
Stops ChunkManager from fighting other plugins that keep chunks loaded on purpose. Works with Chunky, WorldBorder, vanilla /forceload, spawn chunks and redstone chunk-loaders.
  • respect-force-loaded - never unload a chunk that is marked force-loaded.
  • respect-plugin-tickets - never unload a chunk another plugin is holding open with a chunk ticket.
  • pause-unload-during-pregen - while a pre-generator is busy making chunks in a world, ChunkManager stops unloading in that world so it does not undo the work.
  • pregen-detect-seconds - how many seconds of quiet before a world counts as "done generating".
  • pregen-chunk-threshold - how many fresh chunks (made away from players) within that window mean a pre-gen is running. Lower = more sensitive.
Tip: stand in a chunk and use /cminspect to see exactly why it is being kept loaded.

Code (Text):

pre-generation:
  chunks-per-tick: 3
  tps-threshold: 18.0
  actionbar-updates: true
 
ChunkManager can pre-generate chunks itself with /cmpregen. It throttles on TPS so it does not lag the server.
  • chunks-per-tick - how many chunks to generate each tick.
  • tps-threshold - it only generates while TPS is at or above this, then waits if the server dips.
  • actionbar-updates - show live progress in the action bar.

Code (Text):

memory:
  gc-min-interval: 30000
  low-threshold: 0.85
  critical-threshold: 0.95

gui:
  enabled: true
  update-interval: 20
  cooldown: 300

performance:
  alert-on-critical: true
  export-metrics: false
  metrics-interval: 300
 
  • memory.gc-min-interval - shortest time (ms) allowed between cleanups, so it does not spam the garbage collector.
  • memory.low / critical-threshold - memory fill levels (0.85 = 85%) that trigger cleanups and warnings.
  • gui - the /cm menu. update-interval is in ticks, cooldown is in ms between clicks.
  • performance.export-metrics - write metrics to file. metrics-interval is in seconds.

Code (Text):

advanced-features:
  enabled: true
  chunk-analyzer:
    ...
  region-optimizer:
    ...
  prefetcher:
    ...
 
enabled is the switch that matters here - it turns the whole advanced block on or off. The three features it runs:
  • chunk-analyzer - rates how heavy each chunk is to tick (mob farms, redstone, etc).
  • region-optimizer - groups chunks into regions and pre-loads the busy ones players keep returning to.
  • prefetcher - watches movement and loads chunks ahead of where players are heading.
The numbers under each one are tuned internal defaults - you do not need to touch them, the enabled toggle is the real control.

Code (Text):

permission-radius:
  enabled: false
  tiers:
    '6': 6
    '5': 5
    ...
 
Give ranks a bigger loading radius. Grant chunkmanager.radius.6 for a radius of 6, and so on. The highest tier a player has wins. Off by default.

Code (Text):

scheduled-optimization:
  enabled: false
  times:
    - '04:00'
  aggressive-target: 100
  log-results: true
 
Runs a cleanup pass at set times of day (great for quiet early-morning hours).
  • times - 24h clock times to run, like '04:00'.
  • What it actually does - it runs the smart unloader hard, clearing out cold, unused chunks across your worlds in one go to free memory.
  • aggressive-target - how many chunks per world it tries to unload in that pass. Higher frees more at once. It still skips chunks near players, frozen, force-loaded or held by other plugins.
  • log-results - print how much was cleaned to console.

Code (Text):

worldguard:
  keep-regions-loaded: false
  check-on-unload: true
  region-whitelist: []
  scan-interval: 300
 
  • keep-regions-loaded - keep chunks inside WorldGuard regions loaded at all times.
  • check-on-unload - before unloading a chunk, make sure it is not inside a protected region.
  • region-whitelist - only these region names are affected. Empty means all regions.
  • scan-interval - how often (seconds) to re-scan regions.

Code (Text):

entity-limiter:
  enabled: false
  total-limit: 100
  hostile-limit: 30
  passive-limit: 40
  item-limit: 50
 
Caps how many entities a single chunk can hold and culls the extras to fight entity lag. All limits are per chunk. Named mobs, players and equipped armor stands are always kept. Off by default.
  • total-limit - hard cap on entities in one chunk.
  • hostile-limit / passive-limit / item-limit - separate caps for monsters, animals and dropped items.

Code (Text):

tps-throttle:
  enabled: true
  min-tps: 15.0
  target-tps: 19.0
 
Slows down the plugin's own chunk work when TPS drops.
  • min-tps - at or below this, chunk work is heavily held back.
  • target-tps - the TPS it tries to keep the server at.

Code (Text):

load-priority:
  enabled: true
 
A simple on/off for the load-priority system. The idea is that when a lot of chunks are queued at once, the ones closest to players are meant to load first instead of in random order. Nothing else to set here - just on or off.

Code (Text):

chunk-tickets:
  enabled: false
  default-duration: 300
 
A "chunk ticket" is a tag that asks the server to keep a chunk loaded for a while, even with no player nearby. With this on, ChunkManager can hand out its own short tickets (for example to keep an area warm right after a teleport) so a chunk does not instantly unload and reload.
  • default-duration - how long (seconds) a ticket lasts before it expires and the chunk is free to unload again. 300 = 5 minutes.
Off by default. This is ChunkManager's own ticket system - it still respects tickets from other plugins through the preloaded-chunks settings above.

Code (Text):

teleport-preload:
  enabled: true
  radius: 3

portal-preload:
  enabled: true
  radius: 4
 
Loads chunks at the destination before a player arrives, so they do not land in an unloaded void.
  • teleport-preload.radius - chunks loaded around a teleport target.
  • portal-preload.radius - chunks loaded around the other side of a portal.

Code (Text):

adaptive-loading:
  enabled: false
  ping-threshold-low: 50
  ping-threshold-med: 150
  ping-threshold-high: 300
 
Trims the loading radius for laggy (high-ping) players to ease their connection, while low-ping players keep the full radius. The three numbers are the ping (ms) borders: above medium loses 1 chunk, above high loses 2, very high loses 3. Off by default.

Code (Text):

geyser:
  auto-detect: true
  radius-reduction: 2
 
If GeyserMC is installed, Bedrock players get a smaller radius since their view distance is lower. radius-reduction is how many chunks to trim for them.

Code (Text):

chunk-cost:
  enabled: true
  update-interval: 100
 
Measures which chunks are the most expensive to tick (mob farms, redstone, etc). Feeds /cmtop and the map overlay. update-interval is in ticks.

Code (Text):

region-tick-monitor:
  enabled: true
  update-interval: 20
 
On Folia, shows TPS and MSPT per region with /cmrtps. update-interval is in ticks.

Code (Text):

map-overlay:
  enabled: true
  top-count: 20
  refresh-interval: 600
 
Draws your hottest / most expensive chunks onto Dynmap or BlueMap.
  • top-count - how many of the top chunks to show.
  • refresh-interval - how often (seconds) the overlay redraws.

Code (Text):

logging-level: INFO
language: en
broadcast-maintenance-changes: false

world-blacklist:
  - world_nether
  - world_the_end
 
  • logging-level - console detail. Use FINE for more, WARNING for less.
  • language - plugin language. en, es, fr, de, pt, it, ru, ja, ko, zh, ar.
  • broadcast-maintenance-changes - announce maintenance mode to everyone.
  • world-blacklist - worlds ChunkManager fully ignores. Nothing is loaded, unloaded or managed in these.
Resource Information
Author:
----------
Total Downloads: 1,926
First Release: Jul 20, 2024
Last Update: Jun 20, 2026
Category: ---------------
All-Time Rating:
10 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings