Release Highlights
- πΊ Vanilla cave world generation β The overworld now delegates to Minecraft's own 1.18+ noise generator, so islands are carved through genuine cheese, spaghetti, lush, dripstone and deep-dark caves, complete with vanilla ores, decorations, structures and underground biomes. The sky is capped with stone so the world stays solid rock from bedrock to the roof.
- π Reworked nether & end ore veins β Nether and End keep the fill-and-decorate approach with a new vein populator that places properly sized ore blobs (ancient debris, quartz, obsidian, glowstone and more).
- πΊ Paper 1.21.11 & Java 21 β CaveBlock now builds against the Paper API on Java 21 and targets the BentoBox 3.14 API.
- π‘ MiniMessage locales β All locale files have been converted from legacy colour codes to the MiniMessage format.
- βοΈ Config cleanup β World generation settings were reworked and dead options removed.
- π§ͺ Full test suite β A JUnit 5 + MockBukkit test suite was added to guard generation, height limits and addon lifecycle.
Compatibility
βοΈ BentoBox API 3.14+
βοΈ Paper Minecraft 1.21.5 β 26.2
βοΈ Java 21
Upgrading
- As always, take backups just in case. (Make a copy of everything!)
- Stop the server.
- Replace the CaveBlock jar with this one.
- Make sure your server runs Paper Minecraft 1.21.5β26.2 on Java 21 and BentoBox 3.14 or newer.
- Review your
config.ymlβ regenerate it or merge the new world-generation options (see callout below). - Restart the server.
- You should be good to go!
πΊ World generation changed: Newly generated overworld chunks now use vanilla noise caves instead of solid-fill carving. Already-generated chunks are untouched, but new terrain at the edges of your world will look different from older areas. Test on a copy first if this matters to you.
βοΈ Config note: The dead
netherBlocks,endBlocksanddebugsettings were removed and world-generation options were reworked. Back up your existingconfig.ymlbefore letting the addon write the new defaults.
π‘ Locale note: Locale files were migrated to MiniMessage and a height-limit message key was renamed to
caveblock.general.errors.cave-limit-reached. Regenerate your locale files if you have customised them.
Legend
- π‘ locale files may need to be regenerated or updated.
- βοΈ config options have been removed, renamed, or added.
- πΊ special attention needed.
New Features
πΊ Vanilla cave world generation
[PR #105]
The overworld generator was rewritten to delegate entirely to vanilla 1.18+ noise generation. This brings the full modern cave system β cheese caves, spaghetti caves, lush caves, dripstone caves, the deep dark and aquifer water pockets β along with vanilla ore distribution, cave decorations (dripstone, moss, glow berries, sculk) and structures such as mineshafts, dungeons, trial chambers, amethyst geodes and ancient cities. After vanilla terrain is generated, every column is capped with stone so there is no open sky, keeping CaveBlock's signature "solid rock" feel while the caves themselves are authentic. Underground biomes are placed naturally by the vanilla biome engine.
π Reworked nether and end ore generation
The Nether and End continue to use a fill-and-decorate approach, now driven by a new NewMaterialPopulator and per-environment generators. Ore veins are placed with configurable sizes so resources such as ancient debris, nether quartz, obsidian and glowstone appear as proper veins rather than single blocks.
π§ͺ JUnit 5 test suite
[PR #105]
A complete JUnit 5 + MockBukkit test suite was added covering the chunk generator, the custom height-limit listener, world creation and the addon lifecycle, raising confidence for future changes.
Bug Fixes
Height limit checked the wrong world
[PR #101]
The custom height-limit listener compared against the player's current (from) world instead of the destination (to) world, which could misjudge cross-world movement. It now checks the destination world.
Nether/End ores generated as specks
[PR #106]
The ore populator ignored each ore's configured blob size, so every Nether and End ore generated as a 1β4 block speck. Veins are now sized from the configured value so ores generate as proper clusters.
Config reload did not refresh generators
[PR #107]
After a /caveblock reload, the generators kept the settings captured at startup, so changes to world depth, roof/floor and main blocks did not apply to newly generated chunks until a full restart. The generators now re-read settings on reload.
Other Improvements
- βοΈ Removed dead settings (
netherBlocks,endBlocks,debug) and reworked world-generation config defaults. - π‘ Converted all locale files from legacy colour codes to MiniMessage.
- Added new cave blueprints and updated the existing cave configurations.
- Switched the build from Spigot to Paper 1.21.11 on Java 21 and updated the BentoBox API to 3.14.
- Updated all Maven plugins to their latest versions and pinned MockBukkit to Maven Central 4.110.0.
- Updated the copyright year and added
CLAUDE.mddeveloper guidance.
What's Changed
- πΊ World generation overhaul, Paper 1.21.11 / Java 21, MiniMessage locales and config cleanup (Release 1.21.0) by @tastybento in #105
- Check world based on
tolocation notfromlocation by @tastybento in #101 - π Honor
Ore.blob()vein size in nether/end ore generation by @tastybento in #106 - Refresh generators on config reload by @tastybento in #107
Full Changelog: 1.20.1...1.21.0