Public Access
1437 lines
89 KiB
Markdown
1437 lines
89 KiB
Markdown
# 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](RELEASE_NOTES_1.0.1.98-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
|
||
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 `static` as 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:
|
||
|
||
```sh
|
||
./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:
|
||
|
||
```sh
|
||
./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.
|