Minecraft 26.3 beta port workspace
This is an experimental beta port for issues #97–#104, not gameplay parity with the Minecraft 1.21.1 release. The 26.3 backend persists separate Ages and their seeds. Books, the Book Binder, and the Ink Mixer work, and the Binder can author Standard, Amplified, Island, Flat, Void, or Cave terrain with supported biome-distribution pages, selected material/vegetation/structure features, and independent Age weather and lighting, multiple authored or seeded celestial bodies and eclipses, biome/material completion, and random features/structures. Instability, crystal portals, discovery/stations, writing recovery and optional integration parity remain unfinished. The latest published beta is 1.0.1.98-beta.1. Use a test world and keep a backup; do not substitute this JAR for the 1.21.1 mod or import 1.21.1 saves.
The entries below record how the port was built, including earlier alpha-only limitations that were addressed by later slices.
The creative tab contains the two Books, Crystal Block and Crystal Shard; the player verified these in game. Unbound Linking Books use the Legacy sprite, and four Crystal Shards craft into a Crystal Block; both were also verified in game. The current local iteration adds Budding Crystal and all four blue crystal growth stages with vanilla-style harvesting. Natural crystal formation generation is not yet ported; use Creative or commands to obtain a Budding Crystal for this test. The player verified the growth chain in game. The next local slice adds the Link Panel Page as a separate creative entry, using the existing item texture. Blank Pages remain unavailable in Creative; the player verified the Link Panel's appearance in game. Ink Vials now use the existing crafting recipe and animated sprite. With paper in the other hand, an Ink Vial prepares a Link Panel for two of its sixteen ink uses, as in the current 1.21.1 default. The player verified the Ink Vial interaction in game. Symbol writing remains unported. A prepared Link Panel can now be combined shapelessly with leather to craft an unwritten Linking Book, as in 1.21.1. This custom recipe rejects a blank Page and extra ingredients. The first Book Binder slice now assembles random-Age Descriptive Books from leather and a Link Panel. Authored pages remain later.
The next local 1.0.1.10-alpha.1 slice exposes all eight combinations of
plain, Disarm, Maintain Momentum, and Intra-Linking Link Panels in the Link
Pages creative tab. Leather crafting preserves those flags on the Linking
Book. Intra-Linking permits same-dimension travel; Maintain Momentum rotates
horizontal speed to the destination yaw; Disarm leaves the player's inventory
at the departure point after a successful teleport. These are development
variants until the Ink Mixer is ported; other Link Panel modifiers are not
implemented in 26.3. The player passed this modifier slice in game.
The local 1.0.1.11-alpha.1 slice adds a craftable Book Binder with persistent
leather, Link Panel, and output slots. Name an Age in its GUI and press Bind;
the server creates a random prototype Age and places its completed Descriptive
Book in the output. Disarm and Maintain Momentum carry from the panel into the
book; Intra-Linking has no effect on Age creation. Symbol-page authoring and
the Ink Mixer remain unported. This slice passes the build and dedicated-server
smoke test. The player passed crafting and travel in game, but found that E
closed the focused title field and the provisional layout did not match the
existing 1.21.1 Binder GUI.
The local 1.0.1.12-alpha.1 follow-up reuses the 1.21.1 Binder layout: title
bar, cover and output at opposite sides, and a central Link Panel page strip.
The title persists in the block, the missing-panel cue pulses red, and a
focused title field consumes inventory/hotbar keys. Click the output once to
bind, then click again to take the completed book. Authored symbol strips and
the full 1.21.1 Binder grammar remain unported. This same slice also ports the
1.21.1 Ink Mixer block, menu, animation, modifier additives, 16-ink-per-panel
cost, and automatic vial exchange. The creative tab includes it and its
vanilla-shaped recipe is available. This slice needs an in-game Binder visual/
keyboard check and Ink Mixer interaction check.
The local 1.0.1.13-alpha.1 iteration makes Binder assembly place the new
Descriptive Book directly on the cursor with one click. It also renders the
five-page strip from the 1.21.1 GUI and refreshes the Mixer's virtual result
in the same server click that changes paper or ink. The Mixer now consumes
one ink unit and one paper per Link Panel (16 panels per full vial); additive
chances reset when a panel is taken. In-game retest of the first-update
behavior and Binder visual/click flow is pending.
The local 1.0.1.14-alpha.1 follow-up compares the current 26.3 Binder against
the new dev-image sequence. The Binder no longer paints five permanently empty
pages: the first strip page appears when a Link Panel is inserted or carried,
and the missing-panel cue remains above it. Clicking that page inserts/removes
the Link Panel using the same server-owned cursor flow as 1.21.1. Its tooltip
also shows the stored panel. Multi-page symbol writing and strip scrolling
cannot be exercised yet because symbol pages are still unported to 26.3.
The local 1.0.1.15-alpha.1 Binder polish uses the Link Panel's actual 16×16
item icon for the missing-panel cue instead of a full-size page sprite. The
red pulse and tooltip remain confined to that icon.
The local 1.0.1.16-alpha.1 slice adds the bundled 1.21.1 symbol-page
identities to the 26.3 creative menu, grouped by category. Their names and
descriptions are reused from the 1.21.1 translations, and the Page item now
persists each symbol ID. These pages currently use the generic symbol-page
artwork; the Legacy-style runtime glyph compositor has not been ported.
They cannot yet be inserted into the Binder or change Age generation. This is
the page-data foundation for the next authored-writing slice.
The local 1.0.1.17-alpha.1 follow-up derives biome pages from the active
26.3 biome registry instead of only the older bundled list. It excludes the
TerraBlender staging placeholder and separates cave/Nether biomes. Full-block
materials and true source-fluid blocks also receive registry-derived pages,
covering eligible new and modded blocks. Five 26.3 feature symbols cover
poplar trees, fallen poplars, shelf mushrooms, red shrubs, and abandoned
camps. These feature pages are identities only until their Age-generation
handlers are ported. Biome, material, and feature pages still use generic
artwork and cannot yet be placed in the Binder.
The local 1.0.1.18-alpha.1 follow-up restores the 1.21.1 animated redaction
for Corrupted Page names and descriptions. It does not yet port the dynamic
glyph artwork used for other symbol pages.
The local 1.0.1.19-alpha.1 slice ports the runtime glyph compositor for
symbol Page items. It uses the shared Legacy component sheet and page
parchment with a bounded 256-texture client cache; generated textures are
released on resource reload. Registry-derived biome and material pages use
the same deterministic four-word poem pattern as 1.21.1. No per-symbol PNGs
are generated in the source tree. Binder insertion and authored Age generation
are still unported.
The local 1.0.1.20-alpha.1 visual follow-up enlarges symbol artwork on Page
items, slightly thickens the component strokes, and centers number glyphs at a
larger size so they remain readable in inventory and creative-menu icons.
The local 1.0.1.21-alpha.1 slice ports the Binder's ordered, scrollable
symbol-page strip. Pages persist in its block inventory and can be inserted,
removed, and moved via the cursor or shift-click. A Binder with symbol pages
cannot yet produce a book: authored Age compilation is the next port step, and
silently producing a random Age would consume the player's writing incorrectly.
The local 1.0.1.22-alpha.1 visual follow-up gives large Binder pages the
transparent, full-size Legacy glyph composition. Item icons retain their
separate parchment-backed, reduced-size artwork.
The local 1.0.1.23-alpha.1 follow-up places Binder glyph overlays in a later
26.3 GUI stratum than the page atlas, preventing texture batching from drawing
the opaque page backgrounds over the dynamic artwork.
The local 1.0.1.24-alpha.1 follow-up renders Binder page glyphs through
their working special item model, scaled to the page thumbnail. Direct GUI
blitting of the generated texture remained blank in the 26.3 client.
The local 1.0.1.25-alpha.1 follow-up marks temporary Binder preview stacks
for glyph-only special-model rendering. The full-size transparent artwork now
uses the working item pipeline without drawing a second, smaller page outline.
The local 1.0.1.26-alpha.1 corrects the temporary preview component's codec
registration, which NeoForge 26.3 requires during bootstrap.
The local 1.0.1.27-alpha.1 slice applies the first authored Age subset:
Standard terrain plus at most one Biome page. The selected biome is persisted
with the Age and used by a fixed-biome Overworld noise generator on creation
and reload. Ordered page IDs are stored on the finished book. Other page
combinations remain in the Binder and cannot yet be assembled, preventing
silent loss of unsupported writing. Multi-biome distribution, other terrain
profiles, and feature/material pages still need their 26.3 generation ports.
The 1.0.1.28–1.0.1.32 slices add Tiled, Grid, Native, and five scaled
biome distributions; multiple authored Biome pages; Amplified and Island
terrain; and saved terrain/biome plans across reload. A Binder or Ink Mixer
beside another block no longer hides that block's faces. Unsupported authoring
still stays in the Binder rather than silently producing an incorrect Age.
The local 1.0.1.33-beta.1 slice adds Flat and Void terrain to Binder
authoring. Flat uses vanilla's superflat layers; Void has no generated floor
and uses the selected Biome for its environmental rules. Each accepts zero or
one authored Biome page. Unsupported multi-biome Flat/Void books remain in the
Binder until their custom generator is ported. The operator probe can create
test Ages with rivencraft_port age create <name> <seed> flat|void.
The local 1.0.1.34-beta.1 follow-up starts Flat's solid layers at Y=0
(bedrock at 0, dirt at 1–2, grass at 3) and lands players at the ground surface
instead of creating an elevated fallback platform. This affects newly
generated Flat chunks; previously generated Age chunks are not rewritten.
The local 1.0.1.35-beta.1 follow-up enables biome decoration on newly
generated Flat chunks, allowing the selected biome's trees, vegetation, and
other placed features to appear on the Flat surface. Void remains undecorated.
The local 1.0.1.36-beta.1 slice accepts multiple Biome pages with Flat and
Void terrain. It ports the 1.21.1 authored-biome Flat generator to 26.3, so
Tiled, Grid, and scaled regions affect climate in both terrain types and
surface decoration in Flat. Void continues to generate no floor or biome
decoration. The operator-only age create_multi probe creates two-biome test
Ages for the dedicated-server smoke test.
The local 1.0.1.37-beta.1 slice adds the Cave terrain page to Binder
authoring. It uses Minecraft's caves noise settings, accepts Cave and Nether
biome pages (including multi-biome distribution), and searches below Y=64 for
a safe arrival instead of landing on the roof. The 26.3 vanilla Cave preset
defaults to water below Y=32, so this port derives a dry Cave setting with
air as its default fluid and the sea level below the world floor. This applies
to newly generated Cave chunks; it does not drain existing chunks. Cave-specific Nether surface
materials from 1.21.1 are not ported yet. The dedicated-server smoke now
creates and reloads Cave Ages alongside the other terrain families.
The dry-Cave follow-up is packaged as 1.0.1.38-beta.1; no 26.3 release is
published until the in-game check passes and publication is explicitly requested.
The local 1.0.1.39-beta.1 follow-up rejects fluid at both feet and head
height during safe-landing searches. It also refuses to carve the fallback
platform into submerged space if no dry footing can be found.
The 1.0.1.40-beta.1 port slice seeds terrain and biome selection for
Descriptive Books with no authored symbol pages. It uses the same terrain and
biome-controller rank weights as the 1.21.1 line, freezes the resulting plan
in the Age index, and accepts the result after restart. The operator-only
age create_random <name> <seed> probe exercises this path. Random feature,
sky, weather, and instability choices are not yet ported; this slice covers
terrain and biomes only.
The 1.0.1.41-beta.1 slice establishes an Age-scoped decoration wrapper
for 26.3 and accepts one Block material page immediately before a Rocks feature
page. Newly generated surface chunks place small rock clusters made from that
block without modifying the shared biome registry. The selected block and
generator survive a restart. Cave and Void terrain remain unsupported for this
first surface-feature path; unsupported combinations stay in the Binder.
Random feature selection, unpaired materials, duplicate feature pages, and
instability scoring remain future port steps.
The local 1.0.1.42-beta.1 follow-up lets a Rocks page choose a deterministic
full-block material when no Block page precedes it. Repeated Rocks pages now
add independent placement attempts (up to 32) instead of being rejected. The
ordered material choices are frozen in the Age index and restored after a
restart; old single-material beta Ages still load. An explicit Block page
must still directly precede the Rocks page it modifies. Most other feature
pages and material-feature pairings remain unported.
The local 1.0.1.43-beta.1 slice replaces the temporary 3×3 Rocks piles
with Minecraft 26.3's forest-rock block-blob feature and its placement rules,
matching the 1.21.1 Age feature path more closely. The selected material and
repeat count still come from the frozen Age plan. Only newly generated chunks
use the new rock shape; previously generated chunks remain unchanged.
The local 1.0.1.44-beta.1 slice ports ordered Flowers, Trees, and Huge
Trees pages to surface Ages. Their 26.3 vanilla placed features run after
biome decoration, with the Age's own seed; repeated pages make independent
placement attempts. Cave/Void terrain and cave/Nether/End biome pools are
not treated as surface vegetation. The feature plan survives server restart;
already generated chunks do not gain new decoration.
The local 1.0.1.45-beta.1 slice ports the Dungeons page for Standard,
Amplified, and Island noise terrain. It uses the 1.21.1 placement definition
(eight monster-room attempts per page per chunk across the build height),
stores repeat count with the Age, and rejects Dungeons pages on Flat, Void,
or Cave terrain. New chunks only; existing chunks are not regenerated.
The local 1.0.1.46-beta.1 slice adds Surface Lakes, Deep Lakes, and Small
Lakes on surface noise terrain. A Fluid page immediately before a lake page
selects its fluid. Unmodified pages choose a seeded fluid from the same source-
fluid pool exposed in Creative, with repeated choices and their order saved
with the Age. Surface/Small Lakes retain the 1.21.1 one-in-twelve attempt rule;
Deep Lakes retain vanilla underground placement. These pages currently require
Standard, Amplified, or Island terrain. Existing chunks do not redecorate.
The local 1.0.1.47-beta.1 slice adds authored Floating Islands alongside
Standard, Amplified, Island, Flat, and Void terrain. A preceding Block page
sets the island core material; otherwise each occurrence resolves a seeded
material from the full-block pool. The 1.21.1 shape, high altitude, rarity,
and biome-dependent grass/dirt cap are retained. Repeated pages use independent
island seeds. Cave terrain remains unsupported for this feature.
26.3 combines base noise, surface, and cave carving in one terrain operation. Floating Islands run after that operation and before decoration, so the added islands are not cut by the base terrain's carvers. The saved feature plan is used again after restart and for new chunks; existing chunks keep their blocks.
The local 1.0.1.48-beta.1 slice adds authored Tendrils on every terrain
type, including Cave and Void. A preceding Block page selects the material;
unmodified occurrences resolve seeded materials from the full-block pool.
Repeated pages use independent paths, with up to 32 occurrences per feature.
Mixed Floating Islands/Tendrils retain their authored order in the saved plan.
Tendrils retain the 1.21.1 branching path algorithm, source rates, and vertical distribution concentrated below Y=128. They can replace existing terrain while preserving bedrock. As with Floating Islands, they run after 26.3's combined terrain operation and before decoration. Build checks are automated; in-game generation, appearance, and restart validation are handed to the player.
The local 1.0.1.49-beta.1 slice adds the Skylands feature page. Its seeded
seven-octave filter removes base terrain at/below a varying cutoff near Y=76
and removes liquid above it, preserving the upper solid terrain. It accepts
all terrain types and no Block modifier. On low Flat terrain this removes
the base layers; on Void it leaves the empty base unchanged.
The filter runs once before authored Floating Islands and Tendrils, matching 1.21.1; duplicate Skylands pages do not compound the filter. Its flag is saved with the terrain-feature plan. Existing chunks are unchanged. Try Amplified terrain for a clear visual check; generation and restart validation are manual.
The local 1.0.1.50-beta.1 slice ports Spheres and Spikes using the 1.21.1
generation algorithms. Spheres add solid nodes on all terrain types, including
Cave and Void, while preserving bedrock. Spikes require solid surface terrain:
Standard, Amplified, Island, or Flat. Their circular footprint stays in one
chunk and must have solid ground beneath every column.
Each page accepts a preceding Block material or resolves a seeded random material when unmodified. Repeated pages have independent placement seeds, up to 32 per feature. Spheres run during terrain construction, after Skylands; Spikes run after biome decoration. Both use the existing saved solid-feature plan. New chunks only; in-game appearance and restart checks remain manual.
The local 1.0.1.51-beta.1 slice ports Obelisks. It preserves the 1.21.1
one-in-128 candidate chance per chunk/occurrence, 4×4 plinth, and 2×2 shaft
extending 12 blocks above it. Placement requires dry, sturdy ground across
the base, at most two blocks of surface variation, and clear/replaceable
space for the complete structure. The footprint stays within its chunk.
Obelisks support Standard, Amplified, Island, and Flat terrain. A preceding Block page sets their material; otherwise a seeded full-block material is selected. Repeated pages make independent attempts, up to 32 occurrences. Spikes and Obelisks share surface-stage classification and preserve their authored order within that stage. World and restart validation are manual.
The local 1.0.1.52-beta.1 slice ports Crystal Formations using the 1.21.1
surface-mound algorithm and the existing blue crystal blocks. Each occurrence
has a one-in-fifteen candidate chance per chunk; suitable dry, nearly level
ground produces a 3×3 mound with budding crystal and occasional small buds.
The existing budding blocks continue growing crystals through random ticks.
Crystal Formations accepts Standard, Amplified, Island, and Flat terrain, but not Cave/Void terrain or Block/Fluid modifiers. Up to 32 repeated pages make independent attempts. The ordered feature plan survives restart, and only newly generated chunks receive formations. For a quick manual test, bind a Flat/Plains Age with several Crystal Formations pages, inspect the blue mounds and bud growth, then revisit after restarting the world.
The local 1.0.1.53-beta.1 slice ports Dense Ores. Each page replays eligible
ore placements from the Age's actual biomes, preserving their height ranges,
replacement rules, and biome filters. Vanilla and modded ore features are
recognized by their ore targets; custom placements can opt in through the
rivencraft:dense_ores placed-feature tag, just as in 1.21.1.
Up to 32 pages add independent passes on Standard, Amplified, Island, or Cave terrain. Flat/Void and Block/Fluid modifiers are unsupported; an explicitly authored biome pool must contain at least one ore-producing biome. The count survives restart. Only new chunks gain extra ore, and this slice does not yet port the later instability system or random-Age feature selection.
For manual validation, create a Standard/Plains Age with several Dense Ores pages and inspect underground ore abundance, then restart and explore more chunks. A Cave Age with a Nether biome can check Nether ore placements too.
The local 1.0.1.54-beta.1 slice ports the Star Fissures page. On first book/
operator arrival, it carves the 1.21.1 Legacy-shaped rift near the arrival chunk
and places a starfield portal at the dimension's minimum Y. Cave terrain keeps
its bedrock roof. All terrain types are supported; repeated pages still create
one fissure, and Block/Fluid modifiers are not accepted.
The first arrival and completed generation are saved per Age, so revisits and restarts do not recarve the rift. Touching its bottom returns entities to a safe location near the shared Overworld spawn, not a bed, with the original fissure sound. The portal is unobtainable and inert in the Overworld. Random-Age feature selection remains later work; author a Star Fissures page to test this slice.
For manual validation, create a Flat/Plains Age with Star Fissures. Look near the arrival point (generally east/south), descend through the rift, and touch the starfield to return. Re-enter after restarting; check that the same fissure and its portal still work. A Cave Age checks that carving leaves the roof intact.
The local 1.0.1.55-beta.1 slice adds authored Villages, Mineshafts, and
Strongholds. Repeated pages (up to 32 per type) scale the registered placement
using the 1.21.1 frequency/spacing and ring-count rules. Copies are Age-local:
the Overworld's placements and biome source are not modified. Authored
structures can bypass their usual biome eligibility without changing the
terrain biome; their instability cost remains pending with the instability port.
Villages and Strongholds allow surface noise terrain and Flat, but not Cave or Void. Mineshafts allow noise terrain including Cave, but not Flat or Void. These pages do not accept Block/Fluid modifiers. Their ordered counts persist in the feature plan. In books using these structure pages, unselected sets from these three families are disabled; other structure families and random feature selection remain later port work. Earlier books without this new structure plan retain their existing native structure behavior.
For manual checks, bind a new Standard/Plains Age with Villages, Mineshafts,
and Strongholds, then use /locate structure minecraft:village_plains,
/locate structure minecraft:mineshaft, and
/locate structure minecraft:stronghold to inspect generated structures.
Compare one page with several copies in a different Age, and restart/revisit.
Flat/Plains with Villages and an otherwise incompatible surface biome with
Villages provide separate terrain and biome-override checks.
The local 1.0.1.56-beta.1 follow-up fixes authored structures outside their
normal biomes. Build 55 only bypassed the final biome check; 26.3's jigsaw
placement can reject a whole biome column earlier. The override now supplies
the generation context's biome predicate before either check, only for the
explicitly authored structures in that Age. Terrain/height/geometry rules and
unrelated structures keep their normal checks.
Test with a new Standard or Flat Age using a normally unsupported village
biome, such as The End, plus a Villages page. Multiple copies increase density.
Use /locate structure #minecraft:village rather than selecting only the
Plains variant: an override Age can choose other village styles. Old chunks
that already rejected their structure attempt are not regenerated; existing
build-55 Ages can also test the fix in previously unexplored chunks.
The local 1.0.1.57-beta.1 slice adds the remaining 1.21.1 authored structure
families: Nether Fortresses, Bastions, Trial Chambers, Buried Treasure,
Shipwrecks, Ocean Ruins, Pillager Outposts, Ruined Portals, Nether Fossils,
Ancient Cities, and Trail Ruins. It also enables the existing 26.3-only
Abandoned Camps page using Minecraft's registered camp set and variants.
All 15 supported structure-set pages share saved counts, biome overrides, and repeated-page density scaling (up to 32 per type). Fortress and Bastion sets reuse the separate 1.21.1 placement definitions; the combined vanilla Nether set is disabled for authored structure plans so the pages stay separate. Unselected supported families are gated in these plans. Already generated chunks and Ages without an authored structure plan keep their existing path.
Only Villages/Strongholds support Flat; none support Void. Fortress, Bastion, and Nether Fossils require Cave terrain. Villages/Strongholds, Buried Treasure, Shipwrecks, Ocean Ruins, Outposts, Trail Ruins, and Abandoned Camps require surface terrain. Mineshafts, Trial Chambers, Ancient Cities, and Ruined Portals allow surface noise or Cave terrain. Physical terrain/height checks still apply even when the authored page overrides biome eligibility. Instability penalties and random selection of these features are not part of this slice.
For a quick in-game check, author a new Standard Age with Trial Chambers,
Trail Ruins, and Abandoned Camps. Use /locate structure minecraft:trial_chambers,
/locate structure minecraft:trail_ruins, and
/locate structure minecraft:abandoned_camp_forest to inspect actual generation.
Separately, test a Cave/Nether Wastes Age with Fortress and Bastion pages
(/locate structure minecraft:fortress and
/locate structure minecraft:bastion_remnant). Repeated pages and restart/
new-chunk generation remain useful checks. Structures can still fail when
their geometry or required terrain is unavailable.
The local 1.0.1.58-beta.1 slice enables Caves and Ravines feature pages.
They add carving to the chosen noise terrain (Standard, Amplified, Island,
or Cave); they are not aliases for the Cave terrain page. Flat/Void and
Block/Fluid modifiers remain unsupported, matching the 1.21.1 feature rules.
Authored paths retain 1.21.1's source range and seeded salts, using 26.3's registered cave/Nether-cave/canyon carvers. Nether-biome sources select the Nether cave carver and skip Ravines. The paths merge into the native carving mask before Minecraft applies aquifer, replacement, and surface rules; no second approximation carves raw air after terrain generation. Biomes are not replaced. The page list is saved, and old plans default to no extra carving.
Duplicate pages are accepted up to 32 per type, but repeat the same seeded pattern in 1.21.1; this port skips those redundant passes rather than multiplying carving density. Random feature selection and instability remain pending. New chunks only. For manual testing, author a Standard/Plains Age with one Caves page and one Ravines page and inspect underground in Spectator mode. Restart and explore more chunks. A separate Cave/Nether Wastes Age with Caves checks the Nether variant without altering its biome distribution.
The local 1.0.1.59-beta.1 slice audits page presentation for the current port.
Each Symbol Page now reports whether its effect is implemented. Unported pages
have red-tinted item artwork and a red Binder page background, plus a red status
line. Supported pages retain their normal artwork. This indicates port
availability only: supported pages in an invalid order, terrain combination,
or excessive quantity are not individually tinted red. Link Panels are unchanged.
The stale Standard/one-Biome message is removed. Structure descriptions now describe authored biome overrides rather than falsely requiring vanilla biome eligibility. Material pages explain the immediate-before-feature requirement; Flat/Caves/Ravines/Floating Islands descriptions reflect the current rules. These overrides are specific to the 26.3 language file and do not change 1.21.1. No new generation effect is introduced in this UI slice.
For manual validation, compare a working Villages or Caves page with an unported celestial or lighting page in Creative inventory and the Binder. Only the latter should be red; supported Block/Fluid modifiers and biome controllers should stay normal even though they need other pages.
The local 1.0.1.60-beta.1 slice implements Poplar Trees, Fallen Poplar Trees,
Red Shrubs, and Shelf Mushrooms. They use the existing saved vegetation plan,
ordered attempts, surface-biome rules, and combined 32-vegetation-page limit.
They accept Standard, Amplified, Island, and Flat terrain, but not Cave/Void
or Block/Fluid modifiers. The four pages now show as supported, without a red tint.
Poplar Trees uses the vanilla red/orange/yellow leaf-litter tree variants with their relative Dappled Forest weights and six attempts per page per chunk; it does not also select spruce or fallen trees. Fallen Poplar Trees makes one surface attempt per page, using the vanilla fallen-tree feature, decorators, and sapling survival rules. Red Shrubs uses the vanilla patch placement. All still require suitable ground and space; authoring does not bypass those requirements, and existing chunks are not redecorated.
Shelf Mushrooms applies Minecraft's standing/fallen-log decorator to existing log groups, not a new tree feature. It can decorate natural trees or logs from earlier authored tree pages; no suitable logs means no mushrooms. The vanilla side/age/spacing and water-avoidance logic is retained. Writes stay within the current chunk and require valid support. Consecutive mushroom pages reuse the host scan; adding trees invalidates the cached host list for subsequent pages.
For manual testing, bind a new Flat/Plains Age with Poplar Trees, Fallen Poplar Trees, Red Shrubs, then Shelf Mushrooms. Check leaf colours, fallen trunks, shrubs, and mushrooms on logs. The four pages should no longer be red. Restart, revisit existing terrain, and explore new chunks to check persistence.
The local 1.0.1.61-beta.1 follow-up removes the inappropriate surface-terrain
and surface-biome gates from Shelf Mushrooms only. No tree page is required:
natural logs or generated log Tendrils/Spheres/other features are hosts on
any terrain, including Void and Cave, and in any biome. Other plants keep their
existing terrain/biome restrictions. For example, Void + Oak Log + Tendrils +
Shelf Mushrooms is valid authoring; there must still be exposed log faces.
The mushroom scan now considers log faces throughout the chunk height instead of treating a connected tendril as a standing tree with a small base-height decoration band. Placement retains native replaceability/water checks, valid support, random age, a per-side chance, and spacing checks. It does not grow hosts or continuously decorate player-built logs after chunk generation. Test a new Void Age with the example pages and inspect tendril surfaces.
The local 1.0.1.62-beta.1 sound slice reuses the complete 1.21.1 sound manifest
and all six OGG files directly in the build. Successful Linking/Descriptive Book
travel now plays the normal, Intra-Linking, or Disarm sound at departure and
arrival, with the same modifier precedence and cloud bursts as 1.21.1. Failed
travel stays silent. Star Fissures also play their return sound after arrival,
instead of relying only on audio sent immediately before a dimension switch.
Portal and meteor sound events are bundled for their later gameplay ports;
this does not implement those systems. Binding still uses vanilla page audio.
Manual checks: normal book travel, Intra-Linking, Disarm, rejected travel, and
a Star Fissure return. Existing books/Ages do not need to be recreated.
The local 1.0.1.63-beta.1 slice ports the six active weather pages: Normal,
Fast, Slow, Off, Always, and Storm. One weather page is accepted per book and
its policy is saved in the Age's own data directory. Missing weather pages
currently use Normal; random weather selection is still part of the pending
random-trait port. Cave terrain forces Off, matching 1.21.1. Precipitation
still follows biome temperature and precipitation rules; a desert does not
start showing rain merely because Always or Storm is selected.
26.3 normally shares server WeatherData. Runtime Ages now use an isolated
native WeatherData instance with its own persisted rain/thunder timers. The
weather controller runs before the native cycle, allowing vanilla rendering,
lightning, snow and client dimension-specific packets to handle the result.
Fixed weather is refreshed before its timers expire; Fast and Slow use the
1.21.1 duration ranges and preserve saved timers on reload. Overworld weather
and other Ages are not changed. The vanilla /weather command still targets
the server's global weather, not the independent Age policy.
Operator diagnostics: /rivencraft_port age create_weather <name> <seed> <mode>
creates a Flat test Age; /rivencraft_port age weather_probe <name> reports
its policy, rain/thunder state and timers, data independence, and global state.
For manual testing, bind separate Storm/Always/Off books with Plains, compare
the Overworld, revisit and restart, and check that Cave + Storm remains dry.
The six weather pages should no longer be tinted red. Existing Ages get a
Normal independent cycle; author a new book to select another policy.
The local 1.0.1.64-beta.1 fix corrects the Binder's biome compiler: it now
positively selects biome-category pages instead of treating every page not
in an exclusion list as a biome. Weather pages no longer trigger an unknown
biome lookup. The weather fixture command now exercises the same page compiler
before creating an Age, covering the weather-only symbol list used by a Link
Panel + Storm book. Existing Binder contents can be reused after updating.
The local 1.0.1.65-beta.1 spawn correction removes the Flat-layer shortcut
and heightmap-only choice for non-Cave Descriptive Book arrivals. The search
starts at the actual maximum build height and traces each nearby column down
to its first colliding block, leaves, or fluid. A column without safe dry
footing/headroom is skipped instead of descending through its roof or water
into an underground pocket. Leaves are valid footing; fluids are not.
This also revalidates a stored Star Fissure arrival from above on non-Cave
terrain. Cave terrain retains its Y=64-downward search, and bound Linking
Books retain their exact coordinates. If no natural surface is safe, the
safety platform is placed above the actual highest obstruction (or floor
Y=63 in an empty Void), never buried below it. Plain Flat terrain still lands
on its ground, not an artificially elevated platform. No new Age is required.
Operator-only /rivencraft_port age surface_probe <name> <x> <z> reports the
actual highest obstruction and a safe nearby surface without creating a
platform or teleporting. It can generate chunks while inspecting the region.
The local 1.0.1.66-beta.1 slice ports Normal, Dark, and Bright Lighting.
One lighting page is accepted per book and its choice is saved in the Age
index before catalog publication. Missing lighting currently defaults to
Normal; random lighting selection and Bright's instability cost await those
systems' later ports. Lighting pages should no longer be tinted red.
Normal surface Ages retain the Overworld type. Dark removes skylight with ambient light 0.0; Bright uses ambient light 0.25 and retains surface skylight, matching 1.21.1. Cave + Bright is supported: it has ambient light 0.25 without skylight. Cave Normal/Dark use no skylight and ambient light 0.0. Placed light sources continue working; ambient light is not a placed light level or a guarantee that monsters cannot spawn.
The build derives three registered dimension-type variants from the current vanilla Overworld JSON, changing only has_skylight and ambient_light. This preserves native attributes/timelines and synchronizes types through the normal login registry exchange; no dynamic client registry mutation is used. These variants currently use the vanilla type, not custom runtime changes to the host Overworld dimension type made by another data pack. Saved lighting survives reload, reseed, restart and retirement rollback. Existing non-Cave Ages without a choice remain Normal; old Cave Ages now use the no-skylight baseline. Use new Ages for clear visual comparisons and avoid confusing previously lit chunks with the current dimension settings.
Manual check: create Normal/Dark/Bright surface books and Cave + Bright;
compare an unlit enclosed room, check placed torches, revisit/restart and
confirm the Overworld stays unchanged. Operator diagnostics:
/rivencraft_port age create_lighting <name> <seed> <mode> <terrain> and
/rivencraft_port age lighting_probe <name> report the registered type,
skylight and ambient light. Test JAR: 1.0.1.66-beta.1.
The local 1.0.1.67-beta.1 correction supersedes slice 66's Bright rendering:
26.3's lightmap uses minecraft:visual/ambient_light_color, not the old
dimension ambient_light field. Bright surface/Cave types now set that native
attribute to white and ambient_light to 1.0. Cave still has no skylight.
Bright Ages reject natural/chunk-generation hostile spawns independently of
stored light levels. Existing mobs, passive mobs, spawners, eggs, commands
and special-event spawns are not deleted or globally disabled. Actual block
light propagation and plant light requirements are unchanged. Existing Bright
Ages receive the corrected registered types after restart; no new Age needed.
Planned color-page target: ambient light color, alongside sky/celestial colors. Reuse the native 26.3 attribute for authored tints; Bright defaults to neutral white until the color-page port. This does not enable color pages yet.
The local 1.0.1.68-beta.1 replaces slice 67's special spawn veto with actual
effective ambient brightness. The spawn event handler is removed. Bright's
combined light-engine reading now has a minimum of 15 on server and client,
including after sky darkening. Its white rendering attribute is retained.
Vanilla darkness checks therefore reject light-sensitive monsters naturally;
light-ignoring mobs, spawners and other spawn sources use their native rules,
not Rivencraft exemptions or bans. This does not remove existing mobs.
Ambient light is not stored as emitted block light or fabricated skylight. Consumers of combined brightness, including plant light checks, now see the ambient contribution. Normal/Dark and non-Rivencraft dimensions are unchanged. Cave Bright remains without skylight. Existing Bright Ages update on restart. This supersedes slice 67's statement that crop light checks are unchanged.
The local 1.0.1.69-beta.1 slice seed-completes missing weather and lighting
pages for newly bound books, including Link-Panel-only random Ages. Explicit
pages take precedence. Cave weather remains Off, while Cave lighting can
still choose Bright. Old Ages retain their saved choices; they are not rerolled.
The supported pool uses the 1.21.1 Legacy-rank rule: Normal is rank 1, other choices rank 2. Lighting weights are 3:1:1 for Normal/Dark/Bright; weather weights are 6:1:1:1:1:1 for Normal/Fast/Slow/Off/Always/Storm. The common weight is derived from the supported pool size. Unported Cloudy/Rain/Snow modes are not selected. Independent seed salts keep a missing lighting roll unchanged when weather is explicitly written, and vice versa. This matches the rank policy, not the exact 1.21.1 seed stream/pool. No random feature list, sky or celestial choices are added by this slice.
/rivencraft_port age create_random <name> <seed> uses the same environment
resolver and logs its frozen plan. /rivencraft_port age environment_probe <seed> <terrain> inspects deterministic defaults and explicit Storm/Bright
precedence without creating an Age. Other explicit operator fixtures keep
their Normal defaults to isolate the feature under test.
For manual checking, create several Link-Panel-only books and verify weather/ lighting varies across Ages and persists on revisit/restart. Then author an explicit Normal Weather + Normal Lighting book, and a Cave + Bright book. Include explicit Normal pages when comparing terrain without random lighting or weather changes. Random blocklist policy and instability remain pending.
The local 1.0.1.70-beta.1 slice ports the Overworld, Nether, and End Sky
pages. One sky style is accepted per book and persisted independently of
terrain, weather and lighting. Missing sky pages still use Overworld; random
sky selection is not part of this slice. Static Sky remains unsupported/red
until its Legacy animated renderer is ported, rather than being replaced by
a flat gray backdrop. Color and individual celestial pages are also pending.
Nether Sky uses the native no-sky backdrop and reddish fog; End Sky uses the native End backdrop. Neither changes dimension height, coordinate scale, terrain, Nether water/bed rules, or enables an End dragon fight. All lighting choices work with these styles, including Cave + Bright. Bright's render attribute and effective ambient level 15 are retained on each variant.
The registered variants derive the vanilla Overworld type and preserve its gameplay attributes. Non-Overworld skies use a derived day timeline without the three sky/fog/cloud tint tracks, retaining native gameplay schedules and illumination while avoiding Overworld day tint on those backdrops. Their cloud color is transparent. Biome/weather fog modifiers still apply. Types sync through normal registry login; no new rendering dependency is required. Sky choices survive reload/reseed/restart and retirement rollback. Old Ages without a sky choice retain Overworld style.
For visual checks, author Plains + Normal Lighting + No Weather with each
sky page; compare the sky/fog and verify the same terrain and normal bed/water
behavior. Then try Cave + Bright + End Sky and revisit after restarting.
Static Sky should remain red. Operator fixtures:
/rivencraft_port age create_sky <name> <seed> <sky> <lighting> <terrain> and
/rivencraft_port age sky_probe <name>. Use new books to author a sky choice;
this does not rewrite the sky choice of already-bound books.
The local 1.0.1.71-beta.1 slice adds the previously pending Static Sky.
Its client renderer adapts the 1.21.1 Legacy-style background: six independent
48×48 noise faces, default gray tint #929292, and noise intensity 65–224.
The noise updates every two world ticks. A single small dynamic texture and
cached cube replace thousands of per-cell draw vertices; resources are closed
with the sky renderer. No artwork or rendering dependency is added.
Static Sky is now supported rather than red, and persists through the same Age index as other sky styles. Four registered lighting variants retain the existing terrain/gameplay rules. Their native skybox is NONE (no End flashes); only the extracted client state schedules the custom background sky pass. Animation state resets between frames and does not consult a different live world while rendering. Color pages, celestial pages, and random sky selection remain pending.
Build and disposable dedicated-server creation/restart checks passed for Static + Normal + Standard and Static + Bright + Cave. These do not validate client rendering. For manual testing, bind a new Static Sky + Normal Lighting
- No Weather book, look around/above/below for animated gray static, then
visit an Overworld/End Sky Age and return to check there is no sky-state leak.
Revisit after restarting. Also try Static Sky + Cave + Bright (look outside
terrain or in spectator mode). The fixture accepts
staticas its sky value. The dedicated test server was stopped and its temporary world deleted. Changes remain local; no commit/push/publication was requested.
The local 1.0.1.72-beta.1 slice completes seeded default sky selection for
new Ages. Missing sky pages now choose Overworld, Nether, End, or Static
instead of always Overworld. This applies both to Link-Panel-only books and
authored books without a sky controller. An explicit sky page always wins.
The selection uses the first random draw and seed salt from 1.21.1's
AgeSkyProfile.random. Its equally likely Inherited and Overworld slots both
use the native Overworld presentation in this port, giving effective weights
2:1:1:1. Sky uses an independent random stream, so adding sky/weather/lighting
controllers does not reroll the other choices, terrain, or biomes. Colors,
individual celestial bodies, and random feature completion remain pending.
The chosen sky is saved at Age creation and is not recalculated on travel,
reload, restart, or reseed. Existing Ages (including ones with no saved sky
entry) keep their previous presentation. Explicit diagnostic fixtures retain
their controlled defaults; create_random uses the same complete environment
resolver as player books. environment_probe now also checks every explicit
sky override and cross-controller independence.
For manual checking, create several new Link-Panel-only books and compare
their sky styles. Also author a terrain/biome book without a sky page, and one
with an explicit Overworld Sky page. Revisit/restart to check persistence.
For repeatable operator fixtures, create_random <name> 0 selects Nether,
seed 2 selects Overworld, seed 6 Static, and seed 8 End. These seeds only test
the current port selection, not complete 1.21.1 world-generation equivalence.
No commit/push/publication is performed until explicitly requested.
The local 1.0.1.73-beta.1 slice ports shared Red/Green/Blue/White/Black
colors and their Number modifiers using the 1.21.1 additive mixing rules.
Numbers 0–24 directly before a color contribute number × 10; White adds to
all three channels and Black subtracts from them. Missing channels begin at
zero, groups can be written in any channel order, and the completed result is
clamped to 0–255 per channel. A color without a number gets a deterministic
seeded amount. Numbers currently require a following color: celestial numeric
targets and Static Sky resolution (#109) are not implemented by this slice.
Color groups preceding a Sky page tint that sky; a trailing color group also tints the sky, matching the existing 1.21.1 behavior. The new Ambient Light Color page (Lighting creative category) consumes the preceding color group for ambient illumination instead. Author Bright separately when full effective light level 15 is wanted; this color target does not change stored block light or the selected lighting controller. A target without a color group leaves that color native. For example:
Number 24 → Blue → Overworld Sky → Number 24 → White → Ambient Light Color → Bright
This gives a blue sky/fog with white ambient illumination. Do not use an unmodified Blue page when an exact amount is desired: its amount is seeded. Explicit colors are saved once; they survive reload/reseed/restart. Existing Ages without a color profile remain native. There are no random color groups for books that do not contain color pages yet.
Sky colors override the native sky/fog color attributes, tint Static Sky's animated cells, and multiply the native End background texture. End texture detail/brightness remains native; a tint does not make it a flat solid color. Ambient color uses 26.3's native ambient-light attribute. Both profiles sync in the Age catalog before travel, not through unbounded RGB dimension types. Client state is replaced with each catalog and cleared on disconnect. Use the same beta JAR on server and client: the catalog protocol has changed.
Build and dedicated-server checks cover compiled color groups, native fallback,
all four sky types, catalog encoding/decoding, reload and reseed. Client color
rendering and page availability still need manual checking. Test the example
above, a tinted Static/End Sky, return to an uncolored Age/Overworld, and revisit
after restarting. create_colors <name> <seed> <sky> creates a repeatable Flat,
Bright fixture with sky #643296 and ambient #6496c8; color_probe <name>
checks saved colors against sampled attributes and round-trips the catalog.
No commit/push/publication is performed until explicitly requested.
The local 1.0.1.74-beta.1 slice adds authored day-cycle lengths through the
existing Normal Time page. Put one Half Length, Full Length,
Double Length, or Zero Length before Normal Time. These use the
1.21.1 period values 0.5, 1, 2, and 0 normal days respectively. Half runs twice
as fast; Double runs half as fast. A Number immediately before a Length page
overrides it with number × 0.08 days (0–24), including Number 0 for stopped
time. Normal Time without a Length uses one normal day.
Zero Length freezes the native day timelines at a deterministic, saved random time. It does not snap back to noon on reload/reseed, and contributes no fractional clock interpolation. A book with no Normal Time page retains the existing native cycle; missing periods are not randomly completed yet. Until the full grammar port, a Length requires one following Normal Time page; repeated Length/Normal Time pages are unsupported.
The implementation wraps only this Age's native Overworld-clock timeline
sampling, on server and client. It does not change the global clock or tick
rate. Native sun/moon angles, sky/fog/day shading, moon phase, and gameplay
attributes supplied by those timelines use the sampled time. Weather layers
and authored colors remain intact. Explicit RGB sky/fog overrides remain
constant rather than acquiring day tint. Global /time changes still shift
moving Ages' underlying clock; Zero remains fixed. /time query reports the
global clock, not the scaled sample; use cycle_probe to inspect the latter.
This controls the existing native pair only. Separate Sun/Moon pages, custom angles/phases/directions/sizes, per-body colors, eclipses, and random celestial completion remain pending. Normal Time does not add visible bodies to End, Nether or Static skies; include Overworld Sky for the visual cycle test. Client/server must use the same beta: the catalog protocol is now 3.
For manual testing, bind Link Panel → Half Length → Normal Time → Overworld
Sky (optionally add Normal Lighting and No Weather), compare with Full and
Double, then try Zero Length and check that the sky stays still without
bouncing. Revisit after restarting. For numeric authoring, put Number 12 before
Full Length for a 0.96-day cycle. Existing Ages are not rewritten. Operator
fixtures: create_cycle <name> <seed> <half|full|double|zero> [number] and
cycle_probe <name> under /rivencraft_port age.
Port build and disposable-server probes passed for all four lengths and numeric overrides, native fallback, real sun-angle/light differences, catalog round trips, unload/reload, and reseed preservation. Rendering/travel/reconnect checks still require manual validation. Changes remain local until explicitly requested for commit/push/publication.
The local 1.0.1.75-beta.1 slice adds Rising, Zenith, Setting, and
Nadir Phase pages and Clockwise/Counterclockwise Direction pages to the
native Normal Time cycle. Put these before Normal Time, alongside an optional
Length. This does not implement separate Sun/Moon bodies or rename Normal
Time/Full Length; the naming cleanup is tracked separately in #110.
The phase conversion matches 1.21.1's applyInitialCelestialPhase: written
angles start at midnight, while native day time zero is sunrise. Rising,
Zenith, Setting, and Nadir select native times 0, 6000, 12000, and 18000.
A Number immediately before a Phase overrides it with number × 15° from
midnight; Number 6 means sunrise, 12 noon, 18 sunset, and 0 or 24 midnight.
These are native day-time positions, not uneased geometric sun angles.
Written phase is anchored when the Age is created, independently of the
current Overworld time and Length. Moving cycles then progress from that
saved point. Counterclockwise runs the cycle backward; Clockwise is the
default. This reverses the Age's day timelines, including their moon-phase
and gameplay attributes, not just a visual disc. The global clock is untouched.
As before, global /time changes can shift moving samples.
With Zero Length, written Phase replaces the seeded random stopping time: Zero + Zenith stays at noon, Zero + Nadir at midnight. Direction has no motion to reverse in a stopped cycle. Without a Phase, old behavior and saved Ages are preserved. Origins, phase offsets, and direction survive reload, restart, and reseed. Old profile fields default to origin/offset zero and forward motion. The catalog protocol is now 4; server and client need the same beta.
Interim grammar permits at most one each of Length, Phase and Direction before one Normal Time target. Angle/bearing, size, multiple bodies and eclipses remain unsupported. No random phase/direction completion was added. Example visual checks (include Link Panel, Overworld Sky, Normal Lighting and No Weather):
Zero Length → Zenith → Normal Time: frozen noon, including after restart.Zero Length → Nadir → Normal Time: frozen midnight.Half Length → Zenith → Counterclockwise → Normal Time: starts at noon and travels backward, twice as fast. Compare with Clockwise.Zero Length → Number 6 → Nadir → Normal Time: Number overrides Nadir to sunrise.
Operator fixture: /rivencraft_port age create_phase <name> <seed> <length> <rising|zenith|setting|nadir> <clockwise|counterclockwise> [phaseNumber].
cycle_probe reports both the saved origin and current native/scaled samples.
Build and disposable-server checks cover named/numeric phases, opposite motion,
fixed day/night light levels, older profile defaults, catalog round trips,
reload and reseed. Client rendering/reconnect checks remain manual. Changes
remain local until explicitly requested for commit/push/publication.
The local 1.0.1.76-beta.1 slice ports North/East/South/West Angle pages
for the native Normal Time cycle. Their bearings match the 1.21.1 symbol
values: 0°, 90°, 180°, and 270°. Put at most one Angle before Normal Time.
A Number immediately before it overrides the bearing with number × 15°,
wrapping at 360°: Number 3 is 45°, Number 12 is 180°, and Number 24 returns
to 0°. Angle is the orbit's horizontal bearing, distinct from Phase (position
along that orbit) and Direction (which way time progresses).
The client uses the extracted saved bearing to rotate the native sun/moon path, star field, and sunrise/sunset glow together. The native buffers, textures, phase, and lighting tracks are retained. Bearing does not change altitude, day length, light levels, or clock direction. Without an Angle page, the existing native orientation is preserved; old profiles use the same fallback. No seeded random bearing completion was added. This does not add bodies to Nether/End/Static skies or port custom Sun/Moon counts, sizes, per-body colors, or eclipses. #110 naming work remains separate.
Bearing persists in the existing cycle profile and catalog; the catalog protocol is now 5, requiring the same beta on server and client. Extracted bearing resets with sky state and is replaced at each render, preventing an Age's orientation from leaking into the next world. Sunrise/sunset glow is rotated relative to the native -90° body-path orientation, not around a different axis. No new textures or dimension variants are required.
Visual check: bind Link Panel → Zero Length → Rising Phase → North Angle → Normal Time → Overworld Sky (Normal Lighting/No Weather help comparison). Compare with East/South/West Angle, then put Number 3 before North Angle for a 45° intermediate bearing. Use Rising/Setting rather than Zenith when checking bearing: a body directly overhead stays overhead under a horizontal rotation. Check the glow stays aligned, then travel to an unmodified Age or Overworld and revisit after restart.
Operator fixture: /rivencraft_port age create_angle <name> <seed> <north|east|south|west> [number] creates a frozen sunrise for comparison.
The fixture validates all 25 numeric overrides, cardinal values, timing
independence, older profile defaults and catalog codec round trips. Dedicated
checks cover persistence and unchanged sampled day lighting; actual rendered
orientation remains a manual check. No commit/push/publication is performed
until explicitly requested.
The local 1.0.1.77-beta.1 slice fixes automatic sky selection for authored
celestials. Normal Time without a Sky page now selects Overworld Sky,
the current port's celestial-capable style, instead of sometimes selecting
Nether/End/Static and hiding the native bodies. Explicit Sky pages retain
precedence. Books without celestial pages retain the existing seeded sky
distribution, and lighting/weather choices are unchanged. The resolver also
recognizes Sun/Moon page intentions for their eventual port; this does not
make those still-unported body pages bindable.
This matches the visible outcome of the current bundled 1.21.1 Age path: its native fallback is Overworld, and its custom sky renderer draws authored suns/moons over its backgrounds. No 1.21.1 change or follow-up issue is needed for those bundled paths. The fix applies at creation of new 26.3 Ages; it does not rewrite existing saved sky choices. Recreate an older affected book to test the corrected automatic choice. Weather and terrain can still obscure celestials naturally; this is a compatible-sky rule, not a guarantee of a clear view from underground or during storms.
Test Link Panel → Normal Time, optionally with No Weather and Normal
Lighting, but without any Sky page. The celestial view should be present.
Also test Length/Phase/Angle/Direction + Normal Time without a Sky page and
confirm that an explicit Sky page still wins. create_cycle now exercises
this missing-Sky path rather than forcing an explicit sky in its fixture.
environment_probe verifies all three celestial intentions, explicit Sky
precedence in either order, and unchanged lighting/weather selection.
No commit/push/publication is performed until explicitly requested.
The local 1.0.1.78-beta.1 slice ports Small/Normal/Large Celestial
Size modifiers for Normal Time: 0.5×, 1× and 2× respectively. A Number page
immediately before Size overrides that preset with the existing 1.21.1
0.25×–3× range (Number 0 = 0.25×, 12 = 1.625×, 24 = 3×).
As in 1.21.1, Size before Normal Time sizes its sun; the paired moon stays
normal-sized. Standalone Sun/Moon and independent body sizing remain unported.
Size changes neither day length nor illumination, phase or bearing. Older
profiles default to 1×; new profiles retain size through reload/restart/reseed.
The catalog protocol is now 6, so clients and servers must use matching builds.
Rendering retains the native sun texture/pipeline without new GPU buffers.
Test Link Panel → Zero Length → Zenith Phase → Large Celestial → Normal
Time, optionally with No Weather and Normal Lighting. Compare Small and
Normal, then Number 0/12/24 immediately before Size. No Sky page is needed.
The sun should change size, while the moon and Overworld remain unchanged.
Reopen the world to check persistence. create_size <name> <seed> <small|normal|large> [number] creates a frozen-noon fixture without explicit
Sky; cycle_probe <name> reports its saved size and catalog round trip.
Build and disposable-server checks passed, including all numeric sizes,
reload, reseed, restart and unchanged sampled lighting/time. Actual rendered
size remains a manual check. The test server stopped and its world was deleted.
No commit/push/publication is performed until explicitly requested.
The local 1.0.1.79-beta.1 slice adds shared color groups before Normal
Time, tinting both its sun and moon as in 1.21.1. Use Number + Red/Green/
Blue/White/Black pages before that controller; Length/Phase/Angle/Size can
appear between the colors and Normal Time without losing the pending group.
Normal Time consumes the group, so it does not tint a later Sky or Ambient
Light Color target. Trailing colors still target the sky. Mixing, seeded
unnumbered amounts and completed-group clamping use the existing color rules.
The tint changes native sun/moon RGB only, retaining sprite transparency, weather fading, moon phases and existing size/orbit/time settings. It does not recolor stars, sunrise glow or change gameplay illumination. Older saved color profiles keep untinted bodies; new profiles save and sync their tint. Catalog protocol is now 7: use matching client/server builds. Standalone Sun/Moon controllers and independent per-body colors remain pending.
Test Link Panel → Zero Length → Zenith Phase → Number 24 → Red → Normal
Time, optionally with No Weather and Normal Lighting, for a red sun. Use
Nadir Phase to view the same tint on the moon. Mix several colors, add a
separate color group before Sky, and confirm that the Overworld stays normal
after travel. Check glow transparency and persistence after reopening the
world. The op fixture create_celestial_color <name> <seed> <rising|zenith|setting|nadir> <red|green|blue|white|black> <0..24> provides
independently colored sky/ambient plus a frozen body for diagnostics.
Client rendering remains a manual check; nothing is committed or published
without an explicit request.
The local 1.0.1.80-beta.1 slice supports one standalone Sun or Moon
controller in place of Normal Time. Both accept the existing Color, Length,
Phase, Direction, Angle and Size modifiers (including Number overrides).
Sun omits the paired moon; Moon omits the paired sun and sunrise glow.
Size applies to the selected standalone body, while Normal Time still sizes
only its sun. A missing Sky selects Overworld; explicit Sky remains decisive,
and non-Overworld body rendering is still pending.
Standalone bodies use the root-style linear orbit rather than the native paired cycle's eased orbit. Zenith puts either body overhead, Nadir puts it below the world, and Rising/Setting place it at the horizon. Zero Length freezes that position. Gameplay skylight combines altitude with precipitation and the root 0.18 moonlight multiplier (overhead sun = 15, overhead moon = 6, below-horizon body = 4 under clear weather). Bright/Dark rules remain separate. Native background, stars and moon-phase schedules remain for this slice; multiple independent bodies, eclipse handling, and full seeded celestial completion are not yet supported. Catalog protocol is now 8.
Test Link Panel → Zero Length → Zenith Phase → Large Celestial → Sun,
then replace Sun with Moon in a new book. Each should show only that body
overhead. Try Number + Color and Size, a moving/reversed cycle, and Nadir;
confirm the paired Normal Time and Overworld are unaffected after travel.
Restart and revisit. The diagnostic create_body <name> <seed> <sun|moon> <rising|zenith|setting|nadir> creates a red, large, east-bearing frozen body.
More than one celestial controller is still rejected, not silently discarded.
Nothing is committed or published without an explicit request.
The local 1.0.1.81-beta.1 slice accepts multiple celestial controllers.
Each Sun/Moon consumes its own preceding Color, Length, Phase, Direction,
Angle and Size group; modifiers reset after that controller. Normal Time
contributes a sun/moon pair with opposite phases and its usual sun-only Size.
The 1.21.1 limit of ten suns and ten moons applies, counting pairs toward
both limits. Unsupported duplicate modifiers within one group and dangling
modifiers are still rejected; the full recovery/instability grammar is pending.
Multiple bodies retain independent saved orbits/colors and draw using the native body resources, with suns before moons. Each has its own linear orbit; the first controller supplies the shared day timeline and native background/ star/moon-phase schedules. Skylight combines positive-altitude suns (capped at 1), or sums weaker moonlight when no sun contributes, matching the root aggregation rule. Explicit non-Overworld backgrounds still hide bodies. Catalog protocol is now 9. Older single-body/paired profiles remain unchanged.
Eclipse effects are not in this slice: sky darkening, disc occlusion and corona effects will be ported next. Visual overlap alone is not an eclipse.
Test two groups in one book: Zero Length → Zenith Phase → Large Celestial
→ Number 24 → Red → Sun, then Zero Length → Rising Phase → Small Celestial
→ Number 24 → Blue → Moon (with Link Panel first). Each should retain its
own size, color and position. Try a moving/reversed third body, a Normal Time
pair alongside a standalone body, restart, and travel back to an ordinary
Age/Overworld. /rivencraft_port age create_celestials <name> <seed> creates a
diagnostic three-body Age. Rendering remains a manual client check. Nothing
is committed or published without an explicit request.
The local 1.0.1.82-beta.1 slice adds eclipse effects to saved multi-body
profiles. Contact is based on the central quarter-size discs, not their
halos. Opposite-kind overlap progressively dims a moon and whitens a sun's
corona. A visible eclipsed sun darkens the sky by up to 65% and reduces its
sunlight contribution by up to 85%, using the 1.21.1 formulas. Other suns can
still supply light; same-kind overlaps do not produce eclipses. Below-horizon
overlap does not darken the visible sky.
Each body's native transparent glow is followed by an ordinary-alpha central disc, so an eclipsing moon obscures the sun instead of showing it through the glow. During an eclipse the moon core uses the solid full-moon sprite, matching root's occluding disc; native phases are retained outside eclipse contact. Weather fading remains. Meshes are cached, rebuilt after atlas changes and closed with the sky renderer. No new image assets are needed. Existing Ages with multiple bodies get these derived effects without rebinding their books.
Test Link Panel → Zero Length → Zenith Phase → Sun → Zero Length → Zenith
Phase → Large Celestial → Moon (No Weather and Normal Lighting recommended).
This holds an eclipse overhead. Change the Moon to Half Length in a new book
to watch it pass across the sun. Verify opaque center/transparent glow, sky
and ground darkening, restart and travel back to an ordinary dimension.
The op fixture /rivencraft_port age create_eclipse <name> <seed> <aligned|partial|clear|below|moving> creates controlled comparisons.
The multi-body fixture is now named create_celestials, avoiding a collision
with the existing terrain-generation create_multi command. Catalog schema
remains protocol 9. Explicit non-Overworld body rendering and broader seeded
completion are still pending. Nothing is committed or published without an
explicit request.
The local 1.0.1.83-beta.1 correction makes standalone and multi-body authored
moons use the full-moon sprite in both glow and opaque-center passes, as
the 1.21.1 custom renderer does. Native dark lunar-phase pixels could become
black patches once the new ordinary-alpha center pass made them opaque.
The native Normal Time pair keeps its calendar phases. Eclipse geometry,
darkening and corona formulas are unchanged; genuinely eclipsed moons still
turn dark and obscure their overlapping sun.
Read-only inspection of the reported celest save found all four body colors
intact (-1, untinted). Its first moon and second sun share period, direction,
phase, origin and bearing, creating a permanent eclipse after eclipse support
was added. This is separate from the phase-sprite rendering correction. No
saved orbits/colors are rewritten, and existing Ages need not be recreated.
Please revisit celest, compare a nonaligned authored moon, check an eclipse
and resource reload, then return to Overworld/Normal Time to confirm native
phases are unaffected. This rendering correction still needs a client check.
Nothing is committed or published without an explicit request.
The local 1.0.1.84-beta.1 slice renders authored Normal Time, Sun, Moon
and multiple bodies over all four Sky styles, including explicit Nether,
End and animated Static. Backgrounds draw first; the existing authored body
pass follows with its colors, sizes, orbits, opaque centers and eclipse effects.
Nether retains its fog backdrop, End retains its native sky texture, and
Static keeps animating. These are presentation changes only: no Nether/End
terrain, ceiling, coordinate-scale or dragon behavior is introduced.
Eclipses shade End/Static background tint and the Nether-style fog backdrop; gameplay light still uses the saved body profile. Native Overworld rendering and no-celestial Ages are unchanged. No new assets, saved fields or catalog protocol changes are needed. Already-created Ages with explicit backgrounds and authored celestials gain the rendering on update without rebinding.
Test the same frozen overhead Sun/Moon book with Nether Sky, End Sky
and Static Sky, then test a moving body and eclipse in each. Check body
colors/size, no duplicate bodies, unchanged background style, Static animation,
F3+T, restart and travel to Overworld. The existing diagnostic
age create_eclipse <name> <seed> <mode> [overworld|nether|end|static] now
accepts an optional explicit Sky for comparisons. Client rendering remains a
manual check. Nothing is committed or published without an explicit request.
The local 1.0.1.85-beta.1 slice randomizes a bare Sun or Moon page when
a new Age is created. Each such controller gets its own deterministic color,
size, bearing, phase, direction and length. Defaults use the root random-Age
palette (mixing 1–3 colors), size 0.75×–1.75×, bearing 0–359°, full-cycle phase,
either direction, and length 0.2–2 days with Legacy's 1-in-7 stopped-cycle
chance. Sun/Moon counts still come from your pages; nothing adds extra bodies.
This applies only when that controller has no written celestial modifiers. If its group includes Color, Size, Angle, Phase, Direction or Length, the existing explicitly authored behavior is retained, including defaults for its other fields. Sky/ambient colors consumed by their own target and unrelated terrain/weather/lighting pages do not make a body authored or reshuffle its random settings. Normal Time is unchanged. Groups use Age seed plus controller ordinal; repeated bare pages get independent settings. Choices are saved, not rerolled on GUI opening, reload/restart or terrain reseeding.
Test a new book with Link Panel → Sun → Moon → Sun, optionally adding
No Weather and Normal Lighting for visibility. Expect varied colors/sizes/
orbits; some bodies can be below the horizon or stopped. Test an explicitly
modified body in the same book, then restart and revisit. Existing Ages keep
their original saved settings and are not randomized retroactively. The op
fixture age create_random_celestials <name> <seed> tests independent seeded
defaults and bounds. Nothing is committed or published without explicit request.
The local 1.0.1.86-beta.1 slice completes the celestial branch for new
books with no celestial controller pages, including Link-Panel-only books.
The Age seed chooses 0–3 suns and 0–3 moons, following the root random
count draws. Each body receives the independent saved settings introduced
in .85. An explicit Sun, Moon or Normal Time suppresses this extra-body
completion entirely; its written controllers remain authoritative.
A valid zero-sun/zero-moon result draws neither body nor sunrise glow, rather than accidentally falling back to a vanilla pair. This does not force Dark Lighting: background/star schedules and independent lighting retain their normal behavior. Random background selection remains independent of body counts, and all supported Sky styles can render the chosen bodies. Default sky colors retain their current behavior; this slice completes bodies only.
Choices persist through restart and terrain reseeding. Existing Ages are not
rerolled. Catalog protocol is now 10, requiring matching client/server
builds. Test several new Link-Panel-only books, plus books that contain only
terrain/weather/lighting/Sky pages. Expect varied counts, including sun-only,
moon-only and empty skies; some bodies may be below the horizon. Compare an
explicit one-Sun book and a Normal Time book, then restart and revisit.
age create_completed_sky <name> <seed> [overworld|nether|end|static] provides
clear-weather Flat fixtures and reports a sample zero-body seed. The existing
age create_random now also uses the completed celestial plan. Nothing is
committed or published without explicit request.
The local 1.0.1.87-beta.1 slice gives new Link-Panel-only random Ages
a saved random sky/fog tint, matching 1.21.1's seeded palette and rounded
mix of 1–3 colors. This completes the sky-color draw already reserved by the
random celestial count selection. Body settings/counts are unchanged.
Books containing symbol pages keep their authored/default color rules; a black authored sky remains black. Ambient lighting is not randomized by this change. Existing Ages retain their saved colors. No new saved fields or catalog protocol change is needed. Create several new Link-Panel-only books, check sky/fog colors and restart persistence, then compare an explicitly colored Sky book and an uncolored terrain-only book. Nothing is committed or published without explicit request.
The local 1.0.1.88-beta.1 slice seed-completes explicit biome distribution
pages with missing biome pages. Single Biome alone selects one eligible
biome. Tiled/Grid/region controllers alone choose at least two distinct
biomes, using 1.21.1's seeded continuation rule and the available pool as the
maximum. With one authored biome they fill just the missing second biome;
with two distinct authored biomes they add nothing. Repeated biome pages keep
their weight but do not satisfy the distinct-biome minimum by themselves.
Cave completion draws only recognized Cave/Nether biomes. Void supplies The Void only when no biome is authored; a multi-biome Void book needs sufficient explicit biome pages rather than acquiring an unwanted Void biome. Native still rejects biome pages. No-controller biome behavior is unchanged, and the broader recovery/instability grammar is not part of this slice.
Test a new Link Panel + Tiny Biome Regions book, Single Biome alone, and Tiny
with one/two specific biome pages. Also try Cave + Tiny and restart/revisit.
The operator fixture is age create_completed_biomes <name> <seed> <terrain> <distribution>; age biome_pool <name> inspects the generator without loading
chunks. Existing Age pools do not change. Nothing is committed or published
without explicit request.
The local 1.0.1.89-beta.1 slice supports unpaired Block/Fluid pages.
When no feature immediately follows a material, the Age seed and original
page position choose a compatible implied feature, following 1.21.1's model.
Explicit material → feature pairs remain unchanged. Consecutive material
pages each receive their own selection; the resulting choices may repeat.
Only the saved feature plans gain these implied choices, not extra physical
pages in the book.
Solid candidates are Rocks, Floating Islands, Tendrils, Spheres, Spikes and Obelisks, restricted by terrain. Cave permits Tendrils/Spheres; Void also permits Floating Islands. Flat excludes Rocks. Fluid candidates are the three lake types on supported surface noise terrain. An unpaired fluid on Flat, Void or Cave is still refused because no compatible lake implementation is available there. Explicit incompatible pairings and existing 32-feature limits are unchanged; the full recovery/instability grammar remains pending.
Test Link Panel + Glowstone, consecutive Glowstone/Stone pages, and an unpaired
Water page on Standard terrain. Compare an explicit Glowstone → Tendrils
pair, try a solid on Cave/Void, and restart/revisit. Existing Ages retain
their saved features. Operator diagnostics: age create_implied_material <name> <seed> <terrain> <material-id> and age feature_plan <name> (no chunk
generation). Nothing is committed or published without explicit request.
The local 1.0.1.90-beta.1 slice adds random material features to new
Link-Panel-only Ages. The Age seed rolls 0–2 distinct feature types using
1.21.1's Legacy rank weighting, then chooses a registered compatible solid
or source fluid for each. Candidates are Rocks, Floating Islands, Tendrils,
Spheres, Spikes, Obelisks and the three lake types, filtered by terrain.
The same creation pass rolls rare Skylands (1-in-8 on noise terrain), Crystal Formations (1-in-10 on exposed surface terrain), and Star Fissures using the root small-feature grammar. These are additional to the 0–2 material features. Random structure selection and page-eligibility config remain future port work. Authored books do not gain unrequested random features, and existing Age plans are not rerolled. Choices persist through restart and reseed.
Test several new Link-Panel-only books for varied material features, including
Ages with none; compare an explicitly authored book and revisit after restart.
For controlled checks, age create_random_features <name> <seed> <terrain>
creates a feature-only fixture and age feature_plan <name> reports its
saved generator choices without generating chunks. age create_random uses
the same production selector. Nothing is committed or published without
explicit request.
The local 1.0.1.91-beta.1 slice ports random structure selection from
1.21.1. New Link-Panel-only Ages roll 0–2 distinct structure families in
addition to .90's material features. Legacy ranks prefer Villages, Strongholds
and Mineshafts, followed by Dungeons/Fortresses; newer structures are rarer.
The 26.3 Abandoned Camps page joins that rare pool. Candidates must support
the terrain and at least one biome in the actual selected biome pool.
A saved structure-control flag distinguishes an intentionally empty selection from older Ages' native behavior. Unselected page-controlled structure sets are disabled even when no structures were chosen; other native structure families remain governed by vanilla biome rules. Authored pages retain their biome override behavior, and old saved Ages are not changed. Cave Dungeons remain excluded by the port's existing terrain restriction; this is a known remaining difference from 1.21.1, not a new root behavior.
Test several new random Ages, including a restart/revisit, and compare an
authored Village book. For focused checks, age create_random_structures <name> <seed> <terrain> <biome-id|native> creates a controlled fixture;
age feature_plan <name> reports the frozen selection, including Dungeons.
No catalog protocol change is needed. Nothing is committed or published
without explicit request.
The local 1.0.1.92-beta.1 slice enables Dungeons on Cave terrain, including
Nether cave biomes, matching 1.21.1's noise-terrain support. The already-ported
placement JSON is byte-identical to root: eight vanilla monster-room attempts
per page, uniformly from one block above the minimum to one below the maximum
build height. Vanilla still requires a suitable enclosed chamber; an attempt
is not a guaranteed dungeon. Stacking up to 32 pages is unchanged.
Only the combined Cave dungeon/lake rejection was split: lakes remain rejected
there, and Flat/Void still reject Dungeons. New random Cave Ages can now select
Dungeons through .91's normal eligibility/rank rules. Existing saved plans
are unchanged. age create_dungeons <name> <seed> cave creates an eight-page
fixture. age dungeons_probe <name> [chunks] optionally limits the search to
1–4 chunks per side; omitting it retains the previous 4×4 search. That probe
generates chunks and is reserved for manual placement checks.
Test Cave + Dungeons, optionally stacking pages for visibility; use spectator mode to find monster rooms and compare a Nether-biome Cave Age. This slice's server validation checks authoring and persistence without generating a large region. No saved-field/protocol change is needed. Nothing is committed or published without explicit request.
The local 1.0.1.93-beta.1 slice fixes Nether and End biome materials on
noise terrain, including Nether biomes in Cave Ages. The port had retained
the vanilla terrain's Overworld material rules, which could coat Nether
biomes in grass. It now ports 1.21.1's biome rule layer: the five vanilla End
biomes use the registered End rule, the five vanilla Nether biomes use the
registered Nether rule, and all other biomes retain the terrain's original
rules. Nether coverings include Nylium, Soul Sand/Soil, Basalt and Blackstone
where their native rules select them; End areas use End Stone.
Noise geometry, biome selection, lighting, default fluids, sea level and dry Cave aquifer settings remain unchanged. This is not a Flat/Void layer rewrite. The correction applies after reload to new chunks only in existing Ages; already generated grass is not replaced. Test a new Nether-biome Cave Age and End-biome Standard/Island Age, or explore new chunks after restarting.
Operator fixtures: age create_biome_surface <name> <seed> <terrain> <biome-id>
and age material_probe <name> [chunk_x chunk_z]. The latter examines one
terrain-stage chunk (default 0,0) without feature, lighting or entity generation. Nothing is committed
or published without explicit request.
The local 1.0.1.94-beta.1 slice ports structure-aware completion of explicit
biome distributions from 1.21.1. Single Biome without a supplied biome now
prefers a biome compatible with every authored structure page, when a common
candidate exists. Cave + Single + Nether Fortresses therefore selects an
eligible Cave/Nether biome rather than an unrelated cave biome. If there is
no common candidate, ordinary seeded filling and authored structure overrides
remain available, as in root.
For multi-biome controllers, each uncovered structure requirement can add one compatible biome from the terrain's available pool. This is an intentional exception to ordinary minimum-only filling: an already-full pool may gain another biome for its structure pages. Supplied biomes, their order and duplicate weights remain intact. A supplied Single Biome is never replaced, Native remains unchanged, and Dungeons impose no biome requirement. The no-controller fallback remains unchanged in this slice.
Test Single Biome + Villages without biome pages, Cave + Single Biome + Nether
Fortresses, and a multi-biome book with structures. Compare an explicit End
Single Biome + Villages to confirm that authored override still works.
age create_completed_biomes <name> <seed> <terrain> <distribution> [structure-page-id]
now accepts an optional structure fixture. Existing Ages are not rerolled;
restart/reseed retains completed pools. Nothing is committed or published
without explicit request.
The local 1.0.1.95-beta.1 slice seed-completes omitted biome controllers
in partly authored books, using 1.21.1's first AgeTraits distribution draw.
Native, Single and Medium are common; the other supported distributions are
rarer. Explicit controllers still win. Supplied biomes are never discarded:
a Native roll with authored biomes falls back by count, as does a Single roll
with multiple biome pages. Other seeded multi-biome controllers are retained,
so a lone supplied biome may receive a second biome to meet the minimum.
Void without biome pages still uses The Void; supplied Void biome pages keep their existing count-based behavior. An omitted controller that rolls Native on Cave terrain uses the same seeded Single fallback already used by random Ages, since the port has no native multi-cave source. Explicit Native Cave behavior remains unchanged. Structure-aware completion from .94 applies to the resulting nonnative controller. Full Link-Panel-only random generation retains its existing selector and seeds.
Test new terrain-only books without biome controllers, one/two supplied biome
pages without a controller, and Cave + Nether Fortresses without a biome
controller. Compare an explicit Single Biome book and restart/revisit.
age create_completed_biomes <name> <seed> <terrain> auto [structure-page-id]
provides an omitted-controller fixture. Existing Ages are not rerolled.
Nothing is committed or published without explicit request.
The local 1.0.1.96-beta.1 slice seed-completes omitted terrain pages in
partly authored books. It starts with the same ranked terrain draw as random
Ages, following 1.21.1's selectForWriting model. If that terrain cannot host
the supplied features/materials, a deterministic fallback chooses a compatible
terrain in stable profile order. The port also preflights its current biome
restrictions, avoiding an automatic Cave choice for supplied surface biomes.
Explicit terrain still wins and incompatible explicit combinations remain rejected. Missing-terrain Fortress books can now bind using Cave terrain; unpaired fluids use supported surface noise terrain. No extra random features are added to partly authored books. The original book page list stays intact; the chosen terrain is appended only to internal generation input so material and color/controller indices do not shift. Sky/color/celestial compilation still reads the original pages. Fully random Link-Panel-only Ages retain their existing selector. Already-created Ages do not change terrain.
Test several new books with Sky or a feature but no terrain page, Nether
Fortresses alone, and an unpaired Water page. Compare an explicit Flat book
and a Plains biome page without terrain; the latter must not choose Cave.
age create_auto_terrain <name> <seed> <page-id> exercises the production
selector for one-page fixtures. Restart and revisit to confirm persistence.
Nothing is committed or published without explicit request.
The local 1.0.1.97-beta.1 slice ports Native Cave biome distribution from
1.21.1. A new Cave + Native book now freezes the full recognized Cave/Nether
biome pool and distributes it with the existing seeded Tiny-region sampler,
instead of forcing Lush Caves. An omitted controller or random Cave Age that
rolls Native now uses that same pool rather than converting to Single.
Random structures inspect the saved pool, so eligible Nether structures are
no longer hidden behind an assumed Lush-only source.
Existing Single Cave Ages remain Single. Old empty Native Cave records keep their Lush fallback; they are not silently expanded on load. Other Native terrains remain unchanged, and explicit Native still rejects biome pages. Pools persist across restart/reseed; reseeding can still change future region layout. Modded biome surface-rule integration remains separate pending work. Back up before updating and do not downgrade worlds containing new Native Cave pools to earlier beta builds.
Test a new Cave + Native Biomes book without individual biome pages,
explore multiple regions, then restart/revisit. Compare an explicit Single
Cave book and an existing old Cave Age. The existing
age create_completed_biomes <name> <seed> cave native fixture also checks
the native source against Tiny's sampler without generating chunks.
Nothing is committed or published without explicit request.
Accelerated random block ticks
The local 1.0.1.98-beta.1 slice ports the Accelerated environment page
from 1.21.1. Repeated pages stack: each adds three extra random positions per
eligible block section per tick. Only already-loaded chunks within one chunk
of players are candidates; no extra chunks are loaded. Defaults match 1.21.1:
at most eight candidate chunks and 16,384 attempted positions per Age tick,
shared across sections with rotating selection. These limits live in
config/rivencraft-local.toml under accelerated_age; setting
max_random_tick_attempts_per_tick to zero disables the extra ticks.
This affects random-ticking blocks such as crops and saplings, not entities, machines, scheduled block ticks, or the day/night clock. The authored page count persists with the Age across unload/reload, reseeding and restart. Existing Ages default to zero; pageless random Ages do not gain Accelerated automatically. Instability costs remain part of the pending instability port.
Test two otherwise comparable new Ages, one with a single Accelerated page
and one with repeated pages. Plant crops/saplings with suitable light and
space, remain nearby, and compare growth. Revisit after restart. The operator
command /rivencraft_port age acceleration <name> reports the saved count
and current budgets. Disposable-server fixture
age create_accelerated <name> <seed> <pages> checks authoring and bounded
attempt arithmetic and creates a Flat Age; it does not prove live growth.
Build and disposable dedicated-server checks passed for counts 0, 1 and 32,
overflow/disabled budget arithmetic, unload/reload, reseed and full restart.
No player was connected for the server checks, so live growth remains an
in-game acceptance check. The test server was stopped and its world removed.
From the repository root:
./gradlew -p ports/mc263 build
This standalone Gradle build uses Minecraft 26.3, NeoForge 26.3.0.99, ModDevGradle 2.0.148, and Java 25. The repository root remains the independent Minecraft 1.21.1/Java 21 build:
./gradlew build
The beta JAR is under ports/mc263/build/libs. Continue the port and its
full dual-version validation in issues #98–#104 before calling 26.3 stable.
The dedicated development server uses build/run-server, with its own world
and properties. Set a nonconflicting server-port there before running if
another Minecraft server is active. The prototype restores all indexed Ages
during the Overworld load, before initial chunk preparation completes.