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

64 lines
4.2 KiB
Markdown

# 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](https://modrinth.com/mod/terrablender/version/4.1.0.8) and
[region API](https://github.com/Glitchfiend/TerraBlender/blob/1.21.1/Common/src/main/java/terrablender/api/Regions.java)
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.