Files
rivencraft/docs/TERRABLENDER_COMPATIBILITY.md
T
2026-10-04 01:10:24 -04:00

4.2 KiB

Optional TerraBlender biome compatibility (Milestone 5, issue #37)

Rivencraft targets TerraBlender NeoForge 1.21.1-4.1.0.8. The official 1.21.1 release and region API are available for this Minecraft version. TerraBlender is compileOnly and is not required by the published Rivencraft jar. For a local development run with TerraBlender, use -PwithTerraBlender=true.

TerraBlender's API registers Overworld and Nether biome regions; it does not register arbitrary Rivencraft Age dimensions. Rivencraft therefore keeps its own deterministic Age biome sources and uses a guarded adapter to read the registered region biome IDs. Only biomes still present in Minecraft's biome registry are accepted. TerraBlender Overworld region biomes extend the pool for standard, flat, and sky-island Ages; Nether region biomes extend Cave Age pools and are valid authored Cave biome pages. Vanilla Nether-tagged biomes are also valid Cave biomes. This is generic: no Biomes O' Plenty IDs are hard-coded.

Every registered biome receives a generated page in Rivencraft's Biome or Cave Biome creative tab, and in JEI when JEI is installed. Cave-tagged, Nether-tagged, and TerraBlender Nether-region biomes go in the Cave Biome tab. Existing vanilla page IDs such as rivencraft:biome/desert are unchanged; modded biome IDs include their namespace, for example rivencraft:biome/example/orchard for a biome named example:orchard. Authoring still validates the exact biome registry key. New Age plans freeze the selected biome IDs, distribution, and seed, so a reload with the same mods retains the result. If a modded biome later disappears, the Age loader warns and uses an eligible fallback for that load without rewriting its frozen plan. Restore the mod to recover the authored biome. Do not remove biome mods from an existing play world without a backup.

Compatibility matrix

Setup Expected result Validation
Rivencraft without TerraBlender Vanilla biome pages and Age generation remain functional; no TerraBlender classes load on the core path. Default GameTest server and build.
Rivencraft with TerraBlender 4.1.0.8, no biome addon Same baseline pool; default TerraBlender regions add no modded biome IDs. GameTest server with -PwithTerraBlender=true.
Rivencraft + TerraBlender + Biomes O' Plenty 1.21.1 BOP registry biomes appear as distinct Biome pages, with Nether-region pages in the Cave Biome tab. Its Overworld regions can enter composed standard/sky-island Age pools; its Nether regions can enter Cave Age pools. In-game check below; this combination is not bundled in automated tests.
TerraBlender present but its region API cannot be read Log one warning and use Rivencraft's normal biome pool. Guarded adapter fallback; intentionally not forced by GameTest.

In-game check requested for Biomes O' Plenty

Use a new test world with compatible NeoForge 1.21.1 builds of TerraBlender and Biomes O' Plenty installed on both sides.

  1. In the Rivencraft Biome and Cave Biome Pages creative tabs (and JEI, if installed), find at least one BOP Overworld biome and one BOP Nether biome, respectively. The page tooltip should identify the biome and not show an unresolved symbol.
  2. Bind a Descriptive Book with a Link Panel, Standard Terrain, a two-biome distribution page, and two different BOP Overworld biome pages. Travel to the Age and confirm both named biomes can occur. Reopen the same world and confirm the Age still uses the same authored biome pool.
  3. Bind a second book using Cave Terrain and a BOP Nether biome page. The Binder must accept the page, and the resulting Cave Age must use the selected Nether biome rather than rejecting it as non-cave.
  4. Separately, run Rivencraft without TerraBlender and confirm a Link-Panel- only random Age can still be created and entered. Do not reuse the BOP test world for this absence check.

The previous broad registry-enumeration GameTest stalled in the test server, so the BOP-specific and client-side checks are deliberately handed off for manual testing instead of retaining that stalled test.