Biome CleanerСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачать
ВЕРСИИ (77)
release
Biome Cleaner 1.1.8 for Fabric 1.21.1
1.1.810 мая 2026 г.711Minecraft: 1.21.1fabric
Что нового
Two targeted fixes for modpacks that combine fast-worldgen performance mods with biome-overhaul packs. Default-config worlds without those mods are unchanged — same biomes, same seeds.
### Fixed
- **Cleanup silently didn't run on modpacks using fast biome-generation mods.** Reported on a 222-mod Fabric modpack running Wilder Wild, Bloom, and zfastnoise: Wilder Wild's `dying_forest` was generating as tiny single-quart islands and the cleaner was leaving them in place. On modpacks that include zfastnoise (or other performance mods that swap Minecraft's biome-creation step for a faster version), the cleaner was being skipped entirely — installed and loaded, but never actually cleaning anything. The symptom was that small biome patches stayed exactly where they were after world generation; running `/biomecleaner inspect` on one of them reported "Chunk seen by cleaner: NO" even on a freshly-generated chunk. The mod now hooks one step higher up in the chunk-generation pipeline, at the point all the fast-noise mods, C2ME's parallel worldgen, and vanilla all converge — so cleanup runs regardless of which mod is doing the biome-fill. If you were using `config/zfastnoise.mixin.toml`'s `[mixin.perf] biome = false` line as a workaround, you can flip it back to `true`. No effect on default-config worlds or on modpacks without those perf mods — same biomes, same seeds.
- **Tiny inland biome strips could persist when running parallel worldgen mods like C2ME.** Reported on the same modpack: a 4-quart strip of `minecraft:beach` was visible inland inside a `bloom:golden_forest` region, exactly the "stranded coastal patch" the size-range rules are meant to prevent. Root cause was a precision difference between two ways Minecraft samples biome data — the cleaner's view and the actual chunk palette occasionally disagree at a handful of boundary quarts when C2ME's density-function compiler is in use. The cleaner already protects against most consequences of this disagreement, but in one specific case the disagreeing quarts could end up in the "keep" portion of an oversized-region trim while the surrounding "real" quarts ended up in the trimmed-away portion — leaving a tiny visible island of the disagreement biome. The cleaner now catches this case in both the runtime path and the warming-ahead path, and replaces the affected quarts with whatever the surrounding noise field actually wanted there. **Default-config worlds without C2ME (or any other density-function-compiler mod) are unchanged** — the underlying disagreement only occurs under those specific mod combinations. Same biomes, same seeds, no config changes required.
release
Biome Cleaner 1.1.8 for Fabric 1.21.11
1.1.810 мая 2026 г.414Minecraft: 1.21.11fabric
Что нового
Two targeted fixes for modpacks that combine fast-worldgen performance mods with biome-overhaul packs. Default-config worlds without those mods are unchanged — same biomes, same seeds.
### Fixed
- **Cleanup silently didn't run on modpacks using fast biome-generation mods.** Reported on a 222-mod Fabric modpack running Wilder Wild, Bloom, and zfastnoise: Wilder Wild's `dying_forest` was generating as tiny single-quart islands and the cleaner was leaving them in place. On modpacks that include zfastnoise (or other performance mods that swap Minecraft's biome-creation step for a faster version), the cleaner was being skipped entirely — installed and loaded, but never actually cleaning anything. The symptom was that small biome patches stayed exactly where they were after world generation; running `/biomecleaner inspect` on one of them reported "Chunk seen by cleaner: NO" even on a freshly-generated chunk. The mod now hooks one step higher up in the chunk-generation pipeline, at the point all the fast-noise mods, C2ME's parallel worldgen, and vanilla all converge — so cleanup runs regardless of which mod is doing the biome-fill. If you were using `config/zfastnoise.mixin.toml`'s `[mixin.perf] biome = false` line as a workaround, you can flip it back to `true`. No effect on default-config worlds or on modpacks without those perf mods — same biomes, same seeds.
- **Tiny inland biome strips could persist when running parallel worldgen mods like C2ME.** Reported on the same modpack: a 4-quart strip of `minecraft:beach` was visible inland inside a `bloom:golden_forest` region, exactly the "stranded coastal patch" the size-range rules are meant to prevent. Root cause was a precision difference between two ways Minecraft samples biome data — the cleaner's view and the actual chunk palette occasionally disagree at a handful of boundary quarts when C2ME's density-function compiler is in use. The cleaner already protects against most consequences of this disagreement, but in one specific case the disagreeing quarts could end up in the "keep" portion of an oversized-region trim while the surrounding "real" quarts ended up in the trimmed-away portion — leaving a tiny visible island of the disagreement biome. The cleaner now catches this case in both the runtime path and the warming-ahead path, and replaces the affected quarts with whatever the surrounding noise field actually wanted there. **Default-config worlds without C2ME (or any other density-function-compiler mod) are unchanged** — the underlying disagreement only occurs under those specific mod combinations. Same biomes, same seeds, no config changes required.
release
Biome Cleaner 1.1.8 for Fabric 26.1
1.1.810 мая 2026 г.747Minecraft: 26.1, 26.1.1, 26.1.2fabric
Что нового
Two targeted fixes for modpacks that combine fast-worldgen performance mods with biome-overhaul packs. Default-config worlds without those mods are unchanged — same biomes, same seeds.
### Fixed
- **Cleanup silently didn't run on modpacks using fast biome-generation mods.** Reported on a 222-mod Fabric modpack running Wilder Wild, Bloom, and zfastnoise: Wilder Wild's `dying_forest` was generating as tiny single-quart islands and the cleaner was leaving them in place. On modpacks that include zfastnoise (or other performance mods that swap Minecraft's biome-creation step for a faster version), the cleaner was being skipped entirely — installed and loaded, but never actually cleaning anything. The symptom was that small biome patches stayed exactly where they were after world generation; running `/biomecleaner inspect` on one of them reported "Chunk seen by cleaner: NO" even on a freshly-generated chunk. The mod now hooks one step higher up in the chunk-generation pipeline, at the point all the fast-noise mods, C2ME's parallel worldgen, and vanilla all converge — so cleanup runs regardless of which mod is doing the biome-fill. If you were using `config/zfastnoise.mixin.toml`'s `[mixin.perf] biome = false` line as a workaround, you can flip it back to `true`. No effect on default-config worlds or on modpacks without those perf mods — same biomes, same seeds.
- **Tiny inland biome strips could persist when running parallel worldgen mods like C2ME.** Reported on the same modpack: a 4-quart strip of `minecraft:beach` was visible inland inside a `bloom:golden_forest` region, exactly the "stranded coastal patch" the size-range rules are meant to prevent. Root cause was a precision difference between two ways Minecraft samples biome data — the cleaner's view and the actual chunk palette occasionally disagree at a handful of boundary quarts when C2ME's density-function compiler is in use. The cleaner already protects against most consequences of this disagreement, but in one specific case the disagreeing quarts could end up in the "keep" portion of an oversized-region trim while the surrounding "real" quarts ended up in the trimmed-away portion — leaving a tiny visible island of the disagreement biome. The cleaner now catches this case in both the runtime path and the warming-ahead path, and replaces the affected quarts with whatever the surrounding noise field actually wanted there. **Default-config worlds without C2ME (or any other density-function-compiler mod) are unchanged** — the underlying disagreement only occurs under those specific mod combinations. Same biomes, same seeds, no config changes required.
release
Biome Cleaner 1.1.8 for Forge 1.21.1
1.1.810 мая 2026 г.39Minecraft: 1.21.1forge
Что нового
Two targeted fixes for modpacks that combine fast-worldgen performance mods with biome-overhaul packs. Default-config worlds without those mods are unchanged — same biomes, same seeds.
### Fixed
- **Cleanup silently didn't run on modpacks using fast biome-generation mods.** Reported on a 222-mod Fabric modpack running Wilder Wild, Bloom, and zfastnoise: Wilder Wild's `dying_forest` was generating as tiny single-quart islands and the cleaner was leaving them in place. On modpacks that include zfastnoise (or other performance mods that swap Minecraft's biome-creation step for a faster version), the cleaner was being skipped entirely — installed and loaded, but never actually cleaning anything. The symptom was that small biome patches stayed exactly where they were after world generation; running `/biomecleaner inspect` on one of them reported "Chunk seen by cleaner: NO" even on a freshly-generated chunk. The mod now hooks one step higher up in the chunk-generation pipeline, at the point all the fast-noise mods, C2ME's parallel worldgen, and vanilla all converge — so cleanup runs regardless of which mod is doing the biome-fill. If you were using `config/zfastnoise.mixin.toml`'s `[mixin.perf] biome = false` line as a workaround, you can flip it back to `true`. No effect on default-config worlds or on modpacks without those perf mods — same biomes, same seeds.
- **Tiny inland biome strips could persist when running parallel worldgen mods like C2ME.** Reported on the same modpack: a 4-quart strip of `minecraft:beach` was visible inland inside a `bloom:golden_forest` region, exactly the "stranded coastal patch" the size-range rules are meant to prevent. Root cause was a precision difference between two ways Minecraft samples biome data — the cleaner's view and the actual chunk palette occasionally disagree at a handful of boundary quarts when C2ME's density-function compiler is in use. The cleaner already protects against most consequences of this disagreement, but in one specific case the disagreeing quarts could end up in the "keep" portion of an oversized-region trim while the surrounding "real" quarts ended up in the trimmed-away portion — leaving a tiny visible island of the disagreement biome. The cleaner now catches this case in both the runtime path and the warming-ahead path, and replaces the affected quarts with whatever the surrounding noise field actually wanted there. **Default-config worlds without C2ME (or any other density-function-compiler mod) are unchanged** — the underlying disagreement only occurs under those specific mod combinations. Same biomes, same seeds, no config changes required.
release
Biome Cleaner 1.1.8 for NeoForge 1.21.1
1.1.810 мая 2026 г.6,1 тыс.Minecraft: 1.21.1neoforge
Что нового
Two targeted fixes for modpacks that combine fast-worldgen performance mods with biome-overhaul packs. Default-config worlds without those mods are unchanged — same biomes, same seeds.
### Fixed
- **Cleanup silently didn't run on modpacks using fast biome-generation mods.** Reported on a 222-mod Fabric modpack running Wilder Wild, Bloom, and zfastnoise: Wilder Wild's `dying_forest` was generating as tiny single-quart islands and the cleaner was leaving them in place. On modpacks that include zfastnoise (or other performance mods that swap Minecraft's biome-creation step for a faster version), the cleaner was being skipped entirely — installed and loaded, but never actually cleaning anything. The symptom was that small biome patches stayed exactly where they were after world generation; running `/biomecleaner inspect` on one of them reported "Chunk seen by cleaner: NO" even on a freshly-generated chunk. The mod now hooks one step higher up in the chunk-generation pipeline, at the point all the fast-noise mods, C2ME's parallel worldgen, and vanilla all converge — so cleanup runs regardless of which mod is doing the biome-fill. If you were using `config/zfastnoise.mixin.toml`'s `[mixin.perf] biome = false` line as a workaround, you can flip it back to `true`. No effect on default-config worlds or on modpacks without those perf mods — same biomes, same seeds.
- **Tiny inland biome strips could persist when running parallel worldgen mods like C2ME.** Reported on the same modpack: a 4-quart strip of `minecraft:beach` was visible inland inside a `bloom:golden_forest` region, exactly the "stranded coastal patch" the size-range rules are meant to prevent. Root cause was a precision difference between two ways Minecraft samples biome data — the cleaner's view and the actual chunk palette occasionally disagree at a handful of boundary quarts when C2ME's density-function compiler is in use. The cleaner already protects against most consequences of this disagreement, but in one specific case the disagreeing quarts could end up in the "keep" portion of an oversized-region trim while the surrounding "real" quarts ended up in the trimmed-away portion — leaving a tiny visible island of the disagreement biome. The cleaner now catches this case in both the runtime path and the warming-ahead path, and replaces the affected quarts with whatever the surrounding noise field actually wanted there. **Default-config worlds without C2ME (or any other density-function-compiler mod) are unchanged** — the underlying disagreement only occurs under those specific mod combinations. Same biomes, same seeds, no config changes required.
release
Biome Cleaner 1.1.8 for NeoForge 1.21.11
1.1.810 мая 2026 г.998Minecraft: 1.21.11neoforge
Что нового
Two targeted fixes for modpacks that combine fast-worldgen performance mods with biome-overhaul packs. Default-config worlds without those mods are unchanged — same biomes, same seeds.
### Fixed
- **Cleanup silently didn't run on modpacks using fast biome-generation mods.** Reported on a 222-mod Fabric modpack running Wilder Wild, Bloom, and zfastnoise: Wilder Wild's `dying_forest` was generating as tiny single-quart islands and the cleaner was leaving them in place. On modpacks that include zfastnoise (or other performance mods that swap Minecraft's biome-creation step for a faster version), the cleaner was being skipped entirely — installed and loaded, but never actually cleaning anything. The symptom was that small biome patches stayed exactly where they were after world generation; running `/biomecleaner inspect` on one of them reported "Chunk seen by cleaner: NO" even on a freshly-generated chunk. The mod now hooks one step higher up in the chunk-generation pipeline, at the point all the fast-noise mods, C2ME's parallel worldgen, and vanilla all converge — so cleanup runs regardless of which mod is doing the biome-fill. If you were using `config/zfastnoise.mixin.toml`'s `[mixin.perf] biome = false` line as a workaround, you can flip it back to `true`. No effect on default-config worlds or on modpacks without those perf mods — same biomes, same seeds.
- **Tiny inland biome strips could persist when running parallel worldgen mods like C2ME.** Reported on the same modpack: a 4-quart strip of `minecraft:beach` was visible inland inside a `bloom:golden_forest` region, exactly the "stranded coastal patch" the size-range rules are meant to prevent. Root cause was a precision difference between two ways Minecraft samples biome data — the cleaner's view and the actual chunk palette occasionally disagree at a handful of boundary quarts when C2ME's density-function compiler is in use. The cleaner already protects against most consequences of this disagreement, but in one specific case the disagreeing quarts could end up in the "keep" portion of an oversized-region trim while the surrounding "real" quarts ended up in the trimmed-away portion — leaving a tiny visible island of the disagreement biome. The cleaner now catches this case in both the runtime path and the warming-ahead path, and replaces the affected quarts with whatever the surrounding noise field actually wanted there. **Default-config worlds without C2ME (or any other density-function-compiler mod) are unchanged** — the underlying disagreement only occurs under those specific mod combinations. Same biomes, same seeds, no config changes required.
release
Biome Cleaner 1.1.8 for NeoForge 26.1
1.1.810 мая 2026 г.101Minecraft: 26.1, 26.1.1, 26.1.2neoforge
Что нового
Two targeted fixes for modpacks that combine fast-worldgen performance mods with biome-overhaul packs. Default-config worlds without those mods are unchanged — same biomes, same seeds.
### Fixed
- **Cleanup silently didn't run on modpacks using fast biome-generation mods.** Reported on a 222-mod Fabric modpack running Wilder Wild, Bloom, and zfastnoise: Wilder Wild's `dying_forest` was generating as tiny single-quart islands and the cleaner was leaving them in place. On modpacks that include zfastnoise (or other performance mods that swap Minecraft's biome-creation step for a faster version), the cleaner was being skipped entirely — installed and loaded, but never actually cleaning anything. The symptom was that small biome patches stayed exactly where they were after world generation; running `/biomecleaner inspect` on one of them reported "Chunk seen by cleaner: NO" even on a freshly-generated chunk. The mod now hooks one step higher up in the chunk-generation pipeline, at the point all the fast-noise mods, C2ME's parallel worldgen, and vanilla all converge — so cleanup runs regardless of which mod is doing the biome-fill. If you were using `config/zfastnoise.mixin.toml`'s `[mixin.perf] biome = false` line as a workaround, you can flip it back to `true`. No effect on default-config worlds or on modpacks without those perf mods — same biomes, same seeds.
- **Tiny inland biome strips could persist when running parallel worldgen mods like C2ME.** Reported on the same modpack: a 4-quart strip of `minecraft:beach` was visible inland inside a `bloom:golden_forest` region, exactly the "stranded coastal patch" the size-range rules are meant to prevent. Root cause was a precision difference between two ways Minecraft samples biome data — the cleaner's view and the actual chunk palette occasionally disagree at a handful of boundary quarts when C2ME's density-function compiler is in use. The cleaner already protects against most consequences of this disagreement, but in one specific case the disagreeing quarts could end up in the "keep" portion of an oversized-region trim while the surrounding "real" quarts ended up in the trimmed-away portion — leaving a tiny visible island of the disagreement biome. The cleaner now catches this case in both the runtime path and the warming-ahead path, and replaces the affected quarts with whatever the surrounding noise field actually wanted there. **Default-config worlds without C2ME (or any other density-function-compiler mod) are unchanged** — the underlying disagreement only occurs under those specific mod combinations. Same biomes, same seeds, no config changes required.
release
Biome Cleaner 1.1.7 for Fabric 26.1
1.1.710 мая 2026 г.25Minecraft: 26.1, 26.1.1, 26.1.2fabric
Что нового
A compatibility-only follow-up to 1.1.6: the Fabric and NeoForge 26.1 builds now work on Minecraft 26.1.1 and 26.1.2 as well. **No gameplay changes** — same code as 1.1.6, same biomes, same seeds. Only the supported-version metadata changed.
### Changed
- **Fabric 26.1 now loads on Minecraft 26.1.1 and 26.1.2.** The 1.1.6 Fabric jar was pinned to exactly Minecraft 26.1, so Fabric loader refused to start the game when running on 26.1.1 or 26.1.2. The 26.1.x patch releases are bug-fix-only versions of 26.1 — the worldgen code the mod hooks into is identical — so the supported-version range now covers all three.
- **NeoForge 26.1 is now listed for Minecraft 26.1.1 and 26.1.2 on Modrinth.** The 1.1.6 NeoForge jar already loaded on the patch releases, but the Modrinth listing only showed up under 26.1, so users on 26.1.1 or 26.1.2 couldn't find it via the version filter. The listing now appears under all three.
release
Biome Cleaner 1.1.7 for NeoForge 26.1
1.1.710 мая 2026 г.18Minecraft: 26.1, 26.1.1, 26.1.2neoforge
Что нового
A compatibility-only follow-up to 1.1.6: the Fabric and NeoForge 26.1 builds now work on Minecraft 26.1.1 and 26.1.2 as well. **No gameplay changes** — same code as 1.1.6, same biomes, same seeds. Only the supported-version metadata changed.
### Changed
- **Fabric 26.1 now loads on Minecraft 26.1.1 and 26.1.2.** The 1.1.6 Fabric jar was pinned to exactly Minecraft 26.1, so Fabric loader refused to start the game when running on 26.1.1 or 26.1.2. The 26.1.x patch releases are bug-fix-only versions of 26.1 — the worldgen code the mod hooks into is identical — so the supported-version range now covers all three.
- **NeoForge 26.1 is now listed for Minecraft 26.1.1 and 26.1.2 on Modrinth.** The 1.1.6 NeoForge jar already loaded on the patch releases, but the Modrinth listing only showed up under 26.1, so users on 26.1.1 or 26.1.2 couldn't find it via the version filter. The listing now appears under all three.
release
Biome Cleaner 1.1.6 for Fabric 1.21.1
1.1.610 мая 2026 г.20Minecraft: 1.21.1fabric
Что нового
This release is another performance pass on top of 1.1.5. The cleanup algorithm now reuses more of its internal scratch buffers between regions and avoids creating short-lived helper objects on a hot lookup path. **Cleanup output is unchanged from 1.1.5** — same seed still gives the same biomes, and no config changes are required to benefit.
### Changed
- **Less GC churn during chunk generation, especially with C2ME and similar parallel-worldgen mods.** A second round of allocation tuning in the cleanup hot path. The cleaner now reuses the scratch buffers it builds while scanning which biomes border an oversized region — previous releases threw those buffers away after every region — and a related internal lookup that turns noise samples into biomes is no longer creating small short-lived helper objects on every call. On the bench worlds we use for tuning, this trims roughly **185 MB of garbage** off a representative chunk-generation run, and worst-case chunk generation time (the slowest few chunks per hundred) drops by **about 17%** versus 1.1.5. In practice: fewer noticeable hitches when flying into unexplored terrain and less work for the GC overall. Single-player vanilla setups see a smaller but still positive change. No effect on the biomes the cleaner produces — same world, same output, just less overhead.
- **Cache size auto-tuning now floors at 128 MB on heaps of 6 GB or more.** A small follow-up to the heap-scaled cache curve introduced in 1.1.5. With auto-sizing, a 6 GB heap used to land at about 122 MB of cache budget — slightly *under* the pre-1.1.5 fixed default of 128 MB. The auto curve now floors at 128 MB whenever your allocated heap is 6 GB or larger, so anyone running on auto-sizing with a generous Minecraft allocation is guaranteed at least the same cache they'd have had on a default 1.1.4 install. Heaps below 6 GB are unchanged, and any explicit `cacheMemoryMB` value already set in `config/biome-cleanup/advanced.json` is still respected exactly as before.
release
Biome Cleaner 1.1.6 for Fabric 1.21.11
1.1.610 мая 2026 г.16Minecraft: 1.21.11fabric
Что нового
This release is another performance pass on top of 1.1.5. The cleanup algorithm now reuses more of its internal scratch buffers between regions and avoids creating short-lived helper objects on a hot lookup path. **Cleanup output is unchanged from 1.1.5** — same seed still gives the same biomes, and no config changes are required to benefit.
### Changed
- **Less GC churn during chunk generation, especially with C2ME and similar parallel-worldgen mods.** A second round of allocation tuning in the cleanup hot path. The cleaner now reuses the scratch buffers it builds while scanning which biomes border an oversized region — previous releases threw those buffers away after every region — and a related internal lookup that turns noise samples into biomes is no longer creating small short-lived helper objects on every call. On the bench worlds we use for tuning, this trims roughly **185 MB of garbage** off a representative chunk-generation run, and worst-case chunk generation time (the slowest few chunks per hundred) drops by **about 17%** versus 1.1.5. In practice: fewer noticeable hitches when flying into unexplored terrain and less work for the GC overall. Single-player vanilla setups see a smaller but still positive change. No effect on the biomes the cleaner produces — same world, same output, just less overhead.
- **Cache size auto-tuning now floors at 128 MB on heaps of 6 GB or more.** A small follow-up to the heap-scaled cache curve introduced in 1.1.5. With auto-sizing, a 6 GB heap used to land at about 122 MB of cache budget — slightly *under* the pre-1.1.5 fixed default of 128 MB. The auto curve now floors at 128 MB whenever your allocated heap is 6 GB or larger, so anyone running on auto-sizing with a generous Minecraft allocation is guaranteed at least the same cache they'd have had on a default 1.1.4 install. Heaps below 6 GB are unchanged, and any explicit `cacheMemoryMB` value already set in `config/biome-cleanup/advanced.json` is still respected exactly as before.
release
Biome Cleaner 1.1.6 for Fabric 26.1
1.1.610 мая 2026 г.13Minecraft: 26.1fabric
Что нового
This release is another performance pass on top of 1.1.5. The cleanup algorithm now reuses more of its internal scratch buffers between regions and avoids creating short-lived helper objects on a hot lookup path. **Cleanup output is unchanged from 1.1.5** — same seed still gives the same biomes, and no config changes are required to benefit.
### Changed
- **Less GC churn during chunk generation, especially with C2ME and similar parallel-worldgen mods.** A second round of allocation tuning in the cleanup hot path. The cleaner now reuses the scratch buffers it builds while scanning which biomes border an oversized region — previous releases threw those buffers away after every region — and a related internal lookup that turns noise samples into biomes is no longer creating small short-lived helper objects on every call. On the bench worlds we use for tuning, this trims roughly **185 MB of garbage** off a representative chunk-generation run, and worst-case chunk generation time (the slowest few chunks per hundred) drops by **about 17%** versus 1.1.5. In practice: fewer noticeable hitches when flying into unexplored terrain and less work for the GC overall. Single-player vanilla setups see a smaller but still positive change. No effect on the biomes the cleaner produces — same world, same output, just less overhead.
- **Cache size auto-tuning now floors at 128 MB on heaps of 6 GB or more.** A small follow-up to the heap-scaled cache curve introduced in 1.1.5. With auto-sizing, a 6 GB heap used to land at about 122 MB of cache budget — slightly *under* the pre-1.1.5 fixed default of 128 MB. The auto curve now floors at 128 MB whenever your allocated heap is 6 GB or larger, so anyone running on auto-sizing with a generous Minecraft allocation is guaranteed at least the same cache they'd have had on a default 1.1.4 install. Heaps below 6 GB are unchanged, and any explicit `cacheMemoryMB` value already set in `config/biome-cleanup/advanced.json` is still respected exactly as before.
release
Biome Cleaner 1.1.6 for Forge 1.21.1
1.1.610 мая 2026 г.8Minecraft: 1.21.1forge
Что нового
This release is another performance pass on top of 1.1.5. The cleanup algorithm now reuses more of its internal scratch buffers between regions and avoids creating short-lived helper objects on a hot lookup path. **Cleanup output is unchanged from 1.1.5** — same seed still gives the same biomes, and no config changes are required to benefit.
### Changed
- **Less GC churn during chunk generation, especially with C2ME and similar parallel-worldgen mods.** A second round of allocation tuning in the cleanup hot path. The cleaner now reuses the scratch buffers it builds while scanning which biomes border an oversized region — previous releases threw those buffers away after every region — and a related internal lookup that turns noise samples into biomes is no longer creating small short-lived helper objects on every call. On the bench worlds we use for tuning, this trims roughly **185 MB of garbage** off a representative chunk-generation run, and worst-case chunk generation time (the slowest few chunks per hundred) drops by **about 17%** versus 1.1.5. In practice: fewer noticeable hitches when flying into unexplored terrain and less work for the GC overall. Single-player vanilla setups see a smaller but still positive change. No effect on the biomes the cleaner produces — same world, same output, just less overhead.
- **Cache size auto-tuning now floors at 128 MB on heaps of 6 GB or more.** A small follow-up to the heap-scaled cache curve introduced in 1.1.5. With auto-sizing, a 6 GB heap used to land at about 122 MB of cache budget — slightly *under* the pre-1.1.5 fixed default of 128 MB. The auto curve now floors at 128 MB whenever your allocated heap is 6 GB or larger, so anyone running on auto-sizing with a generous Minecraft allocation is guaranteed at least the same cache they'd have had on a default 1.1.4 install. Heaps below 6 GB are unchanged, and any explicit `cacheMemoryMB` value already set in `config/biome-cleanup/advanced.json` is still respected exactly as before.
release
Biome Cleaner 1.1.6 for NeoForge 1.21.1
1.1.610 мая 2026 г.53Minecraft: 1.21.1neoforge
Что нового
This release is another performance pass on top of 1.1.5. The cleanup algorithm now reuses more of its internal scratch buffers between regions and avoids creating short-lived helper objects on a hot lookup path. **Cleanup output is unchanged from 1.1.5** — same seed still gives the same biomes, and no config changes are required to benefit.
### Changed
- **Less GC churn during chunk generation, especially with C2ME and similar parallel-worldgen mods.** A second round of allocation tuning in the cleanup hot path. The cleaner now reuses the scratch buffers it builds while scanning which biomes border an oversized region — previous releases threw those buffers away after every region — and a related internal lookup that turns noise samples into biomes is no longer creating small short-lived helper objects on every call. On the bench worlds we use for tuning, this trims roughly **185 MB of garbage** off a representative chunk-generation run, and worst-case chunk generation time (the slowest few chunks per hundred) drops by **about 17%** versus 1.1.5. In practice: fewer noticeable hitches when flying into unexplored terrain and less work for the GC overall. Single-player vanilla setups see a smaller but still positive change. No effect on the biomes the cleaner produces — same world, same output, just less overhead.
- **Cache size auto-tuning now floors at 128 MB on heaps of 6 GB or more.** A small follow-up to the heap-scaled cache curve introduced in 1.1.5. With auto-sizing, a 6 GB heap used to land at about 122 MB of cache budget — slightly *under* the pre-1.1.5 fixed default of 128 MB. The auto curve now floors at 128 MB whenever your allocated heap is 6 GB or larger, so anyone running on auto-sizing with a generous Minecraft allocation is guaranteed at least the same cache they'd have had on a default 1.1.4 install. Heaps below 6 GB are unchanged, and any explicit `cacheMemoryMB` value already set in `config/biome-cleanup/advanced.json` is still respected exactly as before.
release
Biome Cleaner 1.1.6 for NeoForge 1.21.11
1.1.610 мая 2026 г.13Minecraft: 1.21.11neoforge
Что нового
This release is another performance pass on top of 1.1.5. The cleanup algorithm now reuses more of its internal scratch buffers between regions and avoids creating short-lived helper objects on a hot lookup path. **Cleanup output is unchanged from 1.1.5** — same seed still gives the same biomes, and no config changes are required to benefit.
### Changed
- **Less GC churn during chunk generation, especially with C2ME and similar parallel-worldgen mods.** A second round of allocation tuning in the cleanup hot path. The cleaner now reuses the scratch buffers it builds while scanning which biomes border an oversized region — previous releases threw those buffers away after every region — and a related internal lookup that turns noise samples into biomes is no longer creating small short-lived helper objects on every call. On the bench worlds we use for tuning, this trims roughly **185 MB of garbage** off a representative chunk-generation run, and worst-case chunk generation time (the slowest few chunks per hundred) drops by **about 17%** versus 1.1.5. In practice: fewer noticeable hitches when flying into unexplored terrain and less work for the GC overall. Single-player vanilla setups see a smaller but still positive change. No effect on the biomes the cleaner produces — same world, same output, just less overhead.
- **Cache size auto-tuning now floors at 128 MB on heaps of 6 GB or more.** A small follow-up to the heap-scaled cache curve introduced in 1.1.5. With auto-sizing, a 6 GB heap used to land at about 122 MB of cache budget — slightly *under* the pre-1.1.5 fixed default of 128 MB. The auto curve now floors at 128 MB whenever your allocated heap is 6 GB or larger, so anyone running on auto-sizing with a generous Minecraft allocation is guaranteed at least the same cache they'd have had on a default 1.1.4 install. Heaps below 6 GB are unchanged, and any explicit `cacheMemoryMB` value already set in `config/biome-cleanup/advanced.json` is still respected exactly as before.
release
Biome Cleaner 1.1.6 for NeoForge 26.1
1.1.610 мая 2026 г.12Minecraft: 26.1neoforge
Что нового
This release is another performance pass on top of 1.1.5. The cleanup algorithm now reuses more of its internal scratch buffers between regions and avoids creating short-lived helper objects on a hot lookup path. **Cleanup output is unchanged from 1.1.5** — same seed still gives the same biomes, and no config changes are required to benefit.
### Changed
- **Less GC churn during chunk generation, especially with C2ME and similar parallel-worldgen mods.** A second round of allocation tuning in the cleanup hot path. The cleaner now reuses the scratch buffers it builds while scanning which biomes border an oversized region — previous releases threw those buffers away after every region — and a related internal lookup that turns noise samples into biomes is no longer creating small short-lived helper objects on every call. On the bench worlds we use for tuning, this trims roughly **185 MB of garbage** off a representative chunk-generation run, and worst-case chunk generation time (the slowest few chunks per hundred) drops by **about 17%** versus 1.1.5. In practice: fewer noticeable hitches when flying into unexplored terrain and less work for the GC overall. Single-player vanilla setups see a smaller but still positive change. No effect on the biomes the cleaner produces — same world, same output, just less overhead.
- **Cache size auto-tuning now floors at 128 MB on heaps of 6 GB or more.** A small follow-up to the heap-scaled cache curve introduced in 1.1.5. With auto-sizing, a 6 GB heap used to land at about 122 MB of cache budget — slightly *under* the pre-1.1.5 fixed default of 128 MB. The auto curve now floors at 128 MB whenever your allocated heap is 6 GB or larger, so anyone running on auto-sizing with a generous Minecraft allocation is guaranteed at least the same cache they'd have had on a default 1.1.4 install. Heaps below 6 GB are unchanged, and any explicit `cacheMemoryMB` value already set in `config/biome-cleanup/advanced.json` is still respected exactly as before.
release
Biome Cleaner 1.1.5 for Fabric 1.21.1
1.1.58 мая 2026 г.28Minecraft: 1.21.1fabric
Что нового
This release is mostly a performance pass aimed at modpacks running parallel chunk generation (C2ME and similar), plus one fix for custom configs. Cleanup output is unchanged from 1.1.4 apart from the specific case described in the fix below — same seed still gives the same biomes.
### Changed
- **Smoother chunk generation, especially with C2ME and similar parallel-worldgen mods.** A round of performance tuning to the cleanup hot path. The biggest win is on modpacks where lots of chunks are being generated at once: less time spent waiting on shared work, less garbage churn for the GC to clean up, and fewer hitches when you fly into unexplored terrain. Single-player vanilla setups will see a smaller but still positive change. No effect on the biomes the cleaner produces — same world, same output, just less overhead.
- **The cache size now scales with your allocated RAM by default.** Previous releases used a fixed 128 MB cache budget no matter how much memory you'd given Minecraft. The default now scales with the heap — on an 8 GB allocation that's about 164 MB, roughly 28% more entries cached, which means fewer redundant lookups during chunk generation. **If you're upgrading from an older version, your existing config still has the old fixed value written in it** and Minecraft won't touch your config file on its own. To switch to auto-sizing, open `config/biome-cleanup/advanced.json`, find the `cacheMemoryMB` line, and either delete it or change the number to `0`. If you'd rather keep an explicit budget, leave it as a positive number — the mod will respect it. The startup log now prints whether your cache is on `auto` or `explicit` so you can confirm which mode you're running.
### Fixed
- **Custom size ranges could paint biomes into places they shouldn't exist.** This affected users of the `[min, max]` size-range syntax (introduced in 1.1.0) when their config had overlapping group and per-biome entries. When the cleaner trimmed an oversized region, it had to pick a "filler" biome for the trimmed-off portion — and the old logic could pick a filler that didn't actually exist anywhere in the surrounding terrain. The reported case: on a Minecraft 26.1 world with a custom config combining a `"beaches"` group default and a `[32, 64]` range on `minecraft:beach`, an oversized warm-coast beach got partially repainted as **`snowy_beach`**, even though no snowy beach existed anywhere nearby. A neighbouring savanna island then got pulled toward `snowy_beach` too, treating the painted-in patch as its new neighbour. The cleaner now only picks a filler biome that actually borders the region in the surrounding terrain; if no real neighbour qualifies, the region is left at its original size rather than painted with something that doesn't belong there. **Default-config worlds are nearly unchanged.** A small number of oversized `stony_shore` patches that 1.1.4 used to trim by inventing an adjacent beach will now stay at their original size; this only matters if you've actually set a range on `stony_shore` in your config, and we'd rather leave a real shore intact than paint a phantom beach next to it.
release
Biome Cleaner 1.1.5 for Fabric 1.21.11
1.1.58 мая 2026 г.30Minecraft: 1.21.11fabric
Что нового
This release is mostly a performance pass aimed at modpacks running parallel chunk generation (C2ME and similar), plus one fix for custom configs. Cleanup output is unchanged from 1.1.4 apart from the specific case described in the fix below — same seed still gives the same biomes.
### Changed
- **Smoother chunk generation, especially with C2ME and similar parallel-worldgen mods.** A round of performance tuning to the cleanup hot path. The biggest win is on modpacks where lots of chunks are being generated at once: less time spent waiting on shared work, less garbage churn for the GC to clean up, and fewer hitches when you fly into unexplored terrain. Single-player vanilla setups will see a smaller but still positive change. No effect on the biomes the cleaner produces — same world, same output, just less overhead.
- **The cache size now scales with your allocated RAM by default.** Previous releases used a fixed 128 MB cache budget no matter how much memory you'd given Minecraft. The default now scales with the heap — on an 8 GB allocation that's about 164 MB, roughly 28% more entries cached, which means fewer redundant lookups during chunk generation. **If you're upgrading from an older version, your existing config still has the old fixed value written in it** and Minecraft won't touch your config file on its own. To switch to auto-sizing, open `config/biome-cleanup/advanced.json`, find the `cacheMemoryMB` line, and either delete it or change the number to `0`. If you'd rather keep an explicit budget, leave it as a positive number — the mod will respect it. The startup log now prints whether your cache is on `auto` or `explicit` so you can confirm which mode you're running.
### Fixed
- **Custom size ranges could paint biomes into places they shouldn't exist.** This affected users of the `[min, max]` size-range syntax (introduced in 1.1.0) when their config had overlapping group and per-biome entries. When the cleaner trimmed an oversized region, it had to pick a "filler" biome for the trimmed-off portion — and the old logic could pick a filler that didn't actually exist anywhere in the surrounding terrain. The reported case: on a Minecraft 26.1 world with a custom config combining a `"beaches"` group default and a `[32, 64]` range on `minecraft:beach`, an oversized warm-coast beach got partially repainted as **`snowy_beach`**, even though no snowy beach existed anywhere nearby. A neighbouring savanna island then got pulled toward `snowy_beach` too, treating the painted-in patch as its new neighbour. The cleaner now only picks a filler biome that actually borders the region in the surrounding terrain; if no real neighbour qualifies, the region is left at its original size rather than painted with something that doesn't belong there. **Default-config worlds are nearly unchanged.** A small number of oversized `stony_shore` patches that 1.1.4 used to trim by inventing an adjacent beach will now stay at their original size; this only matters if you've actually set a range on `stony_shore` in your config, and we'd rather leave a real shore intact than paint a phantom beach next to it.
release
Biome Cleaner 1.1.5 for Fabric 26.1
1.1.58 мая 2026 г.16Minecraft: 26.1fabric
Что нового
This release is mostly a performance pass aimed at modpacks running parallel chunk generation (C2ME and similar), plus one fix for custom configs. Cleanup output is unchanged from 1.1.4 apart from the specific case described in the fix below — same seed still gives the same biomes.
### Changed
- **Smoother chunk generation, especially with C2ME and similar parallel-worldgen mods.** A round of performance tuning to the cleanup hot path. The biggest win is on modpacks where lots of chunks are being generated at once: less time spent waiting on shared work, less garbage churn for the GC to clean up, and fewer hitches when you fly into unexplored terrain. Single-player vanilla setups will see a smaller but still positive change. No effect on the biomes the cleaner produces — same world, same output, just less overhead.
- **The cache size now scales with your allocated RAM by default.** Previous releases used a fixed 128 MB cache budget no matter how much memory you'd given Minecraft. The default now scales with the heap — on an 8 GB allocation that's about 164 MB, roughly 28% more entries cached, which means fewer redundant lookups during chunk generation. **If you're upgrading from an older version, your existing config still has the old fixed value written in it** and Minecraft won't touch your config file on its own. To switch to auto-sizing, open `config/biome-cleanup/advanced.json`, find the `cacheMemoryMB` line, and either delete it or change the number to `0`. If you'd rather keep an explicit budget, leave it as a positive number — the mod will respect it. The startup log now prints whether your cache is on `auto` or `explicit` so you can confirm which mode you're running.
### Fixed
- **Custom size ranges could paint biomes into places they shouldn't exist.** This affected users of the `[min, max]` size-range syntax (introduced in 1.1.0) when their config had overlapping group and per-biome entries. When the cleaner trimmed an oversized region, it had to pick a "filler" biome for the trimmed-off portion — and the old logic could pick a filler that didn't actually exist anywhere in the surrounding terrain. The reported case: on a Minecraft 26.1 world with a custom config combining a `"beaches"` group default and a `[32, 64]` range on `minecraft:beach`, an oversized warm-coast beach got partially repainted as **`snowy_beach`**, even though no snowy beach existed anywhere nearby. A neighbouring savanna island then got pulled toward `snowy_beach` too, treating the painted-in patch as its new neighbour. The cleaner now only picks a filler biome that actually borders the region in the surrounding terrain; if no real neighbour qualifies, the region is left at its original size rather than painted with something that doesn't belong there. **Default-config worlds are nearly unchanged.** A small number of oversized `stony_shore` patches that 1.1.4 used to trim by inventing an adjacent beach will now stay at their original size; this only matters if you've actually set a range on `stony_shore` in your config, and we'd rather leave a real shore intact than paint a phantom beach next to it.
release
Biome Cleaner 1.1.5 for Forge 1.21.1
1.1.58 мая 2026 г.7Minecraft: 1.21.1forge
Что нового
This release is mostly a performance pass aimed at modpacks running parallel chunk generation (C2ME and similar), plus one fix for custom configs. Cleanup output is unchanged from 1.1.4 apart from the specific case described in the fix below — same seed still gives the same biomes.
### Changed
- **Smoother chunk generation, especially with C2ME and similar parallel-worldgen mods.** A round of performance tuning to the cleanup hot path. The biggest win is on modpacks where lots of chunks are being generated at once: less time spent waiting on shared work, less garbage churn for the GC to clean up, and fewer hitches when you fly into unexplored terrain. Single-player vanilla setups will see a smaller but still positive change. No effect on the biomes the cleaner produces — same world, same output, just less overhead.
- **The cache size now scales with your allocated RAM by default.** Previous releases used a fixed 128 MB cache budget no matter how much memory you'd given Minecraft. The default now scales with the heap — on an 8 GB allocation that's about 164 MB, roughly 28% more entries cached, which means fewer redundant lookups during chunk generation. **If you're upgrading from an older version, your existing config still has the old fixed value written in it** and Minecraft won't touch your config file on its own. To switch to auto-sizing, open `config/biome-cleanup/advanced.json`, find the `cacheMemoryMB` line, and either delete it or change the number to `0`. If you'd rather keep an explicit budget, leave it as a positive number — the mod will respect it. The startup log now prints whether your cache is on `auto` or `explicit` so you can confirm which mode you're running.
### Fixed
- **Custom size ranges could paint biomes into places they shouldn't exist.** This affected users of the `[min, max]` size-range syntax (introduced in 1.1.0) when their config had overlapping group and per-biome entries. When the cleaner trimmed an oversized region, it had to pick a "filler" biome for the trimmed-off portion — and the old logic could pick a filler that didn't actually exist anywhere in the surrounding terrain. The reported case: on a Minecraft 26.1 world with a custom config combining a `"beaches"` group default and a `[32, 64]` range on `minecraft:beach`, an oversized warm-coast beach got partially repainted as **`snowy_beach`**, even though no snowy beach existed anywhere nearby. A neighbouring savanna island then got pulled toward `snowy_beach` too, treating the painted-in patch as its new neighbour. The cleaner now only picks a filler biome that actually borders the region in the surrounding terrain; if no real neighbour qualifies, the region is left at its original size rather than painted with something that doesn't belong there. **Default-config worlds are nearly unchanged.** A small number of oversized `stony_shore` patches that 1.1.4 used to trim by inventing an adjacent beach will now stay at their original size; this only matters if you've actually set a range on `stony_shore` in your config, and we'd rather leave a real shore intact than paint a phantom beach next to it.
release
Biome Cleaner 1.1.5 for NeoForge 1.21.1
1.1.58 мая 2026 г.92Minecraft: 1.21.1neoforge
Что нового
This release is mostly a performance pass aimed at modpacks running parallel chunk generation (C2ME and similar), plus one fix for custom configs. Cleanup output is unchanged from 1.1.4 apart from the specific case described in the fix below — same seed still gives the same biomes.
### Changed
- **Smoother chunk generation, especially with C2ME and similar parallel-worldgen mods.** A round of performance tuning to the cleanup hot path. The biggest win is on modpacks where lots of chunks are being generated at once: less time spent waiting on shared work, less garbage churn for the GC to clean up, and fewer hitches when you fly into unexplored terrain. Single-player vanilla setups will see a smaller but still positive change. No effect on the biomes the cleaner produces — same world, same output, just less overhead.
- **The cache size now scales with your allocated RAM by default.** Previous releases used a fixed 128 MB cache budget no matter how much memory you'd given Minecraft. The default now scales with the heap — on an 8 GB allocation that's about 164 MB, roughly 28% more entries cached, which means fewer redundant lookups during chunk generation. **If you're upgrading from an older version, your existing config still has the old fixed value written in it** and Minecraft won't touch your config file on its own. To switch to auto-sizing, open `config/biome-cleanup/advanced.json`, find the `cacheMemoryMB` line, and either delete it or change the number to `0`. If you'd rather keep an explicit budget, leave it as a positive number — the mod will respect it. The startup log now prints whether your cache is on `auto` or `explicit` so you can confirm which mode you're running.
### Fixed
- **Custom size ranges could paint biomes into places they shouldn't exist.** This affected users of the `[min, max]` size-range syntax (introduced in 1.1.0) when their config had overlapping group and per-biome entries. When the cleaner trimmed an oversized region, it had to pick a "filler" biome for the trimmed-off portion — and the old logic could pick a filler that didn't actually exist anywhere in the surrounding terrain. The reported case: on a Minecraft 26.1 world with a custom config combining a `"beaches"` group default and a `[32, 64]` range on `minecraft:beach`, an oversized warm-coast beach got partially repainted as **`snowy_beach`**, even though no snowy beach existed anywhere nearby. A neighbouring savanna island then got pulled toward `snowy_beach` too, treating the painted-in patch as its new neighbour. The cleaner now only picks a filler biome that actually borders the region in the surrounding terrain; if no real neighbour qualifies, the region is left at its original size rather than painted with something that doesn't belong there. **Default-config worlds are nearly unchanged.** A small number of oversized `stony_shore` patches that 1.1.4 used to trim by inventing an adjacent beach will now stay at their original size; this only matters if you've actually set a range on `stony_shore` in your config, and we'd rather leave a real shore intact than paint a phantom beach next to it.
release
Biome Cleaner 1.1.5 for NeoForge 1.21.11
1.1.58 мая 2026 г.10Minecraft: 1.21.11neoforge
Что нового
This release is mostly a performance pass aimed at modpacks running parallel chunk generation (C2ME and similar), plus one fix for custom configs. Cleanup output is unchanged from 1.1.4 apart from the specific case described in the fix below — same seed still gives the same biomes.
### Changed
- **Smoother chunk generation, especially with C2ME and similar parallel-worldgen mods.** A round of performance tuning to the cleanup hot path. The biggest win is on modpacks where lots of chunks are being generated at once: less time spent waiting on shared work, less garbage churn for the GC to clean up, and fewer hitches when you fly into unexplored terrain. Single-player vanilla setups will see a smaller but still positive change. No effect on the biomes the cleaner produces — same world, same output, just less overhead.
- **The cache size now scales with your allocated RAM by default.** Previous releases used a fixed 128 MB cache budget no matter how much memory you'd given Minecraft. The default now scales with the heap — on an 8 GB allocation that's about 164 MB, roughly 28% more entries cached, which means fewer redundant lookups during chunk generation. **If you're upgrading from an older version, your existing config still has the old fixed value written in it** and Minecraft won't touch your config file on its own. To switch to auto-sizing, open `config/biome-cleanup/advanced.json`, find the `cacheMemoryMB` line, and either delete it or change the number to `0`. If you'd rather keep an explicit budget, leave it as a positive number — the mod will respect it. The startup log now prints whether your cache is on `auto` or `explicit` so you can confirm which mode you're running.
### Fixed
- **Custom size ranges could paint biomes into places they shouldn't exist.** This affected users of the `[min, max]` size-range syntax (introduced in 1.1.0) when their config had overlapping group and per-biome entries. When the cleaner trimmed an oversized region, it had to pick a "filler" biome for the trimmed-off portion — and the old logic could pick a filler that didn't actually exist anywhere in the surrounding terrain. The reported case: on a Minecraft 26.1 world with a custom config combining a `"beaches"` group default and a `[32, 64]` range on `minecraft:beach`, an oversized warm-coast beach got partially repainted as **`snowy_beach`**, even though no snowy beach existed anywhere nearby. A neighbouring savanna island then got pulled toward `snowy_beach` too, treating the painted-in patch as its new neighbour. The cleaner now only picks a filler biome that actually borders the region in the surrounding terrain; if no real neighbour qualifies, the region is left at its original size rather than painted with something that doesn't belong there. **Default-config worlds are nearly unchanged.** A small number of oversized `stony_shore` patches that 1.1.4 used to trim by inventing an adjacent beach will now stay at their original size; this only matters if you've actually set a range on `stony_shore` in your config, and we'd rather leave a real shore intact than paint a phantom beach next to it.
release
Biome Cleaner 1.1.5 for NeoForge 26.1
1.1.58 мая 2026 г.8Minecraft: 26.1neoforge
Что нового
This release is mostly a performance pass aimed at modpacks running parallel chunk generation (C2ME and similar), plus one fix for custom configs. Cleanup output is unchanged from 1.1.4 apart from the specific case described in the fix below — same seed still gives the same biomes.
### Changed
- **Smoother chunk generation, especially with C2ME and similar parallel-worldgen mods.** A round of performance tuning to the cleanup hot path. The biggest win is on modpacks where lots of chunks are being generated at once: less time spent waiting on shared work, less garbage churn for the GC to clean up, and fewer hitches when you fly into unexplored terrain. Single-player vanilla setups will see a smaller but still positive change. No effect on the biomes the cleaner produces — same world, same output, just less overhead.
- **The cache size now scales with your allocated RAM by default.** Previous releases used a fixed 128 MB cache budget no matter how much memory you'd given Minecraft. The default now scales with the heap — on an 8 GB allocation that's about 164 MB, roughly 28% more entries cached, which means fewer redundant lookups during chunk generation. **If you're upgrading from an older version, your existing config still has the old fixed value written in it** and Minecraft won't touch your config file on its own. To switch to auto-sizing, open `config/biome-cleanup/advanced.json`, find the `cacheMemoryMB` line, and either delete it or change the number to `0`. If you'd rather keep an explicit budget, leave it as a positive number — the mod will respect it. The startup log now prints whether your cache is on `auto` or `explicit` so you can confirm which mode you're running.
### Fixed
- **Custom size ranges could paint biomes into places they shouldn't exist.** This affected users of the `[min, max]` size-range syntax (introduced in 1.1.0) when their config had overlapping group and per-biome entries. When the cleaner trimmed an oversized region, it had to pick a "filler" biome for the trimmed-off portion — and the old logic could pick a filler that didn't actually exist anywhere in the surrounding terrain. The reported case: on a Minecraft 26.1 world with a custom config combining a `"beaches"` group default and a `[32, 64]` range on `minecraft:beach`, an oversized warm-coast beach got partially repainted as **`snowy_beach`**, even though no snowy beach existed anywhere nearby. A neighbouring savanna island then got pulled toward `snowy_beach` too, treating the painted-in patch as its new neighbour. The cleaner now only picks a filler biome that actually borders the region in the surrounding terrain; if no real neighbour qualifies, the region is left at its original size rather than painted with something that doesn't belong there. **Default-config worlds are nearly unchanged.** A small number of oversized `stony_shore` patches that 1.1.4 used to trim by inventing an adjacent beach will now stay at their original size; this only matters if you've actually set a range on `stony_shore` in your config, and we'd rather leave a real shore intact than paint a phantom beach next to it.
release
Biome Cleaner 1.1.4 for Fabric 1.21.1
1.1.47 мая 2026 г.16Minecraft: 1.21.1fabric
Что нового
This release improves cleanup quality on both vanilla and biome-overhaul-modded worlds, fixes two long-standing edge cases that mainly affected modded worldgen, and adds an in-game command to make bug reports easier.
### Fixed
- **Trimming oversized biome regions sometimes left tiny stranded islands behind.** When a biome region is larger than its configured `max` size, the cleaner trims it down by folding the excess quarts into neighbouring biomes. Occasionally a handful of those quarts were left stranded as a small island adjacent to the trimmed region rather than merging cleanly in — usually because no adjacent neighbour had room to grow without itself going over its own `max`, or because the neighbour the planner picked wasn't a clean fit and ended up stranded itself. The planner now reserves room in absorbing neighbours up front, folds unviable leftovers back into the original region when there's headroom, and breaks ties toward neighbours that stay neatly sized. **Vanilla and modded worlds both benefit** — vanilla seeds see noticeably fewer stray-island patches, and the effect is even larger on biome-overhaul worldgen mods where many regions exceed their `max` and need trimming.
- **Inland beaches and shores were sometimes preserved when they barely touched a river or ocean.** The "must touch ocean or river to count as coastal" rule (`requiredBoundaryGroups` in the config) accepted *any* contact as enough — even a single quart of river adjacency was sufficient. With biome-overhauling worldgen mods that introduce extra biomes near coastlines, this could keep large beaches as "coastal" despite being almost entirely inland (e.g. a beach with one quart of river touch and 80+ quarts of forest neighbours). The rule now requires meaningful contact: at least 4 qualifying boundary contacts, *or* at least 10% of the region's total boundary in the rule's biome list. Either condition passes, so genuinely small coastal regions still work — but token contact no longer rescues a stranded inland beach. Vanilla worlds without worldgen mods are unaffected; their coastlines comfortably exceed both thresholds.
- **Oversized shores on heavily-modded worldgen were silently skipped instead of being trimmed.** When you configure a biome with a `[min, max]` range (e.g. `"minecraft:stony_shore": [32, 64]`), regions larger than `max` should be trimmed down. The cleaner had an internal exploration ceiling of 4096 quarts, sized for vanilla worldgen where shores are intrinsically small. Biome-overhaul mods (clifftree's granite shores, extended stony coastlines, and similar) routinely produce shore regions in the 10000–20000-quart range; those blew past the ceiling, the planner aborted with "budget exceeded", and the region was left exactly as the world generated it. To make matters more confusing, `/biomecleaner inspect` had said the region "would be trimmed" because inspect uses a much larger 65536-quart scan and didn't know the cleanup pipeline would give up earlier. The cleanup ceiling now matches inspect's at 65536 quarts by default, which covers every modded shore we've measured. Vanilla output is byte-identical to 1.1.3 because no vanilla region ever approached the old ceiling either. If a modded biome can produce regions even larger than 65536 quarts, the new top-level `oversizedPlannerBudgetCap` field in `advanced.json` lets you raise it further; `/biomecleaner inspect` now correctly reports `OVERSIZED but EXCEEDS PLANNER BUDGET` with the exact threshold when a region won't fit, instead of falsely promising a trim.
### Added
- **`/biomecleaner inspect` command for bug reports.** Stand inside a region you think the cleaner handled wrong and run the command — the mod prints a structured report to chat and `latest.log` covering the world seed, Minecraft version, mod loader and mod count (the full sorted mod list goes only to the log), your position, the biome the algorithm sees versus the biome stored in your chunk palette, the configured size threshold and required-boundary rule, the result of a fresh region scan (region size, classification, qualifying-vs-total boundary contacts with the floor/ratio pass-fail breakdown, top boundary biomes), and a plain-language verdict. The log block is tagged `[BIOMECLEANER-INSPECT]` for easy copy-paste into bug reports. The scan walks up to a 1024×1024-block region so the reported size is the true region size, not the cleanup pipeline's short-circuited proof-of-stable size.
release
Biome Cleaner 1.1.4 for Fabric 1.21.11
1.1.47 мая 2026 г.46Minecraft: 1.21.11fabric
Что нового
This release improves cleanup quality on both vanilla and biome-overhaul-modded worlds, fixes two long-standing edge cases that mainly affected modded worldgen, and adds an in-game command to make bug reports easier.
### Fixed
- **Trimming oversized biome regions sometimes left tiny stranded islands behind.** When a biome region is larger than its configured `max` size, the cleaner trims it down by folding the excess quarts into neighbouring biomes. Occasionally a handful of those quarts were left stranded as a small island adjacent to the trimmed region rather than merging cleanly in — usually because no adjacent neighbour had room to grow without itself going over its own `max`, or because the neighbour the planner picked wasn't a clean fit and ended up stranded itself. The planner now reserves room in absorbing neighbours up front, folds unviable leftovers back into the original region when there's headroom, and breaks ties toward neighbours that stay neatly sized. **Vanilla and modded worlds both benefit** — vanilla seeds see noticeably fewer stray-island patches, and the effect is even larger on biome-overhaul worldgen mods where many regions exceed their `max` and need trimming.
- **Inland beaches and shores were sometimes preserved when they barely touched a river or ocean.** The "must touch ocean or river to count as coastal" rule (`requiredBoundaryGroups` in the config) accepted *any* contact as enough — even a single quart of river adjacency was sufficient. With biome-overhauling worldgen mods that introduce extra biomes near coastlines, this could keep large beaches as "coastal" despite being almost entirely inland (e.g. a beach with one quart of river touch and 80+ quarts of forest neighbours). The rule now requires meaningful contact: at least 4 qualifying boundary contacts, *or* at least 10% of the region's total boundary in the rule's biome list. Either condition passes, so genuinely small coastal regions still work — but token contact no longer rescues a stranded inland beach. Vanilla worlds without worldgen mods are unaffected; their coastlines comfortably exceed both thresholds.
- **Oversized shores on heavily-modded worldgen were silently skipped instead of being trimmed.** When you configure a biome with a `[min, max]` range (e.g. `"minecraft:stony_shore": [32, 64]`), regions larger than `max` should be trimmed down. The cleaner had an internal exploration ceiling of 4096 quarts, sized for vanilla worldgen where shores are intrinsically small. Biome-overhaul mods (clifftree's granite shores, extended stony coastlines, and similar) routinely produce shore regions in the 10000–20000-quart range; those blew past the ceiling, the planner aborted with "budget exceeded", and the region was left exactly as the world generated it. To make matters more confusing, `/biomecleaner inspect` had said the region "would be trimmed" because inspect uses a much larger 65536-quart scan and didn't know the cleanup pipeline would give up earlier. The cleanup ceiling now matches inspect's at 65536 quarts by default, which covers every modded shore we've measured. Vanilla output is byte-identical to 1.1.3 because no vanilla region ever approached the old ceiling either. If a modded biome can produce regions even larger than 65536 quarts, the new top-level `oversizedPlannerBudgetCap` field in `advanced.json` lets you raise it further; `/biomecleaner inspect` now correctly reports `OVERSIZED but EXCEEDS PLANNER BUDGET` with the exact threshold when a region won't fit, instead of falsely promising a trim.
### Added
- **`/biomecleaner inspect` command for bug reports.** Stand inside a region you think the cleaner handled wrong and run the command — the mod prints a structured report to chat and `latest.log` covering the world seed, Minecraft version, mod loader and mod count (the full sorted mod list goes only to the log), your position, the biome the algorithm sees versus the biome stored in your chunk palette, the configured size threshold and required-boundary rule, the result of a fresh region scan (region size, classification, qualifying-vs-total boundary contacts with the floor/ratio pass-fail breakdown, top boundary biomes), and a plain-language verdict. The log block is tagged `[BIOMECLEANER-INSPECT]` for easy copy-paste into bug reports. The scan walks up to a 1024×1024-block region so the reported size is the true region size, not the cleanup pipeline's short-circuited proof-of-stable size.
release
Biome Cleaner 1.1.4 for Fabric 26.1
1.1.47 мая 2026 г.17Minecraft: 26.1fabric
Что нового
This release improves cleanup quality on both vanilla and biome-overhaul-modded worlds, fixes two long-standing edge cases that mainly affected modded worldgen, and adds an in-game command to make bug reports easier.
### Fixed
- **Trimming oversized biome regions sometimes left tiny stranded islands behind.** When a biome region is larger than its configured `max` size, the cleaner trims it down by folding the excess quarts into neighbouring biomes. Occasionally a handful of those quarts were left stranded as a small island adjacent to the trimmed region rather than merging cleanly in — usually because no adjacent neighbour had room to grow without itself going over its own `max`, or because the neighbour the planner picked wasn't a clean fit and ended up stranded itself. The planner now reserves room in absorbing neighbours up front, folds unviable leftovers back into the original region when there's headroom, and breaks ties toward neighbours that stay neatly sized. **Vanilla and modded worlds both benefit** — vanilla seeds see noticeably fewer stray-island patches, and the effect is even larger on biome-overhaul worldgen mods where many regions exceed their `max` and need trimming.
- **Inland beaches and shores were sometimes preserved when they barely touched a river or ocean.** The "must touch ocean or river to count as coastal" rule (`requiredBoundaryGroups` in the config) accepted *any* contact as enough — even a single quart of river adjacency was sufficient. With biome-overhauling worldgen mods that introduce extra biomes near coastlines, this could keep large beaches as "coastal" despite being almost entirely inland (e.g. a beach with one quart of river touch and 80+ quarts of forest neighbours). The rule now requires meaningful contact: at least 4 qualifying boundary contacts, *or* at least 10% of the region's total boundary in the rule's biome list. Either condition passes, so genuinely small coastal regions still work — but token contact no longer rescues a stranded inland beach. Vanilla worlds without worldgen mods are unaffected; their coastlines comfortably exceed both thresholds.
- **Oversized shores on heavily-modded worldgen were silently skipped instead of being trimmed.** When you configure a biome with a `[min, max]` range (e.g. `"minecraft:stony_shore": [32, 64]`), regions larger than `max` should be trimmed down. The cleaner had an internal exploration ceiling of 4096 quarts, sized for vanilla worldgen where shores are intrinsically small. Biome-overhaul mods (clifftree's granite shores, extended stony coastlines, and similar) routinely produce shore regions in the 10000–20000-quart range; those blew past the ceiling, the planner aborted with "budget exceeded", and the region was left exactly as the world generated it. To make matters more confusing, `/biomecleaner inspect` had said the region "would be trimmed" because inspect uses a much larger 65536-quart scan and didn't know the cleanup pipeline would give up earlier. The cleanup ceiling now matches inspect's at 65536 quarts by default, which covers every modded shore we've measured. Vanilla output is byte-identical to 1.1.3 because no vanilla region ever approached the old ceiling either. If a modded biome can produce regions even larger than 65536 quarts, the new top-level `oversizedPlannerBudgetCap` field in `advanced.json` lets you raise it further; `/biomecleaner inspect` now correctly reports `OVERSIZED but EXCEEDS PLANNER BUDGET` with the exact threshold when a region won't fit, instead of falsely promising a trim.
### Added
- **`/biomecleaner inspect` command for bug reports.** Stand inside a region you think the cleaner handled wrong and run the command — the mod prints a structured report to chat and `latest.log` covering the world seed, Minecraft version, mod loader and mod count (the full sorted mod list goes only to the log), your position, the biome the algorithm sees versus the biome stored in your chunk palette, the configured size threshold and required-boundary rule, the result of a fresh region scan (region size, classification, qualifying-vs-total boundary contacts with the floor/ratio pass-fail breakdown, top boundary biomes), and a plain-language verdict. The log block is tagged `[BIOMECLEANER-INSPECT]` for easy copy-paste into bug reports. The scan walks up to a 1024×1024-block region so the reported size is the true region size, not the cleanup pipeline's short-circuited proof-of-stable size.
release
Biome Cleaner 1.1.4 for Forge 1.21.1
1.1.47 мая 2026 г.12Minecraft: 1.21.1forge
Что нового
This release improves cleanup quality on both vanilla and biome-overhaul-modded worlds, fixes two long-standing edge cases that mainly affected modded worldgen, and adds an in-game command to make bug reports easier.
### Fixed
- **Trimming oversized biome regions sometimes left tiny stranded islands behind.** When a biome region is larger than its configured `max` size, the cleaner trims it down by folding the excess quarts into neighbouring biomes. Occasionally a handful of those quarts were left stranded as a small island adjacent to the trimmed region rather than merging cleanly in — usually because no adjacent neighbour had room to grow without itself going over its own `max`, or because the neighbour the planner picked wasn't a clean fit and ended up stranded itself. The planner now reserves room in absorbing neighbours up front, folds unviable leftovers back into the original region when there's headroom, and breaks ties toward neighbours that stay neatly sized. **Vanilla and modded worlds both benefit** — vanilla seeds see noticeably fewer stray-island patches, and the effect is even larger on biome-overhaul worldgen mods where many regions exceed their `max` and need trimming.
- **Inland beaches and shores were sometimes preserved when they barely touched a river or ocean.** The "must touch ocean or river to count as coastal" rule (`requiredBoundaryGroups` in the config) accepted *any* contact as enough — even a single quart of river adjacency was sufficient. With biome-overhauling worldgen mods that introduce extra biomes near coastlines, this could keep large beaches as "coastal" despite being almost entirely inland (e.g. a beach with one quart of river touch and 80+ quarts of forest neighbours). The rule now requires meaningful contact: at least 4 qualifying boundary contacts, *or* at least 10% of the region's total boundary in the rule's biome list. Either condition passes, so genuinely small coastal regions still work — but token contact no longer rescues a stranded inland beach. Vanilla worlds without worldgen mods are unaffected; their coastlines comfortably exceed both thresholds.
- **Oversized shores on heavily-modded worldgen were silently skipped instead of being trimmed.** When you configure a biome with a `[min, max]` range (e.g. `"minecraft:stony_shore": [32, 64]`), regions larger than `max` should be trimmed down. The cleaner had an internal exploration ceiling of 4096 quarts, sized for vanilla worldgen where shores are intrinsically small. Biome-overhaul mods (clifftree's granite shores, extended stony coastlines, and similar) routinely produce shore regions in the 10000–20000-quart range; those blew past the ceiling, the planner aborted with "budget exceeded", and the region was left exactly as the world generated it. To make matters more confusing, `/biomecleaner inspect` had said the region "would be trimmed" because inspect uses a much larger 65536-quart scan and didn't know the cleanup pipeline would give up earlier. The cleanup ceiling now matches inspect's at 65536 quarts by default, which covers every modded shore we've measured. Vanilla output is byte-identical to 1.1.3 because no vanilla region ever approached the old ceiling either. If a modded biome can produce regions even larger than 65536 quarts, the new top-level `oversizedPlannerBudgetCap` field in `advanced.json` lets you raise it further; `/biomecleaner inspect` now correctly reports `OVERSIZED but EXCEEDS PLANNER BUDGET` with the exact threshold when a region won't fit, instead of falsely promising a trim.
### Added
- **`/biomecleaner inspect` command for bug reports.** Stand inside a region you think the cleaner handled wrong and run the command — the mod prints a structured report to chat and `latest.log` covering the world seed, Minecraft version, mod loader and mod count (the full sorted mod list goes only to the log), your position, the biome the algorithm sees versus the biome stored in your chunk palette, the configured size threshold and required-boundary rule, the result of a fresh region scan (region size, classification, qualifying-vs-total boundary contacts with the floor/ratio pass-fail breakdown, top boundary biomes), and a plain-language verdict. The log block is tagged `[BIOMECLEANER-INSPECT]` for easy copy-paste into bug reports. The scan walks up to a 1024×1024-block region so the reported size is the true region size, not the cleanup pipeline's short-circuited proof-of-stable size.
release
Biome Cleaner 1.1.4 for NeoForge 1.21.1
1.1.47 мая 2026 г.82Minecraft: 1.21.1neoforge
Что нового
This release improves cleanup quality on both vanilla and biome-overhaul-modded worlds, fixes two long-standing edge cases that mainly affected modded worldgen, and adds an in-game command to make bug reports easier.
### Fixed
- **Trimming oversized biome regions sometimes left tiny stranded islands behind.** When a biome region is larger than its configured `max` size, the cleaner trims it down by folding the excess quarts into neighbouring biomes. Occasionally a handful of those quarts were left stranded as a small island adjacent to the trimmed region rather than merging cleanly in — usually because no adjacent neighbour had room to grow without itself going over its own `max`, or because the neighbour the planner picked wasn't a clean fit and ended up stranded itself. The planner now reserves room in absorbing neighbours up front, folds unviable leftovers back into the original region when there's headroom, and breaks ties toward neighbours that stay neatly sized. **Vanilla and modded worlds both benefit** — vanilla seeds see noticeably fewer stray-island patches, and the effect is even larger on biome-overhaul worldgen mods where many regions exceed their `max` and need trimming.
- **Inland beaches and shores were sometimes preserved when they barely touched a river or ocean.** The "must touch ocean or river to count as coastal" rule (`requiredBoundaryGroups` in the config) accepted *any* contact as enough — even a single quart of river adjacency was sufficient. With biome-overhauling worldgen mods that introduce extra biomes near coastlines, this could keep large beaches as "coastal" despite being almost entirely inland (e.g. a beach with one quart of river touch and 80+ quarts of forest neighbours). The rule now requires meaningful contact: at least 4 qualifying boundary contacts, *or* at least 10% of the region's total boundary in the rule's biome list. Either condition passes, so genuinely small coastal regions still work — but token contact no longer rescues a stranded inland beach. Vanilla worlds without worldgen mods are unaffected; their coastlines comfortably exceed both thresholds.
- **Oversized shores on heavily-modded worldgen were silently skipped instead of being trimmed.** When you configure a biome with a `[min, max]` range (e.g. `"minecraft:stony_shore": [32, 64]`), regions larger than `max` should be trimmed down. The cleaner had an internal exploration ceiling of 4096 quarts, sized for vanilla worldgen where shores are intrinsically small. Biome-overhaul mods (clifftree's granite shores, extended stony coastlines, and similar) routinely produce shore regions in the 10000–20000-quart range; those blew past the ceiling, the planner aborted with "budget exceeded", and the region was left exactly as the world generated it. To make matters more confusing, `/biomecleaner inspect` had said the region "would be trimmed" because inspect uses a much larger 65536-quart scan and didn't know the cleanup pipeline would give up earlier. The cleanup ceiling now matches inspect's at 65536 quarts by default, which covers every modded shore we've measured. Vanilla output is byte-identical to 1.1.3 because no vanilla region ever approached the old ceiling either. If a modded biome can produce regions even larger than 65536 quarts, the new top-level `oversizedPlannerBudgetCap` field in `advanced.json` lets you raise it further; `/biomecleaner inspect` now correctly reports `OVERSIZED but EXCEEDS PLANNER BUDGET` with the exact threshold when a region won't fit, instead of falsely promising a trim.
### Added
- **`/biomecleaner inspect` command for bug reports.** Stand inside a region you think the cleaner handled wrong and run the command — the mod prints a structured report to chat and `latest.log` covering the world seed, Minecraft version, mod loader and mod count (the full sorted mod list goes only to the log), your position, the biome the algorithm sees versus the biome stored in your chunk palette, the configured size threshold and required-boundary rule, the result of a fresh region scan (region size, classification, qualifying-vs-total boundary contacts with the floor/ratio pass-fail breakdown, top boundary biomes), and a plain-language verdict. The log block is tagged `[BIOMECLEANER-INSPECT]` for easy copy-paste into bug reports. The scan walks up to a 1024×1024-block region so the reported size is the true region size, not the cleanup pipeline's short-circuited proof-of-stable size.
release
Biome Cleaner 1.1.4 for NeoForge 1.21.11
1.1.47 мая 2026 г.9Minecraft: 1.21.11neoforge
Что нового
This release improves cleanup quality on both vanilla and biome-overhaul-modded worlds, fixes two long-standing edge cases that mainly affected modded worldgen, and adds an in-game command to make bug reports easier.
### Fixed
- **Trimming oversized biome regions sometimes left tiny stranded islands behind.** When a biome region is larger than its configured `max` size, the cleaner trims it down by folding the excess quarts into neighbouring biomes. Occasionally a handful of those quarts were left stranded as a small island adjacent to the trimmed region rather than merging cleanly in — usually because no adjacent neighbour had room to grow without itself going over its own `max`, or because the neighbour the planner picked wasn't a clean fit and ended up stranded itself. The planner now reserves room in absorbing neighbours up front, folds unviable leftovers back into the original region when there's headroom, and breaks ties toward neighbours that stay neatly sized. **Vanilla and modded worlds both benefit** — vanilla seeds see noticeably fewer stray-island patches, and the effect is even larger on biome-overhaul worldgen mods where many regions exceed their `max` and need trimming.
- **Inland beaches and shores were sometimes preserved when they barely touched a river or ocean.** The "must touch ocean or river to count as coastal" rule (`requiredBoundaryGroups` in the config) accepted *any* contact as enough — even a single quart of river adjacency was sufficient. With biome-overhauling worldgen mods that introduce extra biomes near coastlines, this could keep large beaches as "coastal" despite being almost entirely inland (e.g. a beach with one quart of river touch and 80+ quarts of forest neighbours). The rule now requires meaningful contact: at least 4 qualifying boundary contacts, *or* at least 10% of the region's total boundary in the rule's biome list. Either condition passes, so genuinely small coastal regions still work — but token contact no longer rescues a stranded inland beach. Vanilla worlds without worldgen mods are unaffected; their coastlines comfortably exceed both thresholds.
- **Oversized shores on heavily-modded worldgen were silently skipped instead of being trimmed.** When you configure a biome with a `[min, max]` range (e.g. `"minecraft:stony_shore": [32, 64]`), regions larger than `max` should be trimmed down. The cleaner had an internal exploration ceiling of 4096 quarts, sized for vanilla worldgen where shores are intrinsically small. Biome-overhaul mods (clifftree's granite shores, extended stony coastlines, and similar) routinely produce shore regions in the 10000–20000-quart range; those blew past the ceiling, the planner aborted with "budget exceeded", and the region was left exactly as the world generated it. To make matters more confusing, `/biomecleaner inspect` had said the region "would be trimmed" because inspect uses a much larger 65536-quart scan and didn't know the cleanup pipeline would give up earlier. The cleanup ceiling now matches inspect's at 65536 quarts by default, which covers every modded shore we've measured. Vanilla output is byte-identical to 1.1.3 because no vanilla region ever approached the old ceiling either. If a modded biome can produce regions even larger than 65536 quarts, the new top-level `oversizedPlannerBudgetCap` field in `advanced.json` lets you raise it further; `/biomecleaner inspect` now correctly reports `OVERSIZED but EXCEEDS PLANNER BUDGET` with the exact threshold when a region won't fit, instead of falsely promising a trim.
### Added
- **`/biomecleaner inspect` command for bug reports.** Stand inside a region you think the cleaner handled wrong and run the command — the mod prints a structured report to chat and `latest.log` covering the world seed, Minecraft version, mod loader and mod count (the full sorted mod list goes only to the log), your position, the biome the algorithm sees versus the biome stored in your chunk palette, the configured size threshold and required-boundary rule, the result of a fresh region scan (region size, classification, qualifying-vs-total boundary contacts with the floor/ratio pass-fail breakdown, top boundary biomes), and a plain-language verdict. The log block is tagged `[BIOMECLEANER-INSPECT]` for easy copy-paste into bug reports. The scan walks up to a 1024×1024-block region so the reported size is the true region size, not the cleanup pipeline's short-circuited proof-of-stable size.
release
Biome Cleaner 1.1.4 for NeoForge 26.1
1.1.47 мая 2026 г.11Minecraft: 26.1neoforge
Что нового
This release improves cleanup quality on both vanilla and biome-overhaul-modded worlds, fixes two long-standing edge cases that mainly affected modded worldgen, and adds an in-game command to make bug reports easier.
### Fixed
- **Trimming oversized biome regions sometimes left tiny stranded islands behind.** When a biome region is larger than its configured `max` size, the cleaner trims it down by folding the excess quarts into neighbouring biomes. Occasionally a handful of those quarts were left stranded as a small island adjacent to the trimmed region rather than merging cleanly in — usually because no adjacent neighbour had room to grow without itself going over its own `max`, or because the neighbour the planner picked wasn't a clean fit and ended up stranded itself. The planner now reserves room in absorbing neighbours up front, folds unviable leftovers back into the original region when there's headroom, and breaks ties toward neighbours that stay neatly sized. **Vanilla and modded worlds both benefit** — vanilla seeds see noticeably fewer stray-island patches, and the effect is even larger on biome-overhaul worldgen mods where many regions exceed their `max` and need trimming.
- **Inland beaches and shores were sometimes preserved when they barely touched a river or ocean.** The "must touch ocean or river to count as coastal" rule (`requiredBoundaryGroups` in the config) accepted *any* contact as enough — even a single quart of river adjacency was sufficient. With biome-overhauling worldgen mods that introduce extra biomes near coastlines, this could keep large beaches as "coastal" despite being almost entirely inland (e.g. a beach with one quart of river touch and 80+ quarts of forest neighbours). The rule now requires meaningful contact: at least 4 qualifying boundary contacts, *or* at least 10% of the region's total boundary in the rule's biome list. Either condition passes, so genuinely small coastal regions still work — but token contact no longer rescues a stranded inland beach. Vanilla worlds without worldgen mods are unaffected; their coastlines comfortably exceed both thresholds.
- **Oversized shores on heavily-modded worldgen were silently skipped instead of being trimmed.** When you configure a biome with a `[min, max]` range (e.g. `"minecraft:stony_shore": [32, 64]`), regions larger than `max` should be trimmed down. The cleaner had an internal exploration ceiling of 4096 quarts, sized for vanilla worldgen where shores are intrinsically small. Biome-overhaul mods (clifftree's granite shores, extended stony coastlines, and similar) routinely produce shore regions in the 10000–20000-quart range; those blew past the ceiling, the planner aborted with "budget exceeded", and the region was left exactly as the world generated it. To make matters more confusing, `/biomecleaner inspect` had said the region "would be trimmed" because inspect uses a much larger 65536-quart scan and didn't know the cleanup pipeline would give up earlier. The cleanup ceiling now matches inspect's at 65536 quarts by default, which covers every modded shore we've measured. Vanilla output is byte-identical to 1.1.3 because no vanilla region ever approached the old ceiling either. If a modded biome can produce regions even larger than 65536 quarts, the new top-level `oversizedPlannerBudgetCap` field in `advanced.json` lets you raise it further; `/biomecleaner inspect` now correctly reports `OVERSIZED but EXCEEDS PLANNER BUDGET` with the exact threshold when a region won't fit, instead of falsely promising a trim.
### Added
- **`/biomecleaner inspect` command for bug reports.** Stand inside a region you think the cleaner handled wrong and run the command — the mod prints a structured report to chat and `latest.log` covering the world seed, Minecraft version, mod loader and mod count (the full sorted mod list goes only to the log), your position, the biome the algorithm sees versus the biome stored in your chunk palette, the configured size threshold and required-boundary rule, the result of a fresh region scan (region size, classification, qualifying-vs-total boundary contacts with the floor/ratio pass-fail breakdown, top boundary biomes), and a plain-language verdict. The log block is tagged `[BIOMECLEANER-INSPECT]` for easy copy-paste into bug reports. The scan walks up to a 1024×1024-block region so the reported size is the true region size, not the cleanup pipeline's short-circuited proof-of-stable size.
release
Biome Cleaner 1.1.3 for Fabric 1.21.1
1.1.36 мая 2026 г.15Minecraft: 1.21.1fabric
Что нового
### Fixed
- **Spawn-area chunks could be skipped on servers using parallel world-gen mods (e.g. C2ME).** The Overworld-only check from 1.1.2 armed itself when the server finished starting, but mods that generate chunks in parallel could begin spawn-area generation a moment earlier. Any Overworld chunks created in that brief window slipped past the cleaner and stayed unprocessed forever — usually invisible, but it left tiny micro-biomes intact near spawn on freshly-generated worlds. The check now lets chunks through during that startup window (only the Overworld is force-generated at startup, so this can't accidentally touch the Nether or End) and tightens to Overworld-only as soon as the server finishes starting.
- **Surface block correction in cave entrances now correctly only runs in the Overworld.** The cave-carver fix from 1.1.0 (which makes carved surfaces use the cleaned-up biome instead of the raw one) was running in every dimension, not just the Overworld. In the Nether and End that meant carvers were reading the chunk palette where they expected to read the raw biome source, with no defined behaviour. It's gated on the Overworld now, matching the rest of the cleanup pipeline.
### Changed
- **Overworld detection is now exact instead of heuristic.** 1.1.2 identified Overworld-like dimensions by scanning their biome list for `minecraft:plains` or `minecraft:forest`. That worked for vanilla but could misclassify modded "skyland"-style dimensions that happened to include either biome. The mod now records the actual Overworld biome source the moment the server is ready and matches against it directly. Modded dimensions are no longer accidentally picked up — if you have a modded dimension you genuinely want cleaned, that needs to become an explicit opt-in (planned for a future release).
- **Default `allowIntraGroupReplacement` in `common.toml` is now empty.** The setting still works for back-compat, but the modern, richer way to say "let oceans replace each other" is `intraGroupPreference` in `advanced.json`, which the stock config has shipped since 1.1.0 with `oceans` set to "preferred" (legality + preserve mid-sized lakes + small-puddle fallback). Listing `oceans` in both places was redundant. Existing configs that already set `allowIntraGroupReplacement` continue to work unchanged; freshly-generated configs simply won't have the legacy line. The TOML comment now points at the advanced-config setting.
release
Biome Cleaner 1.1.3 for Fabric 1.21.11
1.1.36 мая 2026 г.17Minecraft: 1.21.11fabric
Что нового
### Fixed
- **Spawn-area chunks could be skipped on servers using parallel world-gen mods (e.g. C2ME).** The Overworld-only check from 1.1.2 armed itself when the server finished starting, but mods that generate chunks in parallel could begin spawn-area generation a moment earlier. Any Overworld chunks created in that brief window slipped past the cleaner and stayed unprocessed forever — usually invisible, but it left tiny micro-biomes intact near spawn on freshly-generated worlds. The check now lets chunks through during that startup window (only the Overworld is force-generated at startup, so this can't accidentally touch the Nether or End) and tightens to Overworld-only as soon as the server finishes starting.
- **Surface block correction in cave entrances now correctly only runs in the Overworld.** The cave-carver fix from 1.1.0 (which makes carved surfaces use the cleaned-up biome instead of the raw one) was running in every dimension, not just the Overworld. In the Nether and End that meant carvers were reading the chunk palette where they expected to read the raw biome source, with no defined behaviour. It's gated on the Overworld now, matching the rest of the cleanup pipeline.
### Changed
- **Overworld detection is now exact instead of heuristic.** 1.1.2 identified Overworld-like dimensions by scanning their biome list for `minecraft:plains` or `minecraft:forest`. That worked for vanilla but could misclassify modded "skyland"-style dimensions that happened to include either biome. The mod now records the actual Overworld biome source the moment the server is ready and matches against it directly. Modded dimensions are no longer accidentally picked up — if you have a modded dimension you genuinely want cleaned, that needs to become an explicit opt-in (planned for a future release).
- **Default `allowIntraGroupReplacement` in `common.toml` is now empty.** The setting still works for back-compat, but the modern, richer way to say "let oceans replace each other" is `intraGroupPreference` in `advanced.json`, which the stock config has shipped since 1.1.0 with `oceans` set to "preferred" (legality + preserve mid-sized lakes + small-puddle fallback). Listing `oceans` in both places was redundant. Existing configs that already set `allowIntraGroupReplacement` continue to work unchanged; freshly-generated configs simply won't have the legacy line. The TOML comment now points at the advanced-config setting.
release
Biome Cleaner 1.1.3 for Fabric 26.1
1.1.36 мая 2026 г.18Minecraft: 26.1fabric
Что нового
### Fixed
- **Spawn-area chunks could be skipped on servers using parallel world-gen mods (e.g. C2ME).** The Overworld-only check from 1.1.2 armed itself when the server finished starting, but mods that generate chunks in parallel could begin spawn-area generation a moment earlier. Any Overworld chunks created in that brief window slipped past the cleaner and stayed unprocessed forever — usually invisible, but it left tiny micro-biomes intact near spawn on freshly-generated worlds. The check now lets chunks through during that startup window (only the Overworld is force-generated at startup, so this can't accidentally touch the Nether or End) and tightens to Overworld-only as soon as the server finishes starting.
- **Surface block correction in cave entrances now correctly only runs in the Overworld.** The cave-carver fix from 1.1.0 (which makes carved surfaces use the cleaned-up biome instead of the raw one) was running in every dimension, not just the Overworld. In the Nether and End that meant carvers were reading the chunk palette where they expected to read the raw biome source, with no defined behaviour. It's gated on the Overworld now, matching the rest of the cleanup pipeline.
### Changed
- **Overworld detection is now exact instead of heuristic.** 1.1.2 identified Overworld-like dimensions by scanning their biome list for `minecraft:plains` or `minecraft:forest`. That worked for vanilla but could misclassify modded "skyland"-style dimensions that happened to include either biome. The mod now records the actual Overworld biome source the moment the server is ready and matches against it directly. Modded dimensions are no longer accidentally picked up — if you have a modded dimension you genuinely want cleaned, that needs to become an explicit opt-in (planned for a future release).
- **Default `allowIntraGroupReplacement` in `common.toml` is now empty.** The setting still works for back-compat, but the modern, richer way to say "let oceans replace each other" is `intraGroupPreference` in `advanced.json`, which the stock config has shipped since 1.1.0 with `oceans` set to "preferred" (legality + preserve mid-sized lakes + small-puddle fallback). Listing `oceans` in both places was redundant. Existing configs that already set `allowIntraGroupReplacement` continue to work unchanged; freshly-generated configs simply won't have the legacy line. The TOML comment now points at the advanced-config setting.
release
Biome Cleaner 1.1.3 for Forge 1.21.1
1.1.36 мая 2026 г.7Minecraft: 1.21.1forge
Что нового
### Fixed
- **Spawn-area chunks could be skipped on servers using parallel world-gen mods (e.g. C2ME).** The Overworld-only check from 1.1.2 armed itself when the server finished starting, but mods that generate chunks in parallel could begin spawn-area generation a moment earlier. Any Overworld chunks created in that brief window slipped past the cleaner and stayed unprocessed forever — usually invisible, but it left tiny micro-biomes intact near spawn on freshly-generated worlds. The check now lets chunks through during that startup window (only the Overworld is force-generated at startup, so this can't accidentally touch the Nether or End) and tightens to Overworld-only as soon as the server finishes starting.
- **Surface block correction in cave entrances now correctly only runs in the Overworld.** The cave-carver fix from 1.1.0 (which makes carved surfaces use the cleaned-up biome instead of the raw one) was running in every dimension, not just the Overworld. In the Nether and End that meant carvers were reading the chunk palette where they expected to read the raw biome source, with no defined behaviour. It's gated on the Overworld now, matching the rest of the cleanup pipeline.
### Changed
- **Overworld detection is now exact instead of heuristic.** 1.1.2 identified Overworld-like dimensions by scanning their biome list for `minecraft:plains` or `minecraft:forest`. That worked for vanilla but could misclassify modded "skyland"-style dimensions that happened to include either biome. The mod now records the actual Overworld biome source the moment the server is ready and matches against it directly. Modded dimensions are no longer accidentally picked up — if you have a modded dimension you genuinely want cleaned, that needs to become an explicit opt-in (planned for a future release).
- **Default `allowIntraGroupReplacement` in `common.toml` is now empty.** The setting still works for back-compat, but the modern, richer way to say "let oceans replace each other" is `intraGroupPreference` in `advanced.json`, which the stock config has shipped since 1.1.0 with `oceans` set to "preferred" (legality + preserve mid-sized lakes + small-puddle fallback). Listing `oceans` in both places was redundant. Existing configs that already set `allowIntraGroupReplacement` continue to work unchanged; freshly-generated configs simply won't have the legacy line. The TOML comment now points at the advanced-config setting.
release
Biome Cleaner 1.1.3 for NeoForge 1.21.1
1.1.36 мая 2026 г.68Minecraft: 1.21.1neoforge
Что нового
### Fixed
- **Spawn-area chunks could be skipped on servers using parallel world-gen mods (e.g. C2ME).** The Overworld-only check from 1.1.2 armed itself when the server finished starting, but mods that generate chunks in parallel could begin spawn-area generation a moment earlier. Any Overworld chunks created in that brief window slipped past the cleaner and stayed unprocessed forever — usually invisible, but it left tiny micro-biomes intact near spawn on freshly-generated worlds. The check now lets chunks through during that startup window (only the Overworld is force-generated at startup, so this can't accidentally touch the Nether or End) and tightens to Overworld-only as soon as the server finishes starting.
- **Surface block correction in cave entrances now correctly only runs in the Overworld.** The cave-carver fix from 1.1.0 (which makes carved surfaces use the cleaned-up biome instead of the raw one) was running in every dimension, not just the Overworld. In the Nether and End that meant carvers were reading the chunk palette where they expected to read the raw biome source, with no defined behaviour. It's gated on the Overworld now, matching the rest of the cleanup pipeline.
### Changed
- **Overworld detection is now exact instead of heuristic.** 1.1.2 identified Overworld-like dimensions by scanning their biome list for `minecraft:plains` or `minecraft:forest`. That worked for vanilla but could misclassify modded "skyland"-style dimensions that happened to include either biome. The mod now records the actual Overworld biome source the moment the server is ready and matches against it directly. Modded dimensions are no longer accidentally picked up — if you have a modded dimension you genuinely want cleaned, that needs to become an explicit opt-in (planned for a future release).
- **Default `allowIntraGroupReplacement` in `common.toml` is now empty.** The setting still works for back-compat, but the modern, richer way to say "let oceans replace each other" is `intraGroupPreference` in `advanced.json`, which the stock config has shipped since 1.1.0 with `oceans` set to "preferred" (legality + preserve mid-sized lakes + small-puddle fallback). Listing `oceans` in both places was redundant. Existing configs that already set `allowIntraGroupReplacement` continue to work unchanged; freshly-generated configs simply won't have the legacy line. The TOML comment now points at the advanced-config setting.
release
Biome Cleaner 1.1.3 for NeoForge 1.21.11
1.1.36 мая 2026 г.16Minecraft: 1.21.11neoforge
Что нового
### Fixed
- **Spawn-area chunks could be skipped on servers using parallel world-gen mods (e.g. C2ME).** The Overworld-only check from 1.1.2 armed itself when the server finished starting, but mods that generate chunks in parallel could begin spawn-area generation a moment earlier. Any Overworld chunks created in that brief window slipped past the cleaner and stayed unprocessed forever — usually invisible, but it left tiny micro-biomes intact near spawn on freshly-generated worlds. The check now lets chunks through during that startup window (only the Overworld is force-generated at startup, so this can't accidentally touch the Nether or End) and tightens to Overworld-only as soon as the server finishes starting.
- **Surface block correction in cave entrances now correctly only runs in the Overworld.** The cave-carver fix from 1.1.0 (which makes carved surfaces use the cleaned-up biome instead of the raw one) was running in every dimension, not just the Overworld. In the Nether and End that meant carvers were reading the chunk palette where they expected to read the raw biome source, with no defined behaviour. It's gated on the Overworld now, matching the rest of the cleanup pipeline.
### Changed
- **Overworld detection is now exact instead of heuristic.** 1.1.2 identified Overworld-like dimensions by scanning their biome list for `minecraft:plains` or `minecraft:forest`. That worked for vanilla but could misclassify modded "skyland"-style dimensions that happened to include either biome. The mod now records the actual Overworld biome source the moment the server is ready and matches against it directly. Modded dimensions are no longer accidentally picked up — if you have a modded dimension you genuinely want cleaned, that needs to become an explicit opt-in (planned for a future release).
- **Default `allowIntraGroupReplacement` in `common.toml` is now empty.** The setting still works for back-compat, but the modern, richer way to say "let oceans replace each other" is `intraGroupPreference` in `advanced.json`, which the stock config has shipped since 1.1.0 with `oceans` set to "preferred" (legality + preserve mid-sized lakes + small-puddle fallback). Listing `oceans` in both places was redundant. Existing configs that already set `allowIntraGroupReplacement` continue to work unchanged; freshly-generated configs simply won't have the legacy line. The TOML comment now points at the advanced-config setting.
release
Biome Cleaner 1.1.3 for NeoForge 26.1
1.1.36 мая 2026 г.8Minecraft: 26.1neoforge
Что нового
### Fixed
- **Spawn-area chunks could be skipped on servers using parallel world-gen mods (e.g. C2ME).** The Overworld-only check from 1.1.2 armed itself when the server finished starting, but mods that generate chunks in parallel could begin spawn-area generation a moment earlier. Any Overworld chunks created in that brief window slipped past the cleaner and stayed unprocessed forever — usually invisible, but it left tiny micro-biomes intact near spawn on freshly-generated worlds. The check now lets chunks through during that startup window (only the Overworld is force-generated at startup, so this can't accidentally touch the Nether or End) and tightens to Overworld-only as soon as the server finishes starting.
- **Surface block correction in cave entrances now correctly only runs in the Overworld.** The cave-carver fix from 1.1.0 (which makes carved surfaces use the cleaned-up biome instead of the raw one) was running in every dimension, not just the Overworld. In the Nether and End that meant carvers were reading the chunk palette where they expected to read the raw biome source, with no defined behaviour. It's gated on the Overworld now, matching the rest of the cleanup pipeline.
### Changed
- **Overworld detection is now exact instead of heuristic.** 1.1.2 identified Overworld-like dimensions by scanning their biome list for `minecraft:plains` or `minecraft:forest`. That worked for vanilla but could misclassify modded "skyland"-style dimensions that happened to include either biome. The mod now records the actual Overworld biome source the moment the server is ready and matches against it directly. Modded dimensions are no longer accidentally picked up — if you have a modded dimension you genuinely want cleaned, that needs to become an explicit opt-in (planned for a future release).
- **Default `allowIntraGroupReplacement` in `common.toml` is now empty.** The setting still works for back-compat, but the modern, richer way to say "let oceans replace each other" is `intraGroupPreference` in `advanced.json`, which the stock config has shipped since 1.1.0 with `oceans` set to "preferred" (legality + preserve mid-sized lakes + small-puddle fallback). Listing `oceans` in both places was redundant. Existing configs that already set `allowIntraGroupReplacement` continue to work unchanged; freshly-generated configs simply won't have the legacy line. The TOML comment now points at the advanced-config setting.
release
Biome Cleaner 1.1.2 for Fabric 1.21.1
1.1.26 мая 2026 г.14Minecraft: 1.21.1fabric
Что нового
### Changed
- **Cleanup is now Overworld-only.** Previous releases ran the cleanup algorithm on every dimension whose generator was `NoiseBasedChunkGenerator` — Overworld, Nether, End, and most modded dimensions — even though the algorithm is designed for Overworld surface biomes and the warming/preprocessing path was already Overworld-only. The mismatch wasted CPU on Nether and End chunks and could subtly modify their biome layout where the global `sizeThreshold` happened to apply. Cleanup now short-circuits in the chunk-generation mixin for any `BiomeSource` whose `possibleBiomes()` doesn't contain `minecraft:plains` or `minecraft:forest` — both present in any vanilla or modded Overworld, neither in the vanilla Nether or End. Modded dimensions that include either biome are still treated as Overworld-like.
release
Biome Cleaner 1.1.2 for Fabric 1.21.11
1.1.26 мая 2026 г.9Minecraft: 1.21.11fabric
Что нового
### Changed
- **Cleanup is now Overworld-only.** Previous releases ran the cleanup algorithm on every dimension whose generator was `NoiseBasedChunkGenerator` — Overworld, Nether, End, and most modded dimensions — even though the algorithm is designed for Overworld surface biomes and the warming/preprocessing path was already Overworld-only. The mismatch wasted CPU on Nether and End chunks and could subtly modify their biome layout where the global `sizeThreshold` happened to apply. Cleanup now short-circuits in the chunk-generation mixin for any `BiomeSource` whose `possibleBiomes()` doesn't contain `minecraft:plains` or `minecraft:forest` — both present in any vanilla or modded Overworld, neither in the vanilla Nether or End. Modded dimensions that include either biome are still treated as Overworld-like.
release
Biome Cleaner 1.1.2 for Fabric 26.1
1.1.26 мая 2026 г.17Minecraft: 26.1fabric
Что нового
### Changed
- **Cleanup is now Overworld-only.** Previous releases ran the cleanup algorithm on every dimension whose generator was `NoiseBasedChunkGenerator` — Overworld, Nether, End, and most modded dimensions — even though the algorithm is designed for Overworld surface biomes and the warming/preprocessing path was already Overworld-only. The mismatch wasted CPU on Nether and End chunks and could subtly modify their biome layout where the global `sizeThreshold` happened to apply. Cleanup now short-circuits in the chunk-generation mixin for any `BiomeSource` whose `possibleBiomes()` doesn't contain `minecraft:plains` or `minecraft:forest` — both present in any vanilla or modded Overworld, neither in the vanilla Nether or End. Modded dimensions that include either biome are still treated as Overworld-like.
release
Biome Cleaner 1.1.2 for Forge 1.21.1
1.1.26 мая 2026 г.10Minecraft: 1.21.1forge
Что нового
### Changed
- **Cleanup is now Overworld-only.** Previous releases ran the cleanup algorithm on every dimension whose generator was `NoiseBasedChunkGenerator` — Overworld, Nether, End, and most modded dimensions — even though the algorithm is designed for Overworld surface biomes and the warming/preprocessing path was already Overworld-only. The mismatch wasted CPU on Nether and End chunks and could subtly modify their biome layout where the global `sizeThreshold` happened to apply. Cleanup now short-circuits in the chunk-generation mixin for any `BiomeSource` whose `possibleBiomes()` doesn't contain `minecraft:plains` or `minecraft:forest` — both present in any vanilla or modded Overworld, neither in the vanilla Nether or End. Modded dimensions that include either biome are still treated as Overworld-like.
release
Biome Cleaner 1.1.2 for NeoForge 1.21.1
1.1.26 мая 2026 г.55Minecraft: 1.21.1neoforge
Что нового
### Changed
- **Cleanup is now Overworld-only.** Previous releases ran the cleanup algorithm on every dimension whose generator was `NoiseBasedChunkGenerator` — Overworld, Nether, End, and most modded dimensions — even though the algorithm is designed for Overworld surface biomes and the warming/preprocessing path was already Overworld-only. The mismatch wasted CPU on Nether and End chunks and could subtly modify their biome layout where the global `sizeThreshold` happened to apply. Cleanup now short-circuits in the chunk-generation mixin for any `BiomeSource` whose `possibleBiomes()` doesn't contain `minecraft:plains` or `minecraft:forest` — both present in any vanilla or modded Overworld, neither in the vanilla Nether or End. Modded dimensions that include either biome are still treated as Overworld-like.
release
Biome Cleaner 1.1.2 for NeoForge 1.21.11
1.1.26 мая 2026 г.7Minecraft: 1.21.11neoforge
Что нового
### Changed
- **Cleanup is now Overworld-only.** Previous releases ran the cleanup algorithm on every dimension whose generator was `NoiseBasedChunkGenerator` — Overworld, Nether, End, and most modded dimensions — even though the algorithm is designed for Overworld surface biomes and the warming/preprocessing path was already Overworld-only. The mismatch wasted CPU on Nether and End chunks and could subtly modify their biome layout where the global `sizeThreshold` happened to apply. Cleanup now short-circuits in the chunk-generation mixin for any `BiomeSource` whose `possibleBiomes()` doesn't contain `minecraft:plains` or `minecraft:forest` — both present in any vanilla or modded Overworld, neither in the vanilla Nether or End. Modded dimensions that include either biome are still treated as Overworld-like.
release
Biome Cleaner 1.1.2 for NeoForge 26.1
1.1.26 мая 2026 г.8Minecraft: 26.1neoforge
Что нового
### Changed
- **Cleanup is now Overworld-only.** Previous releases ran the cleanup algorithm on every dimension whose generator was `NoiseBasedChunkGenerator` — Overworld, Nether, End, and most modded dimensions — even though the algorithm is designed for Overworld surface biomes and the warming/preprocessing path was already Overworld-only. The mismatch wasted CPU on Nether and End chunks and could subtly modify their biome layout where the global `sizeThreshold` happened to apply. Cleanup now short-circuits in the chunk-generation mixin for any `BiomeSource` whose `possibleBiomes()` doesn't contain `minecraft:plains` or `minecraft:forest` — both present in any vanilla or modded Overworld, neither in the vanilla Nether or End. Modded dimensions that include either biome are still treated as Overworld-like.
release
Biome Cleaner 1.1.1 for Fabric 1.21.1
1.1.16 мая 2026 г.10Minecraft: 1.21.1fabric
Что нового
### Fixed
- **Server log spam in non-overworld dimensions** (cleaner-mod): On servers running the Nether, the End, or modded dimensions, every chunk generated in a dimension whose biome list didn't include the biomes referenced by the new 1.1.0 config blocks (`intraGroupPreference`, `requiredBoundaryGroups`, group-keyed `sizeThresholdOverrides`) emitted a `Failed to clean chunk at (X, Z)` warning. The resolver was treating "this group has no members in this dimension" — the normal case for `oceans` in the Nether, for example — as a fatal config error instead of a no-op, and the failure repeated every chunk because the per-dimension generator context never got cached. Empty group expansion is now silently skipped for that entry, matching how `allowIntraGroupReplacement` already handled the same case.
release
Biome Cleaner 1.1.1 for Fabric 1.21.11
1.1.16 мая 2026 г.13Minecraft: 1.21.11fabric
Что нового
### Fixed
- **Server log spam in non-overworld dimensions** (cleaner-mod): On servers running the Nether, the End, or modded dimensions, every chunk generated in a dimension whose biome list didn't include the biomes referenced by the new 1.1.0 config blocks (`intraGroupPreference`, `requiredBoundaryGroups`, group-keyed `sizeThresholdOverrides`) emitted a `Failed to clean chunk at (X, Z)` warning. The resolver was treating "this group has no members in this dimension" — the normal case for `oceans` in the Nether, for example — as a fatal config error instead of a no-op, and the failure repeated every chunk because the per-dimension generator context never got cached. Empty group expansion is now silently skipped for that entry, matching how `allowIntraGroupReplacement` already handled the same case.
release
Biome Cleaner 1.1.1 for Fabric 26.1
1.1.16 мая 2026 г.8Minecraft: 26.1fabric
Что нового
### Fixed
- **Server log spam in non-overworld dimensions** (cleaner-mod): On servers running the Nether, the End, or modded dimensions, every chunk generated in a dimension whose biome list didn't include the biomes referenced by the new 1.1.0 config blocks (`intraGroupPreference`, `requiredBoundaryGroups`, group-keyed `sizeThresholdOverrides`) emitted a `Failed to clean chunk at (X, Z)` warning. The resolver was treating "this group has no members in this dimension" — the normal case for `oceans` in the Nether, for example — as a fatal config error instead of a no-op, and the failure repeated every chunk because the per-dimension generator context never got cached. Empty group expansion is now silently skipped for that entry, matching how `allowIntraGroupReplacement` already handled the same case.
release
Biome Cleaner 1.1.1 for Forge 1.21.1
1.1.16 мая 2026 г.10Minecraft: 1.21.1forge
Что нового
### Fixed
- **Server log spam in non-overworld dimensions** (cleaner-mod): On servers running the Nether, the End, or modded dimensions, every chunk generated in a dimension whose biome list didn't include the biomes referenced by the new 1.1.0 config blocks (`intraGroupPreference`, `requiredBoundaryGroups`, group-keyed `sizeThresholdOverrides`) emitted a `Failed to clean chunk at (X, Z)` warning. The resolver was treating "this group has no members in this dimension" — the normal case for `oceans` in the Nether, for example — as a fatal config error instead of a no-op, and the failure repeated every chunk because the per-dimension generator context never got cached. Empty group expansion is now silently skipped for that entry, matching how `allowIntraGroupReplacement` already handled the same case.
release
Biome Cleaner 1.1.1 for NeoForge 1.21.1
1.1.16 мая 2026 г.16Minecraft: 1.21.1neoforge
Что нового
### Fixed
- **Server log spam in non-overworld dimensions** (cleaner-mod): On servers running the Nether, the End, or modded dimensions, every chunk generated in a dimension whose biome list didn't include the biomes referenced by the new 1.1.0 config blocks (`intraGroupPreference`, `requiredBoundaryGroups`, group-keyed `sizeThresholdOverrides`) emitted a `Failed to clean chunk at (X, Z)` warning. The resolver was treating "this group has no members in this dimension" — the normal case for `oceans` in the Nether, for example — as a fatal config error instead of a no-op, and the failure repeated every chunk because the per-dimension generator context never got cached. Empty group expansion is now silently skipped for that entry, matching how `allowIntraGroupReplacement` already handled the same case.
release
Biome Cleaner 1.1.1 for NeoForge 1.21.11
1.1.16 мая 2026 г.9Minecraft: 1.21.11neoforge
Что нового
### Fixed
- **Server log spam in non-overworld dimensions** (cleaner-mod): On servers running the Nether, the End, or modded dimensions, every chunk generated in a dimension whose biome list didn't include the biomes referenced by the new 1.1.0 config blocks (`intraGroupPreference`, `requiredBoundaryGroups`, group-keyed `sizeThresholdOverrides`) emitted a `Failed to clean chunk at (X, Z)` warning. The resolver was treating "this group has no members in this dimension" — the normal case for `oceans` in the Nether, for example — as a fatal config error instead of a no-op, and the failure repeated every chunk because the per-dimension generator context never got cached. Empty group expansion is now silently skipped for that entry, matching how `allowIntraGroupReplacement` already handled the same case.
release
Biome Cleaner 1.1.1 for NeoForge 26.1
1.1.16 мая 2026 г.7Minecraft: 26.1neoforge
Что нового
### Fixed
- **Server log spam in non-overworld dimensions** (cleaner-mod): On servers running the Nether, the End, or modded dimensions, every chunk generated in a dimension whose biome list didn't include the biomes referenced by the new 1.1.0 config blocks (`intraGroupPreference`, `requiredBoundaryGroups`, group-keyed `sizeThresholdOverrides`) emitted a `Failed to clean chunk at (X, Z)` warning. The resolver was treating "this group has no members in this dimension" — the normal case for `oceans` in the Nether, for example — as a fatal config error instead of a no-op, and the failure repeated every chunk because the per-dimension generator context never got cached. Empty group expansion is now silently skipped for that entry, matching how `allowIntraGroupReplacement` already handled the same case.
release
Biome Cleaner 1.1.0 for Fabric 1.21.1
1.1.01 мая 2026 г.23Minecraft: 1.21.1fabric
Что нового
This release ships three new ways to shape cleanup, plus a complete rewrite of the cleaner algorithm that fixes several long-standing edge cases.
### Added
- **Size ranges in `sizeThresholdOverrides` — shrink instead of replace.** Per-biome entries can now take a `[min, max]` pair instead of a single number. Regions smaller than `min` are still replaced entirely (as before); regions inside the range are kept; **regions larger than `max` are now trimmed down to a `max`-sized patch instead of being wiped from the world.** The single-number form (minimum only, no upper bound) still works exactly as before. The stock config now ships `"minecraft:stony_shore": [32, 64]`, so very small stony shore patches are still cleaned up entirely while oversized stony shore expanses get shrunk down rather than erased.
- **`intraGroupPreference` — preserve lakes, clean up puddles.** A new config block lets you mark a biome group as "preferred", meaning its members merge into each other before being flipped to anything outside the group, and mid-sized regions with no in-group neighbour are preserved rather than replaced. The new `fallbackOutOfGroupBelowSize` knob controls the cutoff: regions below it fall through to a normal out-of-group replacement, regions at or above are preserved. Default: oceans are preferred with a fallback size of 8. The practical effect:
- A tiny ocean **puddle** in the middle of land (under 8 quarts) still gets cleaned up to the surrounding land like before.
- A larger inland **lake** (8 quarts or more) is now preserved instead of being flipped to whatever land surrounds it.
- A coastal sliver of one ocean variant sitting next to a different ocean variant (say, a small `ocean` patch next to `frozen_ocean`) merges into that neighbour rather than turning into beach. So a region that's half ocean and half frozen ocean cleans up into a single ocean variant.
- **`requiredBoundaryGroups` — clean up biomes in places they shouldn't be.** A new config block lets you require a biome's boundary to touch at least one of the listed groups; if none are present, the region is cleaned up **regardless of size.** Default: beaches must touch oceans or rivers, so **any inland beach with no water nearby is cleaned up no matter how big it is.** Without this rule, an unusually large beach patch surrounded by forest would be kept simply because it cleared the size threshold.
### Changed
- **The cleaner algorithm has been rewritten from the ground up.** The new pipeline replaces the old separate "small-region" / "exploration" / "replacement" code paths with a single unified planner that handles minimum-size, range, and forced-replacement cases together. This is what made the new features above tractable — the old algorithm couldn't have expressed range-mode trimming or boundary rules cleanly. Output for existing configs (minimum-size only, no ranges) is broadly similar but not byte-identical to 1.0.x; the new planner's edge-case behaviour is more consistent (see Fixed below).
- **Bad config files now fail loudly instead of silently.** Malformed JSON, non-positive threshold values, unknown biome ids, range bounds where `min > max`, two override entries that resolve to the same biome with no biome-id-level disambiguator, and similar mistakes now refuse to load with a clear error message naming the file and the problem. Previously, the mod would fall back to an empty config and silently disable cleanup, which was easy to miss.
- **Override resolution follows a "narrowest scope wins" rule.** When the same biome is named both directly (`"minecraft:stony_shore": [32, 64]`) and indirectly via a group it belongs to (`"beaches": 32`), the more specific biome-id entry wins. Two *group* entries that overlap on the same biome with no biome-id tiebreaker is still an error, but the layered shape (group default + per-biome exception) now works as you'd expect.
### Fixed
The algorithm rewrite resolves a number of edge cases that the old code couldn't represent cleanly. Most users won't notice these individually; collectively they make output more predictable:
- Oversized regions (above the size threshold) are now handled by a dedicated planner that trims them down rather than skipping or partially clearing them, so leftover "stranded island" remnants are much less common.
- Coastal patches sitting between two non-replaceable biomes (e.g. `stony_shore` between water and a protected biome) no longer get accidentally erased instead of being trimmed or merged into a neighbour.
- Single-quart leftovers from a partial cleanup are now dissolved into a viable neighbour rather than aborting with a policy error.
- Intra-group replacement now works correctly when a region's boundary mixes in-group and out-of-group neighbours.
- Several rare non-determinism sources in the warming and caching layers are gone; cleanup output is now reproducible across re-runs of the same world even under heavier multiplayer load.
release
Biome Cleaner 1.1.0 for Fabric 1.21.11
1.1.01 мая 2026 г.29Minecraft: 1.21.11fabric
Что нового
This release ships three new ways to shape cleanup, plus a complete rewrite of the cleaner algorithm that fixes several long-standing edge cases.
### Added
- **Size ranges in `sizeThresholdOverrides` — shrink instead of replace.** Per-biome entries can now take a `[min, max]` pair instead of a single number. Regions smaller than `min` are still replaced entirely (as before); regions inside the range are kept; **regions larger than `max` are now trimmed down to a `max`-sized patch instead of being wiped from the world.** The single-number form (minimum only, no upper bound) still works exactly as before. The stock config now ships `"minecraft:stony_shore": [32, 64]`, so very small stony shore patches are still cleaned up entirely while oversized stony shore expanses get shrunk down rather than erased.
- **`intraGroupPreference` — preserve lakes, clean up puddles.** A new config block lets you mark a biome group as "preferred", meaning its members merge into each other before being flipped to anything outside the group, and mid-sized regions with no in-group neighbour are preserved rather than replaced. The new `fallbackOutOfGroupBelowSize` knob controls the cutoff: regions below it fall through to a normal out-of-group replacement, regions at or above are preserved. Default: oceans are preferred with a fallback size of 8. The practical effect:
- A tiny ocean **puddle** in the middle of land (under 8 quarts) still gets cleaned up to the surrounding land like before.
- A larger inland **lake** (8 quarts or more) is now preserved instead of being flipped to whatever land surrounds it.
- A coastal sliver of one ocean variant sitting next to a different ocean variant (say, a small `ocean` patch next to `frozen_ocean`) merges into that neighbour rather than turning into beach. So a region that's half ocean and half frozen ocean cleans up into a single ocean variant.
- **`requiredBoundaryGroups` — clean up biomes in places they shouldn't be.** A new config block lets you require a biome's boundary to touch at least one of the listed groups; if none are present, the region is cleaned up **regardless of size.** Default: beaches must touch oceans or rivers, so **any inland beach with no water nearby is cleaned up no matter how big it is.** Without this rule, an unusually large beach patch surrounded by forest would be kept simply because it cleared the size threshold.
### Changed
- **The cleaner algorithm has been rewritten from the ground up.** The new pipeline replaces the old separate "small-region" / "exploration" / "replacement" code paths with a single unified planner that handles minimum-size, range, and forced-replacement cases together. This is what made the new features above tractable — the old algorithm couldn't have expressed range-mode trimming or boundary rules cleanly. Output for existing configs (minimum-size only, no ranges) is broadly similar but not byte-identical to 1.0.x; the new planner's edge-case behaviour is more consistent (see Fixed below).
- **Bad config files now fail loudly instead of silently.** Malformed JSON, non-positive threshold values, unknown biome ids, range bounds where `min > max`, two override entries that resolve to the same biome with no biome-id-level disambiguator, and similar mistakes now refuse to load with a clear error message naming the file and the problem. Previously, the mod would fall back to an empty config and silently disable cleanup, which was easy to miss.
- **Override resolution follows a "narrowest scope wins" rule.** When the same biome is named both directly (`"minecraft:stony_shore": [32, 64]`) and indirectly via a group it belongs to (`"beaches": 32`), the more specific biome-id entry wins. Two *group* entries that overlap on the same biome with no biome-id tiebreaker is still an error, but the layered shape (group default + per-biome exception) now works as you'd expect.
### Fixed
The algorithm rewrite resolves a number of edge cases that the old code couldn't represent cleanly. Most users won't notice these individually; collectively they make output more predictable:
- Oversized regions (above the size threshold) are now handled by a dedicated planner that trims them down rather than skipping or partially clearing them, so leftover "stranded island" remnants are much less common.
- Coastal patches sitting between two non-replaceable biomes (e.g. `stony_shore` between water and a protected biome) no longer get accidentally erased instead of being trimmed or merged into a neighbour.
- Single-quart leftovers from a partial cleanup are now dissolved into a viable neighbour rather than aborting with a policy error.
- Intra-group replacement now works correctly when a region's boundary mixes in-group and out-of-group neighbours.
- Several rare non-determinism sources in the warming and caching layers are gone; cleanup output is now reproducible across re-runs of the same world even under heavier multiplayer load.
release
Biome Cleaner 1.1.0 for Fabric 26.1
1.1.01 мая 2026 г.19Minecraft: 26.1fabric
Что нового
This release ships three new ways to shape cleanup, plus a complete rewrite of the cleaner algorithm that fixes several long-standing edge cases.
### Added
- **Size ranges in `sizeThresholdOverrides` — shrink instead of replace.** Per-biome entries can now take a `[min, max]` pair instead of a single number. Regions smaller than `min` are still replaced entirely (as before); regions inside the range are kept; **regions larger than `max` are now trimmed down to a `max`-sized patch instead of being wiped from the world.** The single-number form (minimum only, no upper bound) still works exactly as before. The stock config now ships `"minecraft:stony_shore": [32, 64]`, so very small stony shore patches are still cleaned up entirely while oversized stony shore expanses get shrunk down rather than erased.
- **`intraGroupPreference` — preserve lakes, clean up puddles.** A new config block lets you mark a biome group as "preferred", meaning its members merge into each other before being flipped to anything outside the group, and mid-sized regions with no in-group neighbour are preserved rather than replaced. The new `fallbackOutOfGroupBelowSize` knob controls the cutoff: regions below it fall through to a normal out-of-group replacement, regions at or above are preserved. Default: oceans are preferred with a fallback size of 8. The practical effect:
- A tiny ocean **puddle** in the middle of land (under 8 quarts) still gets cleaned up to the surrounding land like before.
- A larger inland **lake** (8 quarts or more) is now preserved instead of being flipped to whatever land surrounds it.
- A coastal sliver of one ocean variant sitting next to a different ocean variant (say, a small `ocean` patch next to `frozen_ocean`) merges into that neighbour rather than turning into beach. So a region that's half ocean and half frozen ocean cleans up into a single ocean variant.
- **`requiredBoundaryGroups` — clean up biomes in places they shouldn't be.** A new config block lets you require a biome's boundary to touch at least one of the listed groups; if none are present, the region is cleaned up **regardless of size.** Default: beaches must touch oceans or rivers, so **any inland beach with no water nearby is cleaned up no matter how big it is.** Without this rule, an unusually large beach patch surrounded by forest would be kept simply because it cleared the size threshold.
### Changed
- **The cleaner algorithm has been rewritten from the ground up.** The new pipeline replaces the old separate "small-region" / "exploration" / "replacement" code paths with a single unified planner that handles minimum-size, range, and forced-replacement cases together. This is what made the new features above tractable — the old algorithm couldn't have expressed range-mode trimming or boundary rules cleanly. Output for existing configs (minimum-size only, no ranges) is broadly similar but not byte-identical to 1.0.x; the new planner's edge-case behaviour is more consistent (see Fixed below).
- **Bad config files now fail loudly instead of silently.** Malformed JSON, non-positive threshold values, unknown biome ids, range bounds where `min > max`, two override entries that resolve to the same biome with no biome-id-level disambiguator, and similar mistakes now refuse to load with a clear error message naming the file and the problem. Previously, the mod would fall back to an empty config and silently disable cleanup, which was easy to miss.
- **Override resolution follows a "narrowest scope wins" rule.** When the same biome is named both directly (`"minecraft:stony_shore": [32, 64]`) and indirectly via a group it belongs to (`"beaches": 32`), the more specific biome-id entry wins. Two *group* entries that overlap on the same biome with no biome-id tiebreaker is still an error, but the layered shape (group default + per-biome exception) now works as you'd expect.
### Fixed
The algorithm rewrite resolves a number of edge cases that the old code couldn't represent cleanly. Most users won't notice these individually; collectively they make output more predictable:
- Oversized regions (above the size threshold) are now handled by a dedicated planner that trims them down rather than skipping or partially clearing them, so leftover "stranded island" remnants are much less common.
- Coastal patches sitting between two non-replaceable biomes (e.g. `stony_shore` between water and a protected biome) no longer get accidentally erased instead of being trimmed or merged into a neighbour.
- Single-quart leftovers from a partial cleanup are now dissolved into a viable neighbour rather than aborting with a policy error.
- Intra-group replacement now works correctly when a region's boundary mixes in-group and out-of-group neighbours.
- Several rare non-determinism sources in the warming and caching layers are gone; cleanup output is now reproducible across re-runs of the same world even under heavier multiplayer load.
release
Biome Cleaner 1.1.0 for Forge 1.21.1
1.1.01 мая 2026 г.9Minecraft: 1.21.1forge
Что нового
This release ships three new ways to shape cleanup, plus a complete rewrite of the cleaner algorithm that fixes several long-standing edge cases.
### Added
- **Size ranges in `sizeThresholdOverrides` — shrink instead of replace.** Per-biome entries can now take a `[min, max]` pair instead of a single number. Regions smaller than `min` are still replaced entirely (as before); regions inside the range are kept; **regions larger than `max` are now trimmed down to a `max`-sized patch instead of being wiped from the world.** The single-number form (minimum only, no upper bound) still works exactly as before. The stock config now ships `"minecraft:stony_shore": [32, 64]`, so very small stony shore patches are still cleaned up entirely while oversized stony shore expanses get shrunk down rather than erased.
- **`intraGroupPreference` — preserve lakes, clean up puddles.** A new config block lets you mark a biome group as "preferred", meaning its members merge into each other before being flipped to anything outside the group, and mid-sized regions with no in-group neighbour are preserved rather than replaced. The new `fallbackOutOfGroupBelowSize` knob controls the cutoff: regions below it fall through to a normal out-of-group replacement, regions at or above are preserved. Default: oceans are preferred with a fallback size of 8. The practical effect:
- A tiny ocean **puddle** in the middle of land (under 8 quarts) still gets cleaned up to the surrounding land like before.
- A larger inland **lake** (8 quarts or more) is now preserved instead of being flipped to whatever land surrounds it.
- A coastal sliver of one ocean variant sitting next to a different ocean variant (say, a small `ocean` patch next to `frozen_ocean`) merges into that neighbour rather than turning into beach. So a region that's half ocean and half frozen ocean cleans up into a single ocean variant.
- **`requiredBoundaryGroups` — clean up biomes in places they shouldn't be.** A new config block lets you require a biome's boundary to touch at least one of the listed groups; if none are present, the region is cleaned up **regardless of size.** Default: beaches must touch oceans or rivers, so **any inland beach with no water nearby is cleaned up no matter how big it is.** Without this rule, an unusually large beach patch surrounded by forest would be kept simply because it cleared the size threshold.
### Changed
- **The cleaner algorithm has been rewritten from the ground up.** The new pipeline replaces the old separate "small-region" / "exploration" / "replacement" code paths with a single unified planner that handles minimum-size, range, and forced-replacement cases together. This is what made the new features above tractable — the old algorithm couldn't have expressed range-mode trimming or boundary rules cleanly. Output for existing configs (minimum-size only, no ranges) is broadly similar but not byte-identical to 1.0.x; the new planner's edge-case behaviour is more consistent (see Fixed below).
- **Bad config files now fail loudly instead of silently.** Malformed JSON, non-positive threshold values, unknown biome ids, range bounds where `min > max`, two override entries that resolve to the same biome with no biome-id-level disambiguator, and similar mistakes now refuse to load with a clear error message naming the file and the problem. Previously, the mod would fall back to an empty config and silently disable cleanup, which was easy to miss.
- **Override resolution follows a "narrowest scope wins" rule.** When the same biome is named both directly (`"minecraft:stony_shore": [32, 64]`) and indirectly via a group it belongs to (`"beaches": 32`), the more specific biome-id entry wins. Two *group* entries that overlap on the same biome with no biome-id tiebreaker is still an error, but the layered shape (group default + per-biome exception) now works as you'd expect.
### Fixed
The algorithm rewrite resolves a number of edge cases that the old code couldn't represent cleanly. Most users won't notice these individually; collectively they make output more predictable:
- Oversized regions (above the size threshold) are now handled by a dedicated planner that trims them down rather than skipping or partially clearing them, so leftover "stranded island" remnants are much less common.
- Coastal patches sitting between two non-replaceable biomes (e.g. `stony_shore` between water and a protected biome) no longer get accidentally erased instead of being trimmed or merged into a neighbour.
- Single-quart leftovers from a partial cleanup are now dissolved into a viable neighbour rather than aborting with a policy error.
- Intra-group replacement now works correctly when a region's boundary mixes in-group and out-of-group neighbours.
- Several rare non-determinism sources in the warming and caching layers are gone; cleanup output is now reproducible across re-runs of the same world even under heavier multiplayer load.
release
Biome Cleaner 1.1.0 for NeoForge 1.21.1
1.1.01 мая 2026 г.191Minecraft: 1.21.1neoforge
Что нового
This release ships three new ways to shape cleanup, plus a complete rewrite of the cleaner algorithm that fixes several long-standing edge cases.
### Added
- **Size ranges in `sizeThresholdOverrides` — shrink instead of replace.** Per-biome entries can now take a `[min, max]` pair instead of a single number. Regions smaller than `min` are still replaced entirely (as before); regions inside the range are kept; **regions larger than `max` are now trimmed down to a `max`-sized patch instead of being wiped from the world.** The single-number form (minimum only, no upper bound) still works exactly as before. The stock config now ships `"minecraft:stony_shore": [32, 64]`, so very small stony shore patches are still cleaned up entirely while oversized stony shore expanses get shrunk down rather than erased.
- **`intraGroupPreference` — preserve lakes, clean up puddles.** A new config block lets you mark a biome group as "preferred", meaning its members merge into each other before being flipped to anything outside the group, and mid-sized regions with no in-group neighbour are preserved rather than replaced. The new `fallbackOutOfGroupBelowSize` knob controls the cutoff: regions below it fall through to a normal out-of-group replacement, regions at or above are preserved. Default: oceans are preferred with a fallback size of 8. The practical effect:
- A tiny ocean **puddle** in the middle of land (under 8 quarts) still gets cleaned up to the surrounding land like before.
- A larger inland **lake** (8 quarts or more) is now preserved instead of being flipped to whatever land surrounds it.
- A coastal sliver of one ocean variant sitting next to a different ocean variant (say, a small `ocean` patch next to `frozen_ocean`) merges into that neighbour rather than turning into beach. So a region that's half ocean and half frozen ocean cleans up into a single ocean variant.
- **`requiredBoundaryGroups` — clean up biomes in places they shouldn't be.** A new config block lets you require a biome's boundary to touch at least one of the listed groups; if none are present, the region is cleaned up **regardless of size.** Default: beaches must touch oceans or rivers, so **any inland beach with no water nearby is cleaned up no matter how big it is.** Without this rule, an unusually large beach patch surrounded by forest would be kept simply because it cleared the size threshold.
### Changed
- **The cleaner algorithm has been rewritten from the ground up.** The new pipeline replaces the old separate "small-region" / "exploration" / "replacement" code paths with a single unified planner that handles minimum-size, range, and forced-replacement cases together. This is what made the new features above tractable — the old algorithm couldn't have expressed range-mode trimming or boundary rules cleanly. Output for existing configs (minimum-size only, no ranges) is broadly similar but not byte-identical to 1.0.x; the new planner's edge-case behaviour is more consistent (see Fixed below).
- **Bad config files now fail loudly instead of silently.** Malformed JSON, non-positive threshold values, unknown biome ids, range bounds where `min > max`, two override entries that resolve to the same biome with no biome-id-level disambiguator, and similar mistakes now refuse to load with a clear error message naming the file and the problem. Previously, the mod would fall back to an empty config and silently disable cleanup, which was easy to miss.
- **Override resolution follows a "narrowest scope wins" rule.** When the same biome is named both directly (`"minecraft:stony_shore": [32, 64]`) and indirectly via a group it belongs to (`"beaches": 32`), the more specific biome-id entry wins. Two *group* entries that overlap on the same biome with no biome-id tiebreaker is still an error, but the layered shape (group default + per-biome exception) now works as you'd expect.
### Fixed
The algorithm rewrite resolves a number of edge cases that the old code couldn't represent cleanly. Most users won't notice these individually; collectively they make output more predictable:
- Oversized regions (above the size threshold) are now handled by a dedicated planner that trims them down rather than skipping or partially clearing them, so leftover "stranded island" remnants are much less common.
- Coastal patches sitting between two non-replaceable biomes (e.g. `stony_shore` between water and a protected biome) no longer get accidentally erased instead of being trimmed or merged into a neighbour.
- Single-quart leftovers from a partial cleanup are now dissolved into a viable neighbour rather than aborting with a policy error.
- Intra-group replacement now works correctly when a region's boundary mixes in-group and out-of-group neighbours.
- Several rare non-determinism sources in the warming and caching layers are gone; cleanup output is now reproducible across re-runs of the same world even under heavier multiplayer load.
release
Biome Cleaner 1.1.0 for NeoForge 1.21.11
1.1.01 мая 2026 г.7Minecraft: 1.21.11neoforge
Что нового
This release ships three new ways to shape cleanup, plus a complete rewrite of the cleaner algorithm that fixes several long-standing edge cases.
### Added
- **Size ranges in `sizeThresholdOverrides` — shrink instead of replace.** Per-biome entries can now take a `[min, max]` pair instead of a single number. Regions smaller than `min` are still replaced entirely (as before); regions inside the range are kept; **regions larger than `max` are now trimmed down to a `max`-sized patch instead of being wiped from the world.** The single-number form (minimum only, no upper bound) still works exactly as before. The stock config now ships `"minecraft:stony_shore": [32, 64]`, so very small stony shore patches are still cleaned up entirely while oversized stony shore expanses get shrunk down rather than erased.
- **`intraGroupPreference` — preserve lakes, clean up puddles.** A new config block lets you mark a biome group as "preferred", meaning its members merge into each other before being flipped to anything outside the group, and mid-sized regions with no in-group neighbour are preserved rather than replaced. The new `fallbackOutOfGroupBelowSize` knob controls the cutoff: regions below it fall through to a normal out-of-group replacement, regions at or above are preserved. Default: oceans are preferred with a fallback size of 8. The practical effect:
- A tiny ocean **puddle** in the middle of land (under 8 quarts) still gets cleaned up to the surrounding land like before.
- A larger inland **lake** (8 quarts or more) is now preserved instead of being flipped to whatever land surrounds it.
- A coastal sliver of one ocean variant sitting next to a different ocean variant (say, a small `ocean` patch next to `frozen_ocean`) merges into that neighbour rather than turning into beach. So a region that's half ocean and half frozen ocean cleans up into a single ocean variant.
- **`requiredBoundaryGroups` — clean up biomes in places they shouldn't be.** A new config block lets you require a biome's boundary to touch at least one of the listed groups; if none are present, the region is cleaned up **regardless of size.** Default: beaches must touch oceans or rivers, so **any inland beach with no water nearby is cleaned up no matter how big it is.** Without this rule, an unusually large beach patch surrounded by forest would be kept simply because it cleared the size threshold.
### Changed
- **The cleaner algorithm has been rewritten from the ground up.** The new pipeline replaces the old separate "small-region" / "exploration" / "replacement" code paths with a single unified planner that handles minimum-size, range, and forced-replacement cases together. This is what made the new features above tractable — the old algorithm couldn't have expressed range-mode trimming or boundary rules cleanly. Output for existing configs (minimum-size only, no ranges) is broadly similar but not byte-identical to 1.0.x; the new planner's edge-case behaviour is more consistent (see Fixed below).
- **Bad config files now fail loudly instead of silently.** Malformed JSON, non-positive threshold values, unknown biome ids, range bounds where `min > max`, two override entries that resolve to the same biome with no biome-id-level disambiguator, and similar mistakes now refuse to load with a clear error message naming the file and the problem. Previously, the mod would fall back to an empty config and silently disable cleanup, which was easy to miss.
- **Override resolution follows a "narrowest scope wins" rule.** When the same biome is named both directly (`"minecraft:stony_shore": [32, 64]`) and indirectly via a group it belongs to (`"beaches": 32`), the more specific biome-id entry wins. Two *group* entries that overlap on the same biome with no biome-id tiebreaker is still an error, but the layered shape (group default + per-biome exception) now works as you'd expect.
### Fixed
The algorithm rewrite resolves a number of edge cases that the old code couldn't represent cleanly. Most users won't notice these individually; collectively they make output more predictable:
- Oversized regions (above the size threshold) are now handled by a dedicated planner that trims them down rather than skipping or partially clearing them, so leftover "stranded island" remnants are much less common.
- Coastal patches sitting between two non-replaceable biomes (e.g. `stony_shore` between water and a protected biome) no longer get accidentally erased instead of being trimmed or merged into a neighbour.
- Single-quart leftovers from a partial cleanup are now dissolved into a viable neighbour rather than aborting with a policy error.
- Intra-group replacement now works correctly when a region's boundary mixes in-group and out-of-group neighbours.
- Several rare non-determinism sources in the warming and caching layers are gone; cleanup output is now reproducible across re-runs of the same world even under heavier multiplayer load.
release
Biome Cleaner 1.1.0 for NeoForge 26.1
1.1.01 мая 2026 г.10Minecraft: 26.1neoforge
Что нового
This release ships three new ways to shape cleanup, plus a complete rewrite of the cleaner algorithm that fixes several long-standing edge cases.
### Added
- **Size ranges in `sizeThresholdOverrides` — shrink instead of replace.** Per-biome entries can now take a `[min, max]` pair instead of a single number. Regions smaller than `min` are still replaced entirely (as before); regions inside the range are kept; **regions larger than `max` are now trimmed down to a `max`-sized patch instead of being wiped from the world.** The single-number form (minimum only, no upper bound) still works exactly as before. The stock config now ships `"minecraft:stony_shore": [32, 64]`, so very small stony shore patches are still cleaned up entirely while oversized stony shore expanses get shrunk down rather than erased.
- **`intraGroupPreference` — preserve lakes, clean up puddles.** A new config block lets you mark a biome group as "preferred", meaning its members merge into each other before being flipped to anything outside the group, and mid-sized regions with no in-group neighbour are preserved rather than replaced. The new `fallbackOutOfGroupBelowSize` knob controls the cutoff: regions below it fall through to a normal out-of-group replacement, regions at or above are preserved. Default: oceans are preferred with a fallback size of 8. The practical effect:
- A tiny ocean **puddle** in the middle of land (under 8 quarts) still gets cleaned up to the surrounding land like before.
- A larger inland **lake** (8 quarts or more) is now preserved instead of being flipped to whatever land surrounds it.
- A coastal sliver of one ocean variant sitting next to a different ocean variant (say, a small `ocean` patch next to `frozen_ocean`) merges into that neighbour rather than turning into beach. So a region that's half ocean and half frozen ocean cleans up into a single ocean variant.
- **`requiredBoundaryGroups` — clean up biomes in places they shouldn't be.** A new config block lets you require a biome's boundary to touch at least one of the listed groups; if none are present, the region is cleaned up **regardless of size.** Default: beaches must touch oceans or rivers, so **any inland beach with no water nearby is cleaned up no matter how big it is.** Without this rule, an unusually large beach patch surrounded by forest would be kept simply because it cleared the size threshold.
### Changed
- **The cleaner algorithm has been rewritten from the ground up.** The new pipeline replaces the old separate "small-region" / "exploration" / "replacement" code paths with a single unified planner that handles minimum-size, range, and forced-replacement cases together. This is what made the new features above tractable — the old algorithm couldn't have expressed range-mode trimming or boundary rules cleanly. Output for existing configs (minimum-size only, no ranges) is broadly similar but not byte-identical to 1.0.x; the new planner's edge-case behaviour is more consistent (see Fixed below).
- **Bad config files now fail loudly instead of silently.** Malformed JSON, non-positive threshold values, unknown biome ids, range bounds where `min > max`, two override entries that resolve to the same biome with no biome-id-level disambiguator, and similar mistakes now refuse to load with a clear error message naming the file and the problem. Previously, the mod would fall back to an empty config and silently disable cleanup, which was easy to miss.
- **Override resolution follows a "narrowest scope wins" rule.** When the same biome is named both directly (`"minecraft:stony_shore": [32, 64]`) and indirectly via a group it belongs to (`"beaches": 32`), the more specific biome-id entry wins. Two *group* entries that overlap on the same biome with no biome-id tiebreaker is still an error, but the layered shape (group default + per-biome exception) now works as you'd expect.
### Fixed
The algorithm rewrite resolves a number of edge cases that the old code couldn't represent cleanly. Most users won't notice these individually; collectively they make output more predictable:
- Oversized regions (above the size threshold) are now handled by a dedicated planner that trims them down rather than skipping or partially clearing them, so leftover "stranded island" remnants are much less common.
- Coastal patches sitting between two non-replaceable biomes (e.g. `stony_shore` between water and a protected biome) no longer get accidentally erased instead of being trimmed or merged into a neighbour.
- Single-quart leftovers from a partial cleanup are now dissolved into a viable neighbour rather than aborting with a policy error.
- Intra-group replacement now works correctly when a region's boundary mixes in-group and out-of-group neighbours.
- Several rare non-determinism sources in the warming and caching layers are gone; cleanup output is now reproducible across re-runs of the same world even under heavier multiplayer load.
release
Biome Cleaner 1.0.3 for Fabric 1.21.1
1.0.318 апр. 2026 г.409Minecraft: 1.21.1fabric
Что нового
### Added
- **Minecraft 26.1 support** (Fabric + NeoForge): New targets for MC 26.1, which introduces a new versioning scheme, Java 25 requirement, and full deobfuscation.
- **Forge 1.21.1 support**: New target for Minecraft 1.21.1 on Forge.
### Changed
- **Reduced log noise** (cleaner-mod): Removed `[DIAG]` diagnostic warnings that `PreprocessManager` emitted unconditionally on the tick thread. Rate-limited "Could not find biome holder" warnings in `ChunkReplacementApplier` to once per biome ID. Shutdown summary now labels the warming cache clearly, reports the noise pre-warm rate, and drops the redundant full-tier hit rate.
### Fixed
- **Warming path bypasses sampler mismatch correction** (cleaner-mod, algorithm-core): The warming system builds its algorithm-core `Chunk` entirely from the flattened-sampler `NoiseCache`, so the existing PRE-STEP sampler-mismatch fix (which compares chunk palette vs noise cache) is a no-op on the warming path — both sides are the same source. When the interpolated sampler later fills the chunk palette with a different biome at a boundary quart, the prepared result has no replacement for it, and the fast path applies the result without correction, leaving a single-quart micro-biome island. Fix: `PreparedChunkResult` now carries an `originalBiomes` snapshot of what the warming worker observed. The fast path in `CleanerProcessor` compares this snapshot against the palette for each quart; on mismatch, it overrides the noise cache entry and re-processes just that quart via the new `ChunkCleanupEngine.processMismatchedQuart()` (stability cache skipped), merging any replacement into the prepared result before applying. Unaffected quarts keep their warming-computed replacements.
release
Biome Cleaner 1.0.3 for Fabric 1.21.11
1.0.318 апр. 2026 г.115Minecraft: 1.21.11fabric
Что нового
### Added
- **Minecraft 26.1 support** (Fabric + NeoForge): New targets for MC 26.1, which introduces a new versioning scheme, Java 25 requirement, and full deobfuscation.
- **Forge 1.21.1 support**: New target for Minecraft 1.21.1 on Forge.
### Changed
- **Reduced log noise** (cleaner-mod): Removed `[DIAG]` diagnostic warnings that `PreprocessManager` emitted unconditionally on the tick thread. Rate-limited "Could not find biome holder" warnings in `ChunkReplacementApplier` to once per biome ID. Shutdown summary now labels the warming cache clearly, reports the noise pre-warm rate, and drops the redundant full-tier hit rate.
### Fixed
- **Warming path bypasses sampler mismatch correction** (cleaner-mod, algorithm-core): The warming system builds its algorithm-core `Chunk` entirely from the flattened-sampler `NoiseCache`, so the existing PRE-STEP sampler-mismatch fix (which compares chunk palette vs noise cache) is a no-op on the warming path — both sides are the same source. When the interpolated sampler later fills the chunk palette with a different biome at a boundary quart, the prepared result has no replacement for it, and the fast path applies the result without correction, leaving a single-quart micro-biome island. Fix: `PreparedChunkResult` now carries an `originalBiomes` snapshot of what the warming worker observed. The fast path in `CleanerProcessor` compares this snapshot against the palette for each quart; on mismatch, it overrides the noise cache entry and re-processes just that quart via the new `ChunkCleanupEngine.processMismatchedQuart()` (stability cache skipped), merging any replacement into the prepared result before applying. Unaffected quarts keep their warming-computed replacements.
release
Biome Cleaner 1.0.3 for Fabric 26.1
1.0.318 апр. 2026 г.31Minecraft: 26.1fabric
Что нового
### Added
- **Minecraft 26.1 support** (Fabric + NeoForge): New targets for MC 26.1, which introduces a new versioning scheme, Java 25 requirement, and full deobfuscation.
- **Forge 1.21.1 support**: New target for Minecraft 1.21.1 on Forge.
### Changed
- **Reduced log noise** (cleaner-mod): Removed `[DIAG]` diagnostic warnings that `PreprocessManager` emitted unconditionally on the tick thread. Rate-limited "Could not find biome holder" warnings in `ChunkReplacementApplier` to once per biome ID. Shutdown summary now labels the warming cache clearly, reports the noise pre-warm rate, and drops the redundant full-tier hit rate.
### Fixed
- **Warming path bypasses sampler mismatch correction** (cleaner-mod, algorithm-core): The warming system builds its algorithm-core `Chunk` entirely from the flattened-sampler `NoiseCache`, so the existing PRE-STEP sampler-mismatch fix (which compares chunk palette vs noise cache) is a no-op on the warming path — both sides are the same source. When the interpolated sampler later fills the chunk palette with a different biome at a boundary quart, the prepared result has no replacement for it, and the fast path applies the result without correction, leaving a single-quart micro-biome island. Fix: `PreparedChunkResult` now carries an `originalBiomes` snapshot of what the warming worker observed. The fast path in `CleanerProcessor` compares this snapshot against the palette for each quart; on mismatch, it overrides the noise cache entry and re-processes just that quart via the new `ChunkCleanupEngine.processMismatchedQuart()` (stability cache skipped), merging any replacement into the prepared result before applying. Unaffected quarts keep their warming-computed replacements.
release
Biome Cleaner 1.0.3 for Forge 1.21.1
1.0.318 апр. 2026 г.11Minecraft: 1.21.1forge
Что нового
### Added
- **Minecraft 26.1 support** (Fabric + NeoForge): New targets for MC 26.1, which introduces a new versioning scheme, Java 25 requirement, and full deobfuscation.
- **Forge 1.21.1 support**: New target for Minecraft 1.21.1 on Forge.
### Changed
- **Reduced log noise** (cleaner-mod): Removed `[DIAG]` diagnostic warnings that `PreprocessManager` emitted unconditionally on the tick thread. Rate-limited "Could not find biome holder" warnings in `ChunkReplacementApplier` to once per biome ID. Shutdown summary now labels the warming cache clearly, reports the noise pre-warm rate, and drops the redundant full-tier hit rate.
### Fixed
- **Warming path bypasses sampler mismatch correction** (cleaner-mod, algorithm-core): The warming system builds its algorithm-core `Chunk` entirely from the flattened-sampler `NoiseCache`, so the existing PRE-STEP sampler-mismatch fix (which compares chunk palette vs noise cache) is a no-op on the warming path — both sides are the same source. When the interpolated sampler later fills the chunk palette with a different biome at a boundary quart, the prepared result has no replacement for it, and the fast path applies the result without correction, leaving a single-quart micro-biome island. Fix: `PreparedChunkResult` now carries an `originalBiomes` snapshot of what the warming worker observed. The fast path in `CleanerProcessor` compares this snapshot against the palette for each quart; on mismatch, it overrides the noise cache entry and re-processes just that quart via the new `ChunkCleanupEngine.processMismatchedQuart()` (stability cache skipped), merging any replacement into the prepared result before applying. Unaffected quarts keep their warming-computed replacements.
release
Biome Cleaner 1.0.3 for NeoForge 1.21.1
1.0.318 апр. 2026 г.276Minecraft: 1.21.1neoforge
Что нового
### Added
- **Minecraft 26.1 support** (Fabric + NeoForge): New targets for MC 26.1, which introduces a new versioning scheme, Java 25 requirement, and full deobfuscation.
- **Forge 1.21.1 support**: New target for Minecraft 1.21.1 on Forge.
### Changed
- **Reduced log noise** (cleaner-mod): Removed `[DIAG]` diagnostic warnings that `PreprocessManager` emitted unconditionally on the tick thread. Rate-limited "Could not find biome holder" warnings in `ChunkReplacementApplier` to once per biome ID. Shutdown summary now labels the warming cache clearly, reports the noise pre-warm rate, and drops the redundant full-tier hit rate.
### Fixed
- **Warming path bypasses sampler mismatch correction** (cleaner-mod, algorithm-core): The warming system builds its algorithm-core `Chunk` entirely from the flattened-sampler `NoiseCache`, so the existing PRE-STEP sampler-mismatch fix (which compares chunk palette vs noise cache) is a no-op on the warming path — both sides are the same source. When the interpolated sampler later fills the chunk palette with a different biome at a boundary quart, the prepared result has no replacement for it, and the fast path applies the result without correction, leaving a single-quart micro-biome island. Fix: `PreparedChunkResult` now carries an `originalBiomes` snapshot of what the warming worker observed. The fast path in `CleanerProcessor` compares this snapshot against the palette for each quart; on mismatch, it overrides the noise cache entry and re-processes just that quart via the new `ChunkCleanupEngine.processMismatchedQuart()` (stability cache skipped), merging any replacement into the prepared result before applying. Unaffected quarts keep their warming-computed replacements.
release
Biome Cleaner 1.0.3 for NeoForge 1.21.11
1.0.318 апр. 2026 г.12Minecraft: 1.21.11neoforge
Что нового
### Added
- **Minecraft 26.1 support** (Fabric + NeoForge): New targets for MC 26.1, which introduces a new versioning scheme, Java 25 requirement, and full deobfuscation.
- **Forge 1.21.1 support**: New target for Minecraft 1.21.1 on Forge.
### Changed
- **Reduced log noise** (cleaner-mod): Removed `[DIAG]` diagnostic warnings that `PreprocessManager` emitted unconditionally on the tick thread. Rate-limited "Could not find biome holder" warnings in `ChunkReplacementApplier` to once per biome ID. Shutdown summary now labels the warming cache clearly, reports the noise pre-warm rate, and drops the redundant full-tier hit rate.
### Fixed
- **Warming path bypasses sampler mismatch correction** (cleaner-mod, algorithm-core): The warming system builds its algorithm-core `Chunk` entirely from the flattened-sampler `NoiseCache`, so the existing PRE-STEP sampler-mismatch fix (which compares chunk palette vs noise cache) is a no-op on the warming path — both sides are the same source. When the interpolated sampler later fills the chunk palette with a different biome at a boundary quart, the prepared result has no replacement for it, and the fast path applies the result without correction, leaving a single-quart micro-biome island. Fix: `PreparedChunkResult` now carries an `originalBiomes` snapshot of what the warming worker observed. The fast path in `CleanerProcessor` compares this snapshot against the palette for each quart; on mismatch, it overrides the noise cache entry and re-processes just that quart via the new `ChunkCleanupEngine.processMismatchedQuart()` (stability cache skipped), merging any replacement into the prepared result before applying. Unaffected quarts keep their warming-computed replacements.
release
Biome Cleaner 1.0.3 for NeoForge 26.1
1.0.318 апр. 2026 г.14Minecraft: 26.1neoforge
Что нового
### Added
- **Minecraft 26.1 support** (Fabric + NeoForge): New targets for MC 26.1, which introduces a new versioning scheme, Java 25 requirement, and full deobfuscation.
- **Forge 1.21.1 support**: New target for Minecraft 1.21.1 on Forge.
### Changed
- **Reduced log noise** (cleaner-mod): Removed `[DIAG]` diagnostic warnings that `PreprocessManager` emitted unconditionally on the tick thread. Rate-limited "Could not find biome holder" warnings in `ChunkReplacementApplier` to once per biome ID. Shutdown summary now labels the warming cache clearly, reports the noise pre-warm rate, and drops the redundant full-tier hit rate.
### Fixed
- **Warming path bypasses sampler mismatch correction** (cleaner-mod, algorithm-core): The warming system builds its algorithm-core `Chunk` entirely from the flattened-sampler `NoiseCache`, so the existing PRE-STEP sampler-mismatch fix (which compares chunk palette vs noise cache) is a no-op on the warming path — both sides are the same source. When the interpolated sampler later fills the chunk palette with a different biome at a boundary quart, the prepared result has no replacement for it, and the fast path applies the result without correction, leaving a single-quart micro-biome island. Fix: `PreparedChunkResult` now carries an `originalBiomes` snapshot of what the warming worker observed. The fast path in `CleanerProcessor` compares this snapshot against the palette for each quart; on mismatch, it overrides the noise cache entry and re-processes just that quart via the new `ChunkCleanupEngine.processMismatchedQuart()` (stability cache skipped), merging any replacement into the prepared result before applying. Unaffected quarts keep their warming-computed replacements.
release
Biome Cleaner 1.0.2 for Fabric 1.21.1
1.0.212 апр. 2026 г.36Minecraft: 1.21.1fabric
Что нового
### Fixed
- **Non-deterministic cleanup from CI cache contamination** (algorithm-core): When `checkNeighborStability`'s retry loop excluded a cycling region and found a different region of the same biome, the result was cached as context-independent (CI). Concurrent threads could read a stale CI entry computed under a different visiting set, producing non-deterministic output. Retry-dependent results are now propagated as context-dependent.
- **Width check always classifies all quarts as thin** (algorithm-core): The width BFS search range (`widthThreshold / 2`) produced a maximum computed width exactly equal to the threshold. Combined with the `<=` comparison, every quart was classified as thin, causing universal 8-connectivity and making the width cache pure overhead. Increased BFS range by +1 so interior quarts correctly use 4-connectivity.
- **Phase 2 exploration budget ignores per-biome threshold** (algorithm-core): Phase 2 exploration used the global `sizeThreshold` instead of the per-biome override passed as a parameter. Regions between the global and per-biome thresholds were incorrectly classified as stable. Phase 2 now uses the per-biome threshold directly.
- **Thread pool double-decrement on scale-down** (warmup): `activeThreadCount` was decremented twice when a worker exited via the scale-down path — once in the scale-down check and again in the `finally` block. Added `scaleDownExit` flag so the `finally` block only decrements for shutdown exits.
- **Thread pool shutdown deadlock** (warmup): `shutdown()` held `workerLock` during `Thread.join()`, but worker `finally` blocks needed the same lock for `workers.remove()`. Workers blocked for the full 5-second join timeout on every shutdown. Now snapshots the worker list and joins without holding the lock.
- **Warming queue submit race loses FULL tasks** (warmup): Non-atomic get-then-put in `submit()` allowed concurrent LIGHT submissions to overwrite FULL tasks for the same chunk position. Replaced with `ConcurrentHashMap.compute()` for atomic deduplication.
- **Warming queue poll ABA race deletes new task mapping** (warmup): `poll()` used one-arg `remove(posKey)` which unconditionally deleted the mapping, destroying new tasks submitted between the get and remove. Changed to two-arg `remove(posKey, task)` consistent with other removal paths.
- **Cone angle rules 3 & 4 inversion** (warmup): Rules 3 and 4 increased `coneAngle` to "widen" the cone, but lower `coneAngle` actually produces a more negative `cosTrailingThreshold` which includes more chunks. The rules were narrowing when they should widen, creating a positive feedback loop. Also added `!adjusted` guard to Rule 3 to prevent double-stepping with Rule 2.
- **Last player chunk position overwrites in multiplayer** (warmup): Single static `lastPlayerChunkPos` was overwritten per player during the tick loop, so JFR `chunkDistance` metrics used only the last player's position. Now stores all player positions and computes distance to the nearest player.
- **Per-player queue pruning destroys other players' tasks** (warmup): `removeOutsideRadius()` pruned the global queue using a single player's position, removing all other players' tasks. Added `removeOutsideAllPlayers()` that only removes tasks outside ALL players' radii, with the coordinator batching all requests per cycle for a single pruning pass.
- **Global tuning with aggregate multiplayer metrics** (warmup): Aggregate hit/miss/late metrics diluted individual player problems — one player's poor metrics were hidden by other players' good metrics. Tuning thresholds now scale by player count to detect when any single player would trigger the rule.
- **Prepared store capacity insufficient for multiplayer** (warmup): Fixed 5000-entry `BoundedPreparedChunkStore` was shared across all players. At 8+ players, FIFO eviction removed prepared results before consumption. Capacity is now dynamic: `max(5000, playerCount * 700)`.
- **Reached chunks unbounded memory growth** (warmup): `reachedChunks` set grew without bound, accumulating ~72 bytes per chunk with no eviction. Added periodic distance-based eviction (every ~50 seconds) that removes entries far from all online players.
- **Cave carver surface uses wrong biome** (cleaner-mod): Carvers re-applied surface rules using the raw `BiomeSource` instead of the mod-modified chunk palette, causing wrong surface blocks at cave entrances (e.g., snow in birch forest). New `CarverBiomeMixin` redirects `BiomeManager.withDifferentSource()` in `applyCarvers()` to use the chunk palette biomes.
- **Climate sampler mismatch causes non-deterministic cleanup** (algorithm-core): The algorithm's noise function uses `randomState.sampler()` (flattened, no interpolation), while vanilla's `fillBiomesFromNoise` uses `NoiseChunk.cachedClimateSampler()` (bilinearly interpolated within cells). At biome boundaries, these samplers can resolve a quart to different biomes, causing the chunk palette and the algorithm's view to disagree. When the algorithm processes the quart first with the wrong biome, it writes a stale entry to the shared `StabilityCache`, which then poisons later chunks that need to replace the true palette biome. Whether the bug manifests depends on chunk processing order (affected by warming timing and player movement), breaking determinism. Fix: `ChunkCleanupEngine.process()` now scans each chunk's palette before algorithm execution, overrides mismatched `NoiseCache` entries via the new `NoiseCache.overrideEntry()`, and tracks affected quarts in a `samplerMismatchQuarts` set so `processSingleQuart` skips any stale stability cache entries for them.
release
Biome Cleaner 1.0.2 for Fabric 1.21.11
1.0.212 апр. 2026 г.42Minecraft: 1.21.11fabric
Что нового
### Fixed
- **Non-deterministic cleanup from CI cache contamination** (algorithm-core): When `checkNeighborStability`'s retry loop excluded a cycling region and found a different region of the same biome, the result was cached as context-independent (CI). Concurrent threads could read a stale CI entry computed under a different visiting set, producing non-deterministic output. Retry-dependent results are now propagated as context-dependent.
- **Width check always classifies all quarts as thin** (algorithm-core): The width BFS search range (`widthThreshold / 2`) produced a maximum computed width exactly equal to the threshold. Combined with the `<=` comparison, every quart was classified as thin, causing universal 8-connectivity and making the width cache pure overhead. Increased BFS range by +1 so interior quarts correctly use 4-connectivity.
- **Phase 2 exploration budget ignores per-biome threshold** (algorithm-core): Phase 2 exploration used the global `sizeThreshold` instead of the per-biome override passed as a parameter. Regions between the global and per-biome thresholds were incorrectly classified as stable. Phase 2 now uses the per-biome threshold directly.
- **Thread pool double-decrement on scale-down** (warmup): `activeThreadCount` was decremented twice when a worker exited via the scale-down path — once in the scale-down check and again in the `finally` block. Added `scaleDownExit` flag so the `finally` block only decrements for shutdown exits.
- **Thread pool shutdown deadlock** (warmup): `shutdown()` held `workerLock` during `Thread.join()`, but worker `finally` blocks needed the same lock for `workers.remove()`. Workers blocked for the full 5-second join timeout on every shutdown. Now snapshots the worker list and joins without holding the lock.
- **Warming queue submit race loses FULL tasks** (warmup): Non-atomic get-then-put in `submit()` allowed concurrent LIGHT submissions to overwrite FULL tasks for the same chunk position. Replaced with `ConcurrentHashMap.compute()` for atomic deduplication.
- **Warming queue poll ABA race deletes new task mapping** (warmup): `poll()` used one-arg `remove(posKey)` which unconditionally deleted the mapping, destroying new tasks submitted between the get and remove. Changed to two-arg `remove(posKey, task)` consistent with other removal paths.
- **Cone angle rules 3 & 4 inversion** (warmup): Rules 3 and 4 increased `coneAngle` to "widen" the cone, but lower `coneAngle` actually produces a more negative `cosTrailingThreshold` which includes more chunks. The rules were narrowing when they should widen, creating a positive feedback loop. Also added `!adjusted` guard to Rule 3 to prevent double-stepping with Rule 2.
- **Last player chunk position overwrites in multiplayer** (warmup): Single static `lastPlayerChunkPos` was overwritten per player during the tick loop, so JFR `chunkDistance` metrics used only the last player's position. Now stores all player positions and computes distance to the nearest player.
- **Per-player queue pruning destroys other players' tasks** (warmup): `removeOutsideRadius()` pruned the global queue using a single player's position, removing all other players' tasks. Added `removeOutsideAllPlayers()` that only removes tasks outside ALL players' radii, with the coordinator batching all requests per cycle for a single pruning pass.
- **Global tuning with aggregate multiplayer metrics** (warmup): Aggregate hit/miss/late metrics diluted individual player problems — one player's poor metrics were hidden by other players' good metrics. Tuning thresholds now scale by player count to detect when any single player would trigger the rule.
- **Prepared store capacity insufficient for multiplayer** (warmup): Fixed 5000-entry `BoundedPreparedChunkStore` was shared across all players. At 8+ players, FIFO eviction removed prepared results before consumption. Capacity is now dynamic: `max(5000, playerCount * 700)`.
- **Reached chunks unbounded memory growth** (warmup): `reachedChunks` set grew without bound, accumulating ~72 bytes per chunk with no eviction. Added periodic distance-based eviction (every ~50 seconds) that removes entries far from all online players.
- **Cave carver surface uses wrong biome** (cleaner-mod): Carvers re-applied surface rules using the raw `BiomeSource` instead of the mod-modified chunk palette, causing wrong surface blocks at cave entrances (e.g., snow in birch forest). New `CarverBiomeMixin` redirects `BiomeManager.withDifferentSource()` in `applyCarvers()` to use the chunk palette biomes.
- **Climate sampler mismatch causes non-deterministic cleanup** (algorithm-core): The algorithm's noise function uses `randomState.sampler()` (flattened, no interpolation), while vanilla's `fillBiomesFromNoise` uses `NoiseChunk.cachedClimateSampler()` (bilinearly interpolated within cells). At biome boundaries, these samplers can resolve a quart to different biomes, causing the chunk palette and the algorithm's view to disagree. When the algorithm processes the quart first with the wrong biome, it writes a stale entry to the shared `StabilityCache`, which then poisons later chunks that need to replace the true palette biome. Whether the bug manifests depends on chunk processing order (affected by warming timing and player movement), breaking determinism. Fix: `ChunkCleanupEngine.process()` now scans each chunk's palette before algorithm execution, overrides mismatched `NoiseCache` entries via the new `NoiseCache.overrideEntry()`, and tracks affected quarts in a `samplerMismatchQuarts` set so `processSingleQuart` skips any stale stability cache entries for them.
release
Biome Cleaner 1.0.2 for NeoForge 1.21.1
1.0.212 апр. 2026 г.61Minecraft: 1.21.1neoforge
Что нового
### Fixed
- **Non-deterministic cleanup from CI cache contamination** (algorithm-core): When `checkNeighborStability`'s retry loop excluded a cycling region and found a different region of the same biome, the result was cached as context-independent (CI). Concurrent threads could read a stale CI entry computed under a different visiting set, producing non-deterministic output. Retry-dependent results are now propagated as context-dependent.
- **Width check always classifies all quarts as thin** (algorithm-core): The width BFS search range (`widthThreshold / 2`) produced a maximum computed width exactly equal to the threshold. Combined with the `<=` comparison, every quart was classified as thin, causing universal 8-connectivity and making the width cache pure overhead. Increased BFS range by +1 so interior quarts correctly use 4-connectivity.
- **Phase 2 exploration budget ignores per-biome threshold** (algorithm-core): Phase 2 exploration used the global `sizeThreshold` instead of the per-biome override passed as a parameter. Regions between the global and per-biome thresholds were incorrectly classified as stable. Phase 2 now uses the per-biome threshold directly.
- **Thread pool double-decrement on scale-down** (warmup): `activeThreadCount` was decremented twice when a worker exited via the scale-down path — once in the scale-down check and again in the `finally` block. Added `scaleDownExit` flag so the `finally` block only decrements for shutdown exits.
- **Thread pool shutdown deadlock** (warmup): `shutdown()` held `workerLock` during `Thread.join()`, but worker `finally` blocks needed the same lock for `workers.remove()`. Workers blocked for the full 5-second join timeout on every shutdown. Now snapshots the worker list and joins without holding the lock.
- **Warming queue submit race loses FULL tasks** (warmup): Non-atomic get-then-put in `submit()` allowed concurrent LIGHT submissions to overwrite FULL tasks for the same chunk position. Replaced with `ConcurrentHashMap.compute()` for atomic deduplication.
- **Warming queue poll ABA race deletes new task mapping** (warmup): `poll()` used one-arg `remove(posKey)` which unconditionally deleted the mapping, destroying new tasks submitted between the get and remove. Changed to two-arg `remove(posKey, task)` consistent with other removal paths.
- **Cone angle rules 3 & 4 inversion** (warmup): Rules 3 and 4 increased `coneAngle` to "widen" the cone, but lower `coneAngle` actually produces a more negative `cosTrailingThreshold` which includes more chunks. The rules were narrowing when they should widen, creating a positive feedback loop. Also added `!adjusted` guard to Rule 3 to prevent double-stepping with Rule 2.
- **Last player chunk position overwrites in multiplayer** (warmup): Single static `lastPlayerChunkPos` was overwritten per player during the tick loop, so JFR `chunkDistance` metrics used only the last player's position. Now stores all player positions and computes distance to the nearest player.
- **Per-player queue pruning destroys other players' tasks** (warmup): `removeOutsideRadius()` pruned the global queue using a single player's position, removing all other players' tasks. Added `removeOutsideAllPlayers()` that only removes tasks outside ALL players' radii, with the coordinator batching all requests per cycle for a single pruning pass.
- **Global tuning with aggregate multiplayer metrics** (warmup): Aggregate hit/miss/late metrics diluted individual player problems — one player's poor metrics were hidden by other players' good metrics. Tuning thresholds now scale by player count to detect when any single player would trigger the rule.
- **Prepared store capacity insufficient for multiplayer** (warmup): Fixed 5000-entry `BoundedPreparedChunkStore` was shared across all players. At 8+ players, FIFO eviction removed prepared results before consumption. Capacity is now dynamic: `max(5000, playerCount * 700)`.
- **Reached chunks unbounded memory growth** (warmup): `reachedChunks` set grew without bound, accumulating ~72 bytes per chunk with no eviction. Added periodic distance-based eviction (every ~50 seconds) that removes entries far from all online players.
- **Cave carver surface uses wrong biome** (cleaner-mod): Carvers re-applied surface rules using the raw `BiomeSource` instead of the mod-modified chunk palette, causing wrong surface blocks at cave entrances (e.g., snow in birch forest). New `CarverBiomeMixin` redirects `BiomeManager.withDifferentSource()` in `applyCarvers()` to use the chunk palette biomes.
- **Climate sampler mismatch causes non-deterministic cleanup** (algorithm-core): The algorithm's noise function uses `randomState.sampler()` (flattened, no interpolation), while vanilla's `fillBiomesFromNoise` uses `NoiseChunk.cachedClimateSampler()` (bilinearly interpolated within cells). At biome boundaries, these samplers can resolve a quart to different biomes, causing the chunk palette and the algorithm's view to disagree. When the algorithm processes the quart first with the wrong biome, it writes a stale entry to the shared `StabilityCache`, which then poisons later chunks that need to replace the true palette biome. Whether the bug manifests depends on chunk processing order (affected by warming timing and player movement), breaking determinism. Fix: `ChunkCleanupEngine.process()` now scans each chunk's palette before algorithm execution, overrides mismatched `NoiseCache` entries via the new `NoiseCache.overrideEntry()`, and tracks affected quarts in a `samplerMismatchQuarts` set so `processSingleQuart` skips any stale stability cache entries for them.
release
Biome Cleaner 1.0.2 for NeoForge 1.21.11
1.0.212 апр. 2026 г.15Minecraft: 1.21.11neoforge
Что нового
### Fixed
- **Non-deterministic cleanup from CI cache contamination** (algorithm-core): When `checkNeighborStability`'s retry loop excluded a cycling region and found a different region of the same biome, the result was cached as context-independent (CI). Concurrent threads could read a stale CI entry computed under a different visiting set, producing non-deterministic output. Retry-dependent results are now propagated as context-dependent.
- **Width check always classifies all quarts as thin** (algorithm-core): The width BFS search range (`widthThreshold / 2`) produced a maximum computed width exactly equal to the threshold. Combined with the `<=` comparison, every quart was classified as thin, causing universal 8-connectivity and making the width cache pure overhead. Increased BFS range by +1 so interior quarts correctly use 4-connectivity.
- **Phase 2 exploration budget ignores per-biome threshold** (algorithm-core): Phase 2 exploration used the global `sizeThreshold` instead of the per-biome override passed as a parameter. Regions between the global and per-biome thresholds were incorrectly classified as stable. Phase 2 now uses the per-biome threshold directly.
- **Thread pool double-decrement on scale-down** (warmup): `activeThreadCount` was decremented twice when a worker exited via the scale-down path — once in the scale-down check and again in the `finally` block. Added `scaleDownExit` flag so the `finally` block only decrements for shutdown exits.
- **Thread pool shutdown deadlock** (warmup): `shutdown()` held `workerLock` during `Thread.join()`, but worker `finally` blocks needed the same lock for `workers.remove()`. Workers blocked for the full 5-second join timeout on every shutdown. Now snapshots the worker list and joins without holding the lock.
- **Warming queue submit race loses FULL tasks** (warmup): Non-atomic get-then-put in `submit()` allowed concurrent LIGHT submissions to overwrite FULL tasks for the same chunk position. Replaced with `ConcurrentHashMap.compute()` for atomic deduplication.
- **Warming queue poll ABA race deletes new task mapping** (warmup): `poll()` used one-arg `remove(posKey)` which unconditionally deleted the mapping, destroying new tasks submitted between the get and remove. Changed to two-arg `remove(posKey, task)` consistent with other removal paths.
- **Cone angle rules 3 & 4 inversion** (warmup): Rules 3 and 4 increased `coneAngle` to "widen" the cone, but lower `coneAngle` actually produces a more negative `cosTrailingThreshold` which includes more chunks. The rules were narrowing when they should widen, creating a positive feedback loop. Also added `!adjusted` guard to Rule 3 to prevent double-stepping with Rule 2.
- **Last player chunk position overwrites in multiplayer** (warmup): Single static `lastPlayerChunkPos` was overwritten per player during the tick loop, so JFR `chunkDistance` metrics used only the last player's position. Now stores all player positions and computes distance to the nearest player.
- **Per-player queue pruning destroys other players' tasks** (warmup): `removeOutsideRadius()` pruned the global queue using a single player's position, removing all other players' tasks. Added `removeOutsideAllPlayers()` that only removes tasks outside ALL players' radii, with the coordinator batching all requests per cycle for a single pruning pass.
- **Global tuning with aggregate multiplayer metrics** (warmup): Aggregate hit/miss/late metrics diluted individual player problems — one player's poor metrics were hidden by other players' good metrics. Tuning thresholds now scale by player count to detect when any single player would trigger the rule.
- **Prepared store capacity insufficient for multiplayer** (warmup): Fixed 5000-entry `BoundedPreparedChunkStore` was shared across all players. At 8+ players, FIFO eviction removed prepared results before consumption. Capacity is now dynamic: `max(5000, playerCount * 700)`.
- **Reached chunks unbounded memory growth** (warmup): `reachedChunks` set grew without bound, accumulating ~72 bytes per chunk with no eviction. Added periodic distance-based eviction (every ~50 seconds) that removes entries far from all online players.
- **Cave carver surface uses wrong biome** (cleaner-mod): Carvers re-applied surface rules using the raw `BiomeSource` instead of the mod-modified chunk palette, causing wrong surface blocks at cave entrances (e.g., snow in birch forest). New `CarverBiomeMixin` redirects `BiomeManager.withDifferentSource()` in `applyCarvers()` to use the chunk palette biomes.
- **Climate sampler mismatch causes non-deterministic cleanup** (algorithm-core): The algorithm's noise function uses `randomState.sampler()` (flattened, no interpolation), while vanilla's `fillBiomesFromNoise` uses `NoiseChunk.cachedClimateSampler()` (bilinearly interpolated within cells). At biome boundaries, these samplers can resolve a quart to different biomes, causing the chunk palette and the algorithm's view to disagree. When the algorithm processes the quart first with the wrong biome, it writes a stale entry to the shared `StabilityCache`, which then poisons later chunks that need to replace the true palette biome. Whether the bug manifests depends on chunk processing order (affected by warming timing and player movement), breaking determinism. Fix: `ChunkCleanupEngine.process()` now scans each chunk's palette before algorithm execution, overrides mismatched `NoiseCache` entries via the new `NoiseCache.overrideEntry()`, and tracks affected quarts in a `samplerMismatchQuarts` set so `processSingleQuart` skips any stale stability cache entries for them.
release
Biome Cleaner 1.0.1 for NeoForge 1.21.11
1.0.15 апр. 2026 г.17Minecraft: 1.21.11neoforge
Что нового
### Fixed
- **Adjacency mismatch** (algorithm-core): Thin-region exploration discovers boundary neighbors via 8-connectivity, but the neighbor-quart lookup only used 4-connectivity. Diagonal-only neighbors were invisible to `checkNeighborStability` and silently treated as stable, letting a micro biome act as a stable replacement target.
- **Depth-limit false STABLE** (algorithm-core): When `MAX_NEIGHBOR_DEPTH` was hit, `checkNeighborStability` returned STABLE, making a deeply-nested neighbor appear stable. That false STABLE propagated up as a stable neighbor candidate, was selected, and got cached as context-independent -- permanently poisoning the stability cache with wrong replacements.
- **Self-reference wins over genuine resolution** (algorithm-core): The first unstable neighbor's resolved chain was stored even when it was a cycle-break self-reference. Later neighbors with genuine chain resolutions to the real sink were ignored. Genuine resolutions now upgrade self-referencing results.
- **Intermediate boundary biome wins over stable sink** (algorithm-core): When a neighbor's chain resolved to another direct boundary biome that was itself being replaced, the algorithm returned it immediately. A chain-follow step now walks the `neighborResolution` map to reach the terminal sink.
- **Biome-type cycle detection false positives** (algorithm-core): Cycle detection was keyed by biome type, not region identity. Two disconnected regions of the same biome (e.g., a micro snowy_plains and a large stable snowy_plains) were treated as the same cycle node. Now tracks ancestor region quarts (`visitingQuarts`) and retries with exclusion when a region-overlap cycle is detected, finding alternative regions of the same biome type.
- **Self-ref direct neighbor beats stable neighbor** (algorithm-core): A self-referencing direct neighbor (cycle-break survivor that resolves to itself) was preferred over a genuinely stable neighbor. Self-refs are now deprioritized below stable neighbors in the selection ranking.
- **Relaxed visiting.contains(resolved) false positive** (algorithm-core): Removed the biome-type-only rejection of resolved values matching an ancestor's biome type. The recursive `checkNeighborStability` already performs region-aware cycle detection, so its result can be trusted even when the resolved biome type appears in the visiting set.
- **Conditional breakCycle** (algorithm-core): `breakCycle` now only triggers when the producing chain actually involved cycles (tracked via per-neighbor cycle flags), not when a chain genuinely reached a different region of the target biome type.
release
Biome Cleaner 1.0.1 for Fabric 1.21.11
1.0.15 апр. 2026 г.35Minecraft: 1.21.11fabric
Что нового
### Fixed
- **Adjacency mismatch** (algorithm-core): Thin-region exploration discovers boundary neighbors via 8-connectivity, but the neighbor-quart lookup only used 4-connectivity. Diagonal-only neighbors were invisible to `checkNeighborStability` and silently treated as stable, letting a micro biome act as a stable replacement target.
- **Depth-limit false STABLE** (algorithm-core): When `MAX_NEIGHBOR_DEPTH` was hit, `checkNeighborStability` returned STABLE, making a deeply-nested neighbor appear stable. That false STABLE propagated up as a stable neighbor candidate, was selected, and got cached as context-independent -- permanently poisoning the stability cache with wrong replacements.
- **Self-reference wins over genuine resolution** (algorithm-core): The first unstable neighbor's resolved chain was stored even when it was a cycle-break self-reference. Later neighbors with genuine chain resolutions to the real sink were ignored. Genuine resolutions now upgrade self-referencing results.
- **Intermediate boundary biome wins over stable sink** (algorithm-core): When a neighbor's chain resolved to another direct boundary biome that was itself being replaced, the algorithm returned it immediately. A chain-follow step now walks the `neighborResolution` map to reach the terminal sink.
- **Biome-type cycle detection false positives** (algorithm-core): Cycle detection was keyed by biome type, not region identity. Two disconnected regions of the same biome (e.g., a micro snowy_plains and a large stable snowy_plains) were treated as the same cycle node. Now tracks ancestor region quarts (`visitingQuarts`) and retries with exclusion when a region-overlap cycle is detected, finding alternative regions of the same biome type.
- **Self-ref direct neighbor beats stable neighbor** (algorithm-core): A self-referencing direct neighbor (cycle-break survivor that resolves to itself) was preferred over a genuinely stable neighbor. Self-refs are now deprioritized below stable neighbors in the selection ranking.
- **Relaxed visiting.contains(resolved) false positive** (algorithm-core): Removed the biome-type-only rejection of resolved values matching an ancestor's biome type. The recursive `checkNeighborStability` already performs region-aware cycle detection, so its result can be trusted even when the resolved biome type appears in the visiting set.
- **Conditional breakCycle** (algorithm-core): `breakCycle` now only triggers when the producing chain actually involved cycles (tracked via per-neighbor cycle flags), not when a chain genuinely reached a different region of the target biome type.
release
Biome Cleaner 1.0.1 for NeoForge 1.21.1
1.0.15 апр. 2026 г.67Minecraft: 1.21.1neoforge
Что нового
### Fixed
- **Adjacency mismatch** (algorithm-core): Thin-region exploration discovers boundary neighbors via 8-connectivity, but the neighbor-quart lookup only used 4-connectivity. Diagonal-only neighbors were invisible to `checkNeighborStability` and silently treated as stable, letting a micro biome act as a stable replacement target.
- **Depth-limit false STABLE** (algorithm-core): When `MAX_NEIGHBOR_DEPTH` was hit, `checkNeighborStability` returned STABLE, making a deeply-nested neighbor appear stable. That false STABLE propagated up as a stable neighbor candidate, was selected, and got cached as context-independent -- permanently poisoning the stability cache with wrong replacements.
- **Self-reference wins over genuine resolution** (algorithm-core): The first unstable neighbor's resolved chain was stored even when it was a cycle-break self-reference. Later neighbors with genuine chain resolutions to the real sink were ignored. Genuine resolutions now upgrade self-referencing results.
- **Intermediate boundary biome wins over stable sink** (algorithm-core): When a neighbor's chain resolved to another direct boundary biome that was itself being replaced, the algorithm returned it immediately. A chain-follow step now walks the `neighborResolution` map to reach the terminal sink.
- **Biome-type cycle detection false positives** (algorithm-core): Cycle detection was keyed by biome type, not region identity. Two disconnected regions of the same biome (e.g., a micro snowy_plains and a large stable snowy_plains) were treated as the same cycle node. Now tracks ancestor region quarts (`visitingQuarts`) and retries with exclusion when a region-overlap cycle is detected, finding alternative regions of the same biome type.
- **Self-ref direct neighbor beats stable neighbor** (algorithm-core): A self-referencing direct neighbor (cycle-break survivor that resolves to itself) was preferred over a genuinely stable neighbor. Self-refs are now deprioritized below stable neighbors in the selection ranking.
- **Relaxed visiting.contains(resolved) false positive** (algorithm-core): Removed the biome-type-only rejection of resolved values matching an ancestor's biome type. The recursive `checkNeighborStability` already performs region-aware cycle detection, so its result can be trusted even when the resolved biome type appears in the visiting set.
- **Conditional breakCycle** (algorithm-core): `breakCycle` now only triggers when the producing chain actually involved cycles (tracked via per-neighbor cycle flags), not when a chain genuinely reached a different region of the target biome type.
release
Biome Cleaner 1.0.1 for Fabric 1.21.1
1.0.15 апр. 2026 г.19Minecraft: 1.21.1fabric
Что нового
### Fixed
- **Adjacency mismatch** (algorithm-core): Thin-region exploration discovers boundary neighbors via 8-connectivity, but the neighbor-quart lookup only used 4-connectivity. Diagonal-only neighbors were invisible to `checkNeighborStability` and silently treated as stable, letting a micro biome act as a stable replacement target.
- **Depth-limit false STABLE** (algorithm-core): When `MAX_NEIGHBOR_DEPTH` was hit, `checkNeighborStability` returned STABLE, making a deeply-nested neighbor appear stable. That false STABLE propagated up as a stable neighbor candidate, was selected, and got cached as context-independent -- permanently poisoning the stability cache with wrong replacements.
- **Self-reference wins over genuine resolution** (algorithm-core): The first unstable neighbor's resolved chain was stored even when it was a cycle-break self-reference. Later neighbors with genuine chain resolutions to the real sink were ignored. Genuine resolutions now upgrade self-referencing results.
- **Intermediate boundary biome wins over stable sink** (algorithm-core): When a neighbor's chain resolved to another direct boundary biome that was itself being replaced, the algorithm returned it immediately. A chain-follow step now walks the `neighborResolution` map to reach the terminal sink.
- **Biome-type cycle detection false positives** (algorithm-core): Cycle detection was keyed by biome type, not region identity. Two disconnected regions of the same biome (e.g., a micro snowy_plains and a large stable snowy_plains) were treated as the same cycle node. Now tracks ancestor region quarts (`visitingQuarts`) and retries with exclusion when a region-overlap cycle is detected, finding alternative regions of the same biome type.
- **Self-ref direct neighbor beats stable neighbor** (algorithm-core): A self-referencing direct neighbor (cycle-break survivor that resolves to itself) was preferred over a genuinely stable neighbor. Self-refs are now deprioritized below stable neighbors in the selection ranking.
- **Relaxed visiting.contains(resolved) false positive** (algorithm-core): Removed the biome-type-only rejection of resolved values matching an ancestor's biome type. The recursive `checkNeighborStability` already performs region-aware cycle detection, so its result can be trusted even when the resolved biome type appears in the visiting set.
- **Conditional breakCycle** (algorithm-core): `breakCycle` now only triggers when the producing chain actually involved cycles (tracked via per-neighbor cycle flags), not when a chain genuinely reached a different region of the target biome type.
release
Biome Cleaner 1.0.0 for NeoForge 1.21.1
1.0.03 апр. 2026 г.24Minecraft: 1.21.1neoforge
release
Biome Cleaner 1.0.0 for Fabric 1.21.1
1.0.03 апр. 2026 г.10Minecraft: 1.21.1fabric
release
Biome Cleaner 1.0.0 for NeoForge 1.21.11
1.0.03 апр. 2026 г.16Minecraft: 1.21.11neoforge
release
Biome Cleaner 1.0.0 for Fabric 1.21.11
1.0.03 апр. 2026 г.24Minecraft: 1.21.11fabric