Port celestial systems and seeded Age completion to 26.3 beta
Build / build (push) Canceled after 0s

This commit is contained in:
dnorberg committed 2026-11-04 18:08:12 -05:00
1 parent 38e40ddba3
commit 40770841ee
32 files changed
+2792 -99

No files matched your search

+346 -2
View File
@@ -5,8 +5,12 @@ 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. Celestial systems, instability, crystal
portals, and much of the 1.21.1 gameplay remain unported. Use a test world and keep a backup; do not
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.93-beta.1](RELEASE_NOTES_1.0.1.93-beta.1.md).
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
@@ -947,6 +951,346 @@ 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.
From the repository root:
```sh