WorldSlim
A lightweight chunk save optimization plugin for Paper servers. WorldSlim reduces your world file size by automatically cleaning up chunks that players have barely visited.
Список изменений
WorldSlim 2.0.1
Minor release. Quality-of-life improvements on top of 2.0.0. Drop-in upgrade — no manual steps required from 2.0.0.
Two focused changes that make 2.x easier to operate: configs auto-update across versions, and /worldslim chunk now explains exactly why each chunk is kept or deleted.
What's New
Config Migration
Adds a config-version field to config.yml. On every plugin reload, the migrator walks the jar's default config and copies any missing keys into your on-disk file.
- User-edited values are preserved (your
min-inhabited-time: 1500stays1500) - Existing comments survive the load + save round-trip
- New keys arrive with their default comments attached
- Original file is backed up to
config.yml.bak.v<old>before any mutation - If migration fails for any reason, the original is restored from backup automatically
This means future updates that introduce new config sections (e.g. v2.1 will add worlds.overrides) will not require manual edits — your existing config gets the new fields appended on first reload, with their defaults and documentation intact.
/worldslim chunk — Full Decision Tree
The previous output (one line "would be kept: yes/no") only looked at InhabitedTime and gave misleading answers. The new output shows every signal that affects the cleanup decision plus four verdicts mirroring the actual runtime behavior:
=== Current chunk decision path ===
[123, -456] @ world
--- State signals ---
managed (registry): yes
managed (PDC): no
pre-existing (PDC): no
force-save (registry): no
force-save (PDC): no
loaded (now): yes
InhabitedTime: 340 ticks (17s) < 1200 threshold
aggressive mode: OFF
--- Verdicts ---
> Current (loaded): KEEP (loaded chunks are always protected)
> Hypothetical unloaded, aggressive=OFF: DELETE (low InhabitedTime, no force-save, not loaded)
> Hypothetical unloaded, aggressive=ON: DELETE (low InhabitedTime, no force-save, not loaded)
> ChunkUnloadListener: BLOCK SAVE (low InhabitedTime, NMS unsaved=false)
The decision logic is taken directly from ChunkCleaner.rewriteRegionFile and ChunkUnloadListener.onChunkUnload, so what you see here is what would actually happen at cleanup or unload time. The plugin's actual chat output is localized (Simplified Chinese in 2.0.x); the structure shown above mirrors it 1:1.
Compatibility
- From 2.0.0: drop-in. Migration only adds the
config-version: 2marker; nothing else changes because v2.0.0 already had all the current fields. - From 1.x: drop-in. Migration auto-injects
cleanup.aggressive,autosave-shield.*, andlogging.*with their defaults and comments. Yourconfig.yml.bak.v1keeps the original file safe. - Server forks: unchanged from 2.0.0 — Paper / Purpur / Folia / Leaves / Leaf 1.21.x all supported.
Requires Minecraft 1.21.x and Java 21.
Verification
End-to-end tested on Leaf 1.21.11 with a synthesized v1 config (no config-version, no aggressive, no autosave-shield, no logging):
| Check | Result |
|---|---|
| 6 user-edited values preserved | Yes |
| 8 missing fields injected with defaults | Yes |
| Comments preserved on existing keys | Yes |
| Comments attached to newly-added keys | Yes |
Backup written to config.yml.bak.v1 | Yes |
/worldslim chunk decisions match ChunkCleaner runtime | Yes |
Reporting Issues
When filing a bug, please include:
/worldslim diagnosescreenshot/worldslim chunkoutput for an affected chunk- Latest log from
plugins/WorldSlim/logs/ - Server type and version (Paper / Leaf / etc.)
