2.0.1
Compatibility
Changes
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.)
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:7cyR8p4W:XP1IQiNp"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:7cyR8p4W:XP1IQiNp"
}
