Port authored Age features and Star Fissures to 26.3 beta
Build / build (push) Canceled after 0s

Advance to 1.0.1.54-beta.1 after player validation. Port material, vegetation, lake, terrain-volume, crystal, Dense Ores and fissure features with saved plans. Update beta documentation and release notes.

Refs #98, #104
This commit is contained in:
dnorberg committed 2026-11-02 01:51:20 -05:00
1 parent d75154fa9b
commit c223f3fdca
37 files changed
+2559 -193

No files matched your search

+162
View File
@@ -522,6 +522,165 @@ terrain, biome, and structure generation. Cave and Void are intentionally
excluded until their feature placement rules are ported. This is not yet the
full 1.21.1 feature grammar or instability system.
The local `1.0.1.42-beta.1` follow-up resolves unmodified Rocks to a
seed-shuffled, full-block material and accepts up to 32 ordered Rocks pages.
Each page adds an independent, deterministic surface placement attempt.
Explicit Block modifiers still bind only to the immediately following Rocks
page. The material sequence persists in the Age index; the codec also reads
the single-material format from the previous beta. The remaining feature
families and instability scoring are not yet ported.
The local `1.0.1.43-beta.1` slice uses 26.3's `minecraft:forest_rock`
placed-feature rules and `BlockBlobFeature` for authored Rocks, supplying the
Age's selected material and removing only the vanilla biome filter. This
replaces the port's temporary 3×3 pile algorithm and follows the 1.21.1
generator's authored-placement approach. It affects new chunks only.
The local `1.0.1.44-beta.1` slice extends this Age-scoped feature wrapper to
Flowers, Trees, and Huge Trees. Ordered authored pages retain independent
attempts and use vanilla 26.3 placed-feature rules after biome decoration.
The vegetation plan is persisted alongside terrain, biome, and Rocks plans;
the dedicated-server smoke compares generated flowers and logs against a
same-seed Flat control and checks persistence after restart.
The local `1.0.1.45-beta.1` slice adds authored Dungeons separately from
surface vegetation. Its 26.3 placed-feature JSON mirrors the 1.21.1 eight
monster-room attempts over the world height; ordered duplicate pages add
attempts. The count persists in the Age index and generator codec. The server
smoke creates and samples a dungeon Age, counts monster spawners across a
4×4-chunk area, and verifies the count after restart. Room appearance and
normal book authoring remain in-game checks.
The local `1.0.1.46-beta.1` slice ports Surface Lakes, Deep Lakes, and Small
Lakes, including ordered Fluid modifiers. The 26.3 LakeFeature retains its
vanilla shape and replacement predicates while using the Age's frozen fluid
provider. Surface placement keeps Rivencraft 1.21.1's one-in-twelve rarity;
underground lakes use vanilla placement. Repeated unmodified pages resolve
their fluids independently from a seeded, shuffled source-fluid pool. Lake
plans participate in restore, unload/reload, reseed, and retirement rollback.
The server smoke compares water generation against a same-seed control and
checks explicit/random plans and fluid blocks across restart.
The local `1.0.1.47-beta.1` slice adapts the 1.21.1 FloatingIslandFeature
algorithm to 26.3 chunk access and the biomes already assigned to each chunk.
It retains source range 3, one-in-128 candidate rarity, Y=168..215 center
selection, radii 24..41, coordinate-noise contours, air-only filling, and the
biome-dependent soil cap. It supports Flat/Void in addition to noise terrains;
Block modifiers and independent seeded random materials are frozen in an
ordered terrain-feature plan. Rocks and islands share material resolution.
26.3's final NoiseBasedChunkGenerator merges noise, surface, and carving and
does not expose a pre-surface hook. This port appends islands to the completed
terrain future before decoration; existing terrain is preserved, but base
carvers do not cut the added islands. The smoke verifies actual high-altitude
material placement on noise, Flat, and Void terrain, distinct random material
choices, authored biome preservation, and block fingerprints across restart.
The local `1.0.1.48-beta.1` slice ports TendrilFeature's Legacy-derived
branching solid volumes using the 26.3 chunk mutation and height APIs. Source
range 8, rate 15, size 18, nested node/height selection, branch splitting, and
bedrock preservation match the 1.21.1 implementation. Chunk-local writes and
neighbor-source seeds preserve continuous paths across chunk borders.
The existing terrain-feature plan now supports Tendrils on all terrain types,
including Cave and Void. Compilation retains mixed feature order and applies
the 32-occurrence limit per feature. Block modifiers and seeded random choices
use the shared solid-material resolver; existing save/lifecycle handling carries
both feature types. World validation is manual at the player's request; no
development server is started for this slice.
The local `1.0.1.49-beta.1` slice ports the Legacy-derived Skylands filter
from Rivencraft 1.21.1 with 26.3 chunk height/mutation APIs. The cutoff uses
the same salt, seven octaves, initial cell width 128, amplitude 12, and base
Y=76. Solid/liquid removal and world-height coverage match the reference.
It runs once after base terrain construction and before authored solid
volumes, retaining the feature ordering used by the 1.21.1 implementation.
Skylands is a material-free feature, accepted alongside every terrain type.
Repeated pages retain the same idempotent effect. The existing terrain-feature
plan stores an optional Skylands flag, defaulting to false for earlier beta
Ages; no separate backend/lifecycle path is introduced. A Skylands-only plan
can contain no material choices. Build and static checks are automated; world
generation and restart validation are left to the player.
The local `1.0.1.50-beta.1` slice adapts the 1.21.1 SpheresFeature and
SpikesFeature to 26.3. Spheres retain their source range 8, five-percent
source chance, nested Y selection starting at 32, node geometry, and bedrock
protection. They run after the base terrain/Skylands filter and work on every
terrain type. Spikes retain their one-in-18 chunk chance, 6..37 height roll,
width 1..4, solid-footprint checks, and chunk-local writes during decoration.
They remain unavailable on Cave and Void terrain, matching 1.21.1.
Both page types use ordered saved solid-feature choices, preceding Block
modifiers, and independent seeded materials/occurrences. No backend lifecycle
branch or generated artwork is added. Compilation and static review are the
automated checks; the player handles generation and restart validation.
The local `1.0.1.51-beta.1` slice ports ObelisksFeature using the 26.3 chunk
coordinates and world-height APIs. The site salt, seed mixing, one-in-128
chance, chunk-local site selection, 4×4 plinth, and 2×12×2 shaft match 1.21.1.
Every footing column must be sturdy, dry, and free of block entities; the
base surface can vary by at most two blocks and the full shaft must be open.
No partial structure is written when a placement check fails.
The page joins the existing material-feature plan and shared material resolver.
It runs during surface decoration, with its own occurrence counter, on all
surface terrain types including Flat; Cave and Void remain unsupported.
Spikes and Obelisks use shared stage/restriction classification. Build/static
checks are automated; generation and restart checks remain with the player.
The local `1.0.1.52-beta.1` slice ports CrystalFormationsFeature directly
from 1.21.1 with only registry, ChunkPos, and height API substitutions. It
retains the site salt, one-in-fifteen rarity, 3×3 ground/clearance checks,
three-block center height, randomized outer heights, budding hearts, and
initial small buds. Existing blue crystal growth, sprites, drops, and sounds
are reused without adding assets.
Crystal Formations is an ordered surface feature with fixed crystal material,
not a consumer of Block/Fluid modifiers. It shares the existing saved feature
plan and surface-terrain restrictions (including Flat, excluding Cave/Void),
with independent occurrence seeds and the current 32-page cap. No backend
lifecycle changes are needed. The Obelisks slice passed the player's in-game
check; Crystal Formations build/static checks pass, with generation, growth,
and restart validation handed to the player. No test server is started.
The local `1.0.1.53-beta.1` slice adapts 1.21.1 AgeDenseOres to modern
`AbstractOreFeature` targets and `FeaturePlacer.placeWithBiomeCheck`. It keeps
the common ore tag/name fallback, explicit `rivencraft:dense_ores` placed-
feature opt-in tag, nearby biome discovery, stable registry-ID ordering,
and independent per-occurrence seeds. Registered modded ore features remain
eligible without depending on an ore-providing mod. Biomes and ore placements
are collected once per chunk rather than once per repeated page.
The optional Dense Ores count is saved in the existing terrain-feature plan;
older plans default to zero. Grammar accepts 1–32 occurrences on noise terrain
(including Cave), rejects Flat/Void and material modifiers, and checks explicit
biome pools for at least one eligible ore feature. No extra lifecycle path or
asset is introduced. Random feature selection and instability remain later
port work. Crystal Formations passed the player's in-game check; this slice
passes build/static checks, with ore generation and restart validation manual.
The local `1.0.1.54-beta.1` slice ports Star Fissures. Its footprint matches
1.21.1 exactly (including Legacy attribution); carving uses the dimension's
minimum Y, clears fluids, and protects Cave terrain's roof. The authored flag
is optional in the existing feature-plan codec. Duplicate pages retain the
1.21.1 single-fissure result; all terrains are accepted, with no material
modifier. Random feature selection is not introduced in this slice.
First arrival generates the fissure and stores its spawn/completion in per-Age
SavedData. Re-entry/restart does not repeat carving; an obstructed saved arrival
is rechecked for safe footing. The return block ports modern entity-inside and
TeleportTransition APIs, has a registered Rivencraft block-entity type, and
uses Minecraft's starfield renderer with 1.21.1 face offsets. Shared Overworld
spawn safety search and fallback match 1.21.1, rather than respawning at a bed.
The existing fissure OGG/model are reused. Client renderer registration stays
client-only; the block has no item/drop and is inert in the Overworld.
Dense Ores passed the player's in-game check. Build, footprint comparison,
resource packaging, and static checks pass for this slice. Generation, visual
rendering, actual return travel, and restart checks are left to the player;
no development server is started.
## Verification of this first slice
The 1.21.1 `compileJava` and `build` tasks passed offline after the backend
@@ -530,3 +689,6 @@ extraction. The GameTest server ran 93 tests; 92 passed, while
desks instead of one. That desk failure is outside the dimension-backend edit
and must be resolved or rechecked before a release. The 1.21.1 `build` task
passed again after the 26.3 registry slice.
On 2026-11-01, the default 1.21.1 GameTest server was rerun and all 93
required tests passed, including the desk test. Issue #97 was then closed;
remaining 26.3 parity work stays under #98–#104.