Public Access
Port celestial systems and seeded Age completion to 26.3 beta
Build / build (push) Canceled after 0s
Build / build (push) Canceled after 0s
This commit is contained in:
1 parent
38e40ddba3
commit
40770841ee
32 files changed
+2792
-99
No files matched your search
@@ -1303,6 +1303,504 @@ unchanged moon, and travel isolation still require the user's client check.
|
||||
The server stopped cleanly and its temporary world was deleted. Nothing is
|
||||
committed, pushed or published without an explicit request.
|
||||
|
||||
## Normal Time shared celestial color
|
||||
|
||||
`1.0.1.79-beta.1` ports the root `AgeSkyProfile` behavior that consumes a
|
||||
pending shared color group at Normal Time and applies it to both paired
|
||||
bodies. `PortAgeColors` now saves an optional `celestial` RGB value, default
|
||||
-1 (native/untinted), with catalog protocol 7 for synchronization. Existing
|
||||
sky/ambient fields and old profiles retain their values. Color accumulation
|
||||
passes through non-color celestial modifiers, clamps at the target, resets
|
||||
after consumption, and leaves trailing colors assigned to sky as before.
|
||||
|
||||
Extraction copies the saved tint into `SkyRenderState`. A narrowly scoped
|
||||
native sun/moon uniform modification multiplies RGB while retaining alpha;
|
||||
there are no live world reads during drawing, new textures, pipelines or GPU
|
||||
buffers. Native weather fading, transparent halos, moon phases, stars and
|
||||
sunrise glow remain unchanged. Time and effective illumination are not tied
|
||||
to RGB. State reset/defaults prevent cross-dimension tint leakage. Independent
|
||||
Sun/Moon pages, multiple bodies and per-body colors remain unported.
|
||||
|
||||
The `create_celestial_color` fixture checks three separate target groups,
|
||||
completed-group clamping, modifier passthrough, consumed-group reset, seeded
|
||||
unnumbered colors, old codec defaults and catalog round trips. Client checks
|
||||
must cover a frozen Zenith sun, Nadir moon, mixed colors, transparent halos,
|
||||
restart and return to an untinted dimension. Server probes validate saved
|
||||
profiles and attributes, not rendered output. Build passed; disposable-server
|
||||
fixtures retained separate sky/ambient/body colors through reload, reseed and
|
||||
restart, including zero/black colors and untouched native defaults. Sampled
|
||||
time/light remained unchanged. The server stopped cleanly and its temporary
|
||||
world was deleted. No commit/push/publication is performed without an explicit
|
||||
request.
|
||||
|
||||
## Standalone Sun and Moon controllers
|
||||
|
||||
`1.0.1.80-beta.1` extends the existing cycle profile with optional `body_mode`
|
||||
(paired=0, Sun=1, Moon=2); old profiles default to the paired renderer.
|
||||
Catalog protocol 8 includes this field. One celestial controller is accepted
|
||||
per book, with existing Length/Phase/Direction/Angle/Size and shared Color
|
||||
groups. Multiple controllers and dangling/duplicate modifiers retain the
|
||||
interim strict rejection rather than losing written pages.
|
||||
|
||||
Standalone bodies use a linear angular orbit as in root `AgeSkyProfile.Body`.
|
||||
Both native body-angle attributes point at that orbit; render-state mode
|
||||
suppresses the absent counterpart. The selected Moon consumes Size itself;
|
||||
Normal Time retains its original sun-only sizing. Moon-only sunrise glow is
|
||||
suppressed before any horizon pose is pushed. Shared RGB/alpha handling and
|
||||
native buffers/pipelines are reused, with extraction/reset defaults protecting
|
||||
other dimensions. Missing Sky completion uses Overworld, as before. Explicit
|
||||
Nether/End/Static still does not draw bodies in this native-renderer slice.
|
||||
|
||||
The gameplay skylight attribute follows root `lightAt` and
|
||||
`LevelSkyBrightnessMixin`: positive cosine altitude, 0.18 for a moon, weather
|
||||
attenuation, then the 11-level sky-darkening range. It does not infer light
|
||||
from color or size, and does not bypass Bright/Dark or no-skylight terrain.
|
||||
Native background/star/moon-phase schedules remain, rather than claiming a
|
||||
full custom sky port. Seeded default phase/bearing completion, multiple
|
||||
independent bodies and eclipses remain future work.
|
||||
|
||||
The op `create_body` fixture checks all named phases for both bodies, light
|
||||
weights, numeric size, reverse motion, order rejection, old-profile defaults,
|
||||
compatible missing Sky and catalog synchronization. Actual body visibility,
|
||||
moon size, glow transparency and travel isolation require manual client
|
||||
validation. Build and disposable-server probes passed: Zenith sun/moon
|
||||
skylight was 15/6, Nadir and horizon were 4; named phase angles were correct.
|
||||
The paired fixture retained its opposite moon and native lighting. Reload,
|
||||
reseed and full restart preserved body mode, color, size, bearing and phase.
|
||||
The test server stopped and its temporary world was deleted. No commit/push/
|
||||
publication is performed without an explicit request.
|
||||
|
||||
## Multiple independent authored celestials
|
||||
|
||||
`1.0.1.81-beta.1` adds an optional immutable `PortCelestialBody` list to the
|
||||
cycle profile and catalog protocol 9. Existing profiles default to an empty
|
||||
list and use their validated native paired/single path. Books with multiple
|
||||
controllers compile ordered modifier groups into independent body orbits;
|
||||
Normal Time expands into opposite-phase sun/moon entries. Colors are consumed
|
||||
at each controller, with original page indices retained for seeded amounts.
|
||||
Uncolored bodies reset to native white rather than inheriting the previous
|
||||
body's tint. Size/phase/length/bearing/direction also reset per group.
|
||||
|
||||
The profile constructor and authoring gate enforce the root ten-sun/ten-moon
|
||||
limit, with Normal Time counting toward both. Duplicate modifiers within a
|
||||
group and dangling modifiers remain strict errors until grammar recovery is
|
||||
ported. The first controller continues to govern the shared day timeline and
|
||||
native background/star/moon-phase schedules. Positive-altitude sunlight sums
|
||||
to at most 1; only if no sunlight contributes is summed 0.18-weight moonlight
|
||||
used. Weather and Bright/Dark remain separate. No eclipse attenuation is
|
||||
included yet.
|
||||
|
||||
Extraction resolves body angles into immutable presentation snapshots. The
|
||||
native body pass is replaced only for a nonempty multi-body list: draw suns
|
||||
first, then moons with their own color, size and bearing, then native stars
|
||||
once. Native buffers, pipelines and alpha are reused. Temporary renderer
|
||||
parameters and pose transforms restore in finally blocks; no world lookup is
|
||||
performed during drawing. Explicit Nether/End/Static rendering remains a
|
||||
separate limitation. Eclipse disc occlusion, corona and sky/light attenuation
|
||||
will be the following slice, not a claim of this implementation.
|
||||
|
||||
`create_celestials` checks independent motion/color/size, modifier reset, Normal
|
||||
Time expansion, ten-pair acceptance/overflow rejection, profile codecs and
|
||||
catalog round trips. Manual checks cover body placement/alpha, multiple
|
||||
controllers, restart and ordinary-dimension isolation. Build passed, as did
|
||||
disposable-server profile/catalog checks, combined-light invariants, reload,
|
||||
reseed and full restart. Single-body, paired and tinted fixtures retained
|
||||
their earlier behavior. The test server stopped and its temporary world was
|
||||
deleted. No commit/push/release is performed without explicit instruction.
|
||||
|
||||
## Eclipse effects
|
||||
|
||||
`1.0.1.82-beta.1` adapts root `AgeSkyProfile.eclipseFor`, `eclipseAt` and
|
||||
`lightAt`, plus `RivencraftSkyEffects.drawBody`. The dot-product separation
|
||||
of normalized orbit directions is compared with the sum of quarter-disc
|
||||
angular radii; each body takes the strongest opposite-kind contact. This is
|
||||
root's radial proximity formula, not a new physical disc-area model. Bearing,
|
||||
phase, size, motion and direction all affect contact. Same-kind and isolated
|
||||
bodies have no eclipse; only an above-horizon sun contributes global shading.
|
||||
|
||||
Sunlight is multiplied by `1 - 0.85 * overlap` before the existing light
|
||||
aggregation and weather handling. Extraction shades sky RGB by
|
||||
`1 - 0.65 * strongestVisibleSolarOverlap`. Moon RGB scales by `1 - overlap`;
|
||||
sun RGB moves toward white by `pow(overlap, 8) * 0.8`. Values are derived from
|
||||
saved profiles, requiring neither a new saved schema nor packet fields.
|
||||
Existing multi-body Ages gain the effects on update; single/paired native
|
||||
paths stay unchanged. Overlap calculations are bounded by the 20-body limit,
|
||||
and extracted presentation values are reused without live-world drawing reads.
|
||||
|
||||
Native transparent glows draw before each body's central ordinary-alpha disc.
|
||||
A registered pipeline cloned from native Celestial uses conventional alpha
|
||||
blending; cached center-cropped atlas meshes retain native UV orientation.
|
||||
An eclipsed moon uses the full-moon core to avoid transparent phase pixels
|
||||
exposing the sun (root always drew that full-moon center). Weather alpha is
|
||||
retained. The helper drops meshes on atlas-generation change and closes them
|
||||
with the renderer. There is no generated art or per-frame mesh allocation.
|
||||
Explicit Nether/End/Static body rendering remains outside this slice.
|
||||
|
||||
`create_eclipse` supplies aligned, partial, clear, below-horizon and moving
|
||||
fixtures; it checks overlap/color/light constants, same-kind exclusion and
|
||||
motion out of contact. The multi-body op fixture is renamed
|
||||
`create_celestials` to avoid merging with the unrelated existing terrain
|
||||
`create_multi` command. Manual checks must confirm disc opacity, halo,
|
||||
corona/sky darkening, resource reload and travel isolation. Build passed.
|
||||
Disposable-server fixtures passed with overlap 1/0.293/0 for aligned/partial/
|
||||
clear cases and no global shading for below-horizon alignment. Aligned
|
||||
sunlight was 0.15, clear sunlight 1; sampled skylight was 6/12/15 for aligned/
|
||||
partial/clear. Moving contact ended as expected. Reload, reseed, catalog
|
||||
round trips and full restart retained profiles and derived light behavior;
|
||||
earlier standalone/paired fixtures remained unchanged. The test server stopped
|
||||
and its temporary world was deleted. No commit/push/publication is performed
|
||||
without an explicit request.
|
||||
|
||||
## Authored moon sprite correction
|
||||
|
||||
`1.0.1.83-beta.1` removes the mixed native-phase/full-core adaptation introduced
|
||||
with the opaque eclipse pass. Standalone and multi-body authored moons now
|
||||
draw full-moon glow and center consistently, matching root's custom renderer,
|
||||
which always samples the first (full-moon) atlas cell. Under ordinary alpha,
|
||||
native dark phase pixels can produce black opaque centers; the old overlay
|
||||
glow had made those dark pixels effectively invisible. The ordinary native
|
||||
Normal Time pair retains its calendar phases. No eclipse math, saved profile,
|
||||
catalog protocol or world data changes are needed.
|
||||
|
||||
The user's `celest` Age was read without modification. Its body colors are
|
||||
all -1 (native white), not corrupted black values. Its first Moon and second
|
||||
Sun both have period 1, phase 0, origin 0, clockwise direction and native
|
||||
bearing -1; they remain exactly coincident. That moon's full eclipse and its
|
||||
occlusion of the sun are expected under the newly added root overlap rules,
|
||||
independent of the phase-sprite correction. Do not silently alter player-authored
|
||||
orbits to conceal the intentional alignment. Manual checks cover nonaligned
|
||||
moons, the known permanent eclipse, Native Normal Time, resource reload and
|
||||
cross-dimension isolation. No user save was modified, and nothing is committed,
|
||||
pushed or published without explicit instruction.
|
||||
|
||||
## Celestials over explicit non-Overworld skies
|
||||
|
||||
`1.0.1.84-beta.1` removes the presentation exclusion that hid authored bodies
|
||||
over Nether/End/Static. Root `RivencraftSkyEffects` draws its body list after
|
||||
any chosen background. The native 26.3 paths instead returned after End or
|
||||
skipped a NONE sky entirely. An extracted overlay-mode flag now schedules an
|
||||
authored body layer without changing the actual dimension type or gameplay.
|
||||
Single Sun/Moon and Normal Time profiles expand into temporary presentation
|
||||
bodies on these backgrounds; saved profiles are not rewritten. Existing
|
||||
Overworld single/paired/multi-body paths stay unchanged.
|
||||
|
||||
End uses a RETURN hook that includes the native early return, after its pass
|
||||
is closed. Static closes its own background pass before drawing the overlay.
|
||||
Fog-only Nether presentation schedules an extracted END sky pass, suppresses
|
||||
its End background/flash drawing, and retains the fog clear color. Overlay
|
||||
passes load existing targets without clearing, reuse native body resources
|
||||
and suppress additional stars/horizon glow on non-Overworld backgrounds.
|
||||
Weather alpha is extracted even when the native NONE/END branch omits it.
|
||||
All presentation flags reset when the render state is reused.
|
||||
|
||||
Eclipse shading modulates End/Static background tint; Nether-style fog color
|
||||
uses the same root shade factor through an environment attribute layer.
|
||||
Native untinted fog and authored sky colors are both supported; other
|
||||
backgrounds retain their existing fog behavior. Body lighting and eclipse
|
||||
geometry do not depend on style. Missing Sky selection still chooses
|
||||
Overworld for authored celestials. No schema/protocol changes or new assets
|
||||
are required. The eclipse fixture accepts an optional explicit Sky; server
|
||||
checks cover saved choices, fog/light behavior and persistence, while visual
|
||||
layering, no duplication, resource reload and travel isolation require manual
|
||||
client checks. Build and disposable-server checks passed for all four sky
|
||||
styles: aligned eclipse skylight stayed 6, clear stayed 15, and Nether fog
|
||||
scaled by 0.35 only during overlap. No-celestial and tinted-Nether fixtures
|
||||
retained their expected colors. Saved profiles, style, light and fog survived
|
||||
reload/reseed and full restart. The test server stopped and its temporary
|
||||
world was deleted. No commit/push/publication is performed without explicit
|
||||
request.
|
||||
|
||||
## Bare celestial seeded randomization
|
||||
|
||||
`1.0.1.85-beta.1` adds per-controller randomization specifically for bare
|
||||
Sun/Moon groups, as requested for easier testing. This deliberately uses the
|
||||
root **random-Age** ranges rather than its authored compile defaults (which
|
||||
reuse shared seeded phase/bearing and default size/color). A dedicated stream
|
||||
mixes Age seed with controller ordinal, independent of unrelated page indices,
|
||||
terrain/weather/lighting RNG and sky selection. Palette/mixing and 0.75–1.75
|
||||
size come from `AgeSkyProfile.random`; 0.2–2 periods with 1/7 stopped chance
|
||||
come from `AgeTraits.select`. Bearing and phase use the port's existing degree/
|
||||
tick granularity. Direction is random per body. Counts and body-kind limits
|
||||
still follow explicitly written controller pages.
|
||||
|
||||
The compiler recognizes whether a controller has any written celestial
|
||||
modifier. Colors already consumed by Sky/Ambient do not suppress randomization.
|
||||
Any written celestial modifier retains the previous authored path as a whole,
|
||||
not just individual field overrides; partially authored groups do not gain
|
||||
new random missing fields in this slice. Normal Time and absent controllers
|
||||
are unchanged. Bare controllers materialize immutable full body profiles,
|
||||
including a one-body list for standalone cases. Multi-body compilation carries
|
||||
their colors/orbits without replacing them with native defaults. No new
|
||||
saved schema, protocol or client renderer code is needed.
|
||||
|
||||
Only newly created Ages compile these defaults. Older saved profiles load
|
||||
unchanged; GUI opening, restart and terrain reseeding do not reroll them.
|
||||
`create_random_celestials` checks reproducibility, ordinal independence,
|
||||
unrelated-page stability, 128-seed bounds/pool coverage and unchanged authored/
|
||||
Normal Time behavior. The regular fixtures still exercise explicit groups.
|
||||
Manual checks cover visible variation, moving/stopped bodies, mixed authored
|
||||
groups and restart. Build and disposable-server checks passed, including
|
||||
single bare bodies, multi-body/128-seed coverage, catalog round trips,
|
||||
unrelated-page stability, explicit/eclipsed fixtures, reload, terrain reseed
|
||||
and full restart. Saved random parameters remained unchanged while moving
|
||||
orbits continued with the clock. The server stopped and its temporary world
|
||||
was deleted. No commit/push/publication occurs without explicit request.
|
||||
|
||||
## Missing celestial branch completion
|
||||
|
||||
`1.0.1.86-beta.1` adds creation-only `PortDayCycle.resolve`. Written controllers
|
||||
delegate to the validated compiler unchanged. If none exist, the root
|
||||
`AgeSkyProfile.random` draw positions select 0–3 suns and 0–3 moons: consume
|
||||
the sky-style draw and mixed sky-color draws, then the two counts. Body
|
||||
settings reuse .85's independent per-controller streams. This matches root's
|
||||
unrestricted count model, not bit-identical per-body values; the .85 per-body
|
||||
length/direction independence is retained. Missing sky tint completion and
|
||||
random-page policy parity are not claimed by this slice.
|
||||
|
||||
The shared resolver is used by player book creation and the `create_random`
|
||||
operator command. Other exact diagnostic fixtures continue using `compile`
|
||||
or native profiles to isolate their subject. A saved NONE body mode (3)
|
||||
represents a resolved zero-body sky. Its sun/moon/horizon drawing is suppressed
|
||||
without switching to Dark lighting or changing the native background/star
|
||||
timeline. Old missing profiles still decode to NATIVE rather than being
|
||||
retroactively completed. The mode-domain extension uses catalog protocol 10.
|
||||
No generation runs or rerolls happen during GUI rendering, load or reseed.
|
||||
|
||||
`create_completed_sky` tests 256-seed count bounds and coverage of empty,
|
||||
sun-only, moon-only and mixed results; reproducibility and unrelated-page
|
||||
stability; explicit-controller precedence; old defaults; and catalog round
|
||||
trips. Manual checks cover varied new books, empty skies, explicit-controller
|
||||
counts, all backgrounds, restart and Overworld isolation. No commit/push/
|
||||
publication is performed without explicit instruction.
|
||||
|
||||
The .86 build and disposable dedicated-server checks passed: four background
|
||||
fixtures, the seed-14 empty sky, random Age creation, explicit controllers,
|
||||
catalog round trips, unload/reload, terrain reseeding and full restart. Saved
|
||||
body parameters survived unchanged. The test server was stopped and its world
|
||||
deleted; client visual confirmation remains a manual check.
|
||||
|
||||
## Random Age sky-color completion
|
||||
|
||||
`1.0.1.87-beta.1` uses creation-only `PortAgeColors.resolve` for player books
|
||||
and `age create_random`. Empty symbol lists choose a sky tint from root
|
||||
`AgeSkyProfile.random`'s palette and draw order, including its rounded channel
|
||||
averages. Nonempty symbol lists delegate to the existing compiler unchanged.
|
||||
This intentionally distinguishes wholly random Ages from authored books with
|
||||
an omitted sky-color branch, as 1.21.1 does. The existing .85 per-body random
|
||||
color truncation is preserved by a shared palette helper; celestial count and
|
||||
body random streams do not change.
|
||||
|
||||
Colors are stored in the existing profile and catalog fields. Old native
|
||||
colors are not retroactively randomized; reload, restart and terrain reseed
|
||||
do not rerun completion. No protocol update is necessary. The completed-sky
|
||||
diagnostic checks six root seed/color vectors, codec persistence, authored
|
||||
precedence (including explicit black) and old-profile defaults. Random-page
|
||||
blocklist parity remains separate pending work.
|
||||
|
||||
Build and disposable dedicated-server checks passed: root vectors and authored
|
||||
precedence, color attributes/catalog round trips for all four background
|
||||
styles, explicit sky/ambient colors, unload/reload, reseed and full restart.
|
||||
Saved random colors stayed unchanged after reseeding and restart. The test
|
||||
server was stopped and its disposable world deleted. Client rendering is
|
||||
still a manual check. No commit, push or publication was performed.
|
||||
|
||||
## Authored biome branch completion
|
||||
|
||||
`1.0.1.88-beta.1` ports the explicit-controller missing-pool behavior from
|
||||
1.21.1 `AgeBiomeSelection.compile`: Single requires one biome; other nonnative
|
||||
controllers require two distinct biomes. An entirely omitted pool uses the
|
||||
seeded 2:1 continuation/stop draw up to the eligible pool size. Authored pools
|
||||
fill only to the minimum, preserve order and duplicate weights, and never add
|
||||
an unrequested third biome once the minimum is met. Native still disallows
|
||||
biome pages. The binder's availability validation accepts incomplete pools;
|
||||
the server resolves actual registry eligibility before creating the Age.
|
||||
|
||||
Player creation now passes the actual Age seed to biome compilation. Exact
|
||||
older diagnostics retain the registry-only compiler; the new completion
|
||||
fixture exercises the production seeded path. Cave uses recognized Cave and
|
||||
Nether biomes. Void does not inject The Void alongside authored biomes and
|
||||
reports a clear distinct-biome error when completion is impossible. Pools
|
||||
are stored in existing `PortBiomePlan` fields and never rerolled on restart
|
||||
or terrain reseed. No protocol change is needed. Broader writing recovery,
|
||||
structure-driven missing-biome selection and random-page policies remain
|
||||
separate parity work.
|
||||
|
||||
The build and disposable dedicated-server checks passed. The completion
|
||||
fixture checked every distribution over 32 seeds, partial/full/weighted pools
|
||||
and codec round trips. Created Standard Single, Flat Tiny, Cave Tiny and Void
|
||||
Single plans; Cave included the new 26.3 Sulfur Caves biome. An impossible
|
||||
controller-only Void Tiny pool was refused with the distinct-biome message.
|
||||
Generator pools survived unload/reload, reseed and full server restart.
|
||||
The server was stopped and the temporary world deleted. Binder interaction
|
||||
and in-game biome layouts still require manual validation. No commit, push
|
||||
or publication was performed.
|
||||
|
||||
## Unpaired material completion
|
||||
|
||||
`1.0.1.89-beta.1` adapts 1.21.1 `AgeFeatureSelection.implied`. A shared pure
|
||||
normalizer expands an unpaired material into an internal material/feature
|
||||
pair, keyed by Age seed, material ID and its original book index. Rock, lake
|
||||
and terrain-feature compilers all use the same completed view. Original book
|
||||
pages stay unchanged and no random selection happens at render/load time.
|
||||
Explicit feature targets suppress completion, including incompatible targets
|
||||
that must still be rejected by the current strict grammar.
|
||||
|
||||
Candidate ordering and terrain restrictions follow root's material-feature
|
||||
list: Rocks/Floating Islands/Tendrils/Spheres/Spikes/Obelisks for solids and
|
||||
the three lake types for fluids, filtered by supported terrain. Cave only
|
||||
permits the two terrain-independent solid features; Void also permits floating
|
||||
islands; Flat excludes Rocks. No fallback fluid feature exists on Flat, Cave
|
||||
or Void. This does not add page-free random features, nor remove the existing
|
||||
per-feature caps or introduce instability recovery. Resulting plans use their
|
||||
existing save codecs, so no catalog/protocol change is needed.
|
||||
|
||||
The operator fixture checks 64 seeds on each terrain: independent consecutive
|
||||
materials, deterministic/idempotent completion, explicit precedence, candidate
|
||||
coverage, fluid retention and incompatible-fluid rejection. Persistence and
|
||||
actual generator plans are inspected with `feature_plan` without generating
|
||||
chunks. Client binder interaction and feature visibility remain manual checks.
|
||||
|
||||
The .89 build and disposable server checks passed: seeded fixture assertions,
|
||||
Standard Glowstone Spikes, Cave Diamond Spheres, Void Stone Tendrils, Flat
|
||||
Glowstone Obelisks and Standard Water Deep Lakes. Cave Water was refused.
|
||||
Feature plans and materials survived unload/reload, terrain reseed and full
|
||||
restart. The server was stopped and its temporary world deleted. No commit,
|
||||
push or publication was performed.
|
||||
|
||||
## Page-free random material features
|
||||
|
||||
`1.0.1.90-beta.1` adapts the material and rare-formation portion of 1.21.1
|
||||
`AgeFeatureSelection.randomChoices`. A new creation-only selector shares the
|
||||
production authored plan compilers rather than duplicating generator logic.
|
||||
It rolls 0–2 unique material feature types, uses root's candidate ordering and
|
||||
Legacy rank chooser, removes chosen types, and selects full-collision solids
|
||||
or source fluids from the registered sorted pools. Terrain eligibility uses
|
||||
the current port validator. The separate seeded Skylands and Star Fissure
|
||||
rolls and the 1-in-10 Crystal Formations roll follow root's rules.
|
||||
|
||||
Player Link-Panel-only creation and `age create_random` share this selector.
|
||||
Authored books still use their own feature compilers, including implied
|
||||
materials from .89. Plans are frozen in existing save fields, without extra
|
||||
book pages or a protocol change. Old Ages keep their original plans.
|
||||
Random structures, random-page policies and instability are not claimed by
|
||||
this slice. Material values can be valuable/hazardous, matching the root pool;
|
||||
the instability port must account for that before stable release.
|
||||
|
||||
`create_random_features` checks 64 seeds across all terrain types: seeded
|
||||
determinism, counts 0/1/2, unique feature types, all nine candidate families,
|
||||
terrain compatibility, rare-feature coverage, and plan codec round trips.
|
||||
`feature_plan` treats an absent feature generator as a valid empty result.
|
||||
Client feature visibility remains a manual check.
|
||||
|
||||
The .90 build and disposable server checks passed. The seeded matrix covered
|
||||
all six terrains and all nine material feature families. Created surface,
|
||||
Cave, Flat and Void fixtures, including lakes, rare Skylands and a Star
|
||||
Fissure, and verified the production `create_random` plan. Seed 0 Standard
|
||||
correctly produced no features; seed 1 produced a single lake. Saved plans
|
||||
survived unload/reload, reseed and full restart. The server was stopped and
|
||||
its temporary world deleted. Nothing was committed, pushed or published.
|
||||
|
||||
## Page-free random structures
|
||||
|
||||
`1.0.1.91-beta.1` ports `AgeStructureSelection.randomChoices`: an independent
|
||||
seed stream rolls 0–2 unique candidates using Legacy ranks. Terrain and
|
||||
registry availability are checked, then the selected biome pool must intersect
|
||||
the structure set's normal biome eligibility. This is deliberately stricter
|
||||
than authored pages, which retain their existing biome overrides. Native
|
||||
Flat uses Plains, Native Cave uses the backend's Lush Caves fallback, and
|
||||
other native noise terrain uses the Overworld LevelStem biome source. A
|
||||
non-Native plan uses its saved biome IDs. Abandoned Camps are added after
|
||||
the root candidate list at rank 3. Cave Dungeons remain excluded by current
|
||||
port support, whereas root permits that combination; it needs a separate
|
||||
placement validation before enabling it.
|
||||
|
||||
The combined random feature resolver preserves .90 material/rare choices,
|
||||
adds Dungeons separately, and merges structure pages into the saved terrain
|
||||
feature plan. A new optional `structure_control` field defaults false for
|
||||
old profiles and is true for new random Ages, even for an empty selection.
|
||||
The generator applies its existing controlled-set filter when that flag is
|
||||
true. This prevents zero choices from accidentally retaining all vanilla
|
||||
controlled sets. Other native structure families still use their normal
|
||||
biome gate. Existing authored/old plans are not rewritten, and no catalog
|
||||
protocol change is needed.
|
||||
|
||||
The operator fixture checks seeded counts/uniqueness, all terrains, fixed
|
||||
Plains/End/Nether biome pools, native defaults, biome eligibility, the empty
|
||||
controlled-set gate, explicit Village precedence, merge/codec persistence,
|
||||
and old-profile defaults. Actual placement remains an in-game check.
|
||||
|
||||
The .91 build and disposable server checks passed. Fixtures exercised Plains,
|
||||
Native Flat, Nether-biome Cave, End-biome surface and empty Void selection,
|
||||
plus the production random-Age command. Village, Fortress and Dungeon plans,
|
||||
and an intentionally empty controlled plan, survived unload/reload, reseed
|
||||
and full restart. Namespaced biome arguments were checked. The server was
|
||||
stopped and its temporary world deleted. No commit, push or publication was
|
||||
performed; generated structure placement remains a manual client check.
|
||||
|
||||
## Cave Dungeon parity
|
||||
|
||||
`1.0.1.92-beta.1` closes the Cave Dungeon terrain exclusion documented in .91.
|
||||
Root `AgeStructureSelection.error` permits Dungeons on noise terrain, which
|
||||
includes Cave. The 26.3 feature and placement implementation were already in
|
||||
place; the port's shared lake/dungeon Cave rejection blocked authoring and,
|
||||
through the availability check, random selection. Splitting that validation
|
||||
permits Cave Dungeons without allowing Cave lakes or Flat/Void Dungeons.
|
||||
|
||||
The two targets' `worldgen/placed_feature/dungeons.json` files compare exactly:
|
||||
vanilla monster_room, count 8, in-square and full-height uniform placement
|
||||
using above-bottom/below-top anchors. No legacy Y=0 assumption is introduced.
|
||||
Vanilla's solid floor/ceiling and opening-count requirements still determine
|
||||
successful placement. The 32-page cap and per-occurrence deterministic seed
|
||||
remain unchanged. New random Cave Ages now consider Dungeons automatically;
|
||||
old frozen plans are not changed.
|
||||
|
||||
The extended `create_dungeons` fixture checks Cave stacking/cap and the
|
||||
remaining lake/Flat/Void restrictions. The random-structure matrix now requires
|
||||
Cave Dungeon coverage. `dungeons_probe` accepts an optional 1–4 chunk-side
|
||||
bound for manual tests; it is not run automatically, avoiding a large sync
|
||||
chunk-generation scan. Actual dungeon placement is handed to the client check.
|
||||
|
||||
The .92 build and disposable server checks passed: Cave and surface authored
|
||||
fixtures, 32-page stacking/overflow, retained lake and Flat/Void rejection,
|
||||
and random-structure coverage including a Nether Cave Dungeon selection.
|
||||
Dungeon counts survived unload/reload and full restart; frozen random plans
|
||||
survived reseed. Placement JSON matched the 1.21.1 file byte-for-byte. The
|
||||
server was stopped and its temporary world deleted. No commit, push or
|
||||
publication was performed. No dungeon chunk scan was run automatically.
|
||||
|
||||
## Biome-specific Nether and End materials
|
||||
|
||||
`1.0.1.93-beta.1` ports root `AgeDimensionService.withBiomeMaterialRules`.
|
||||
The backend was using `caves.materialRule()` unchanged, which selects
|
||||
`minecraft:overworld_caves` and can apply Overworld grass to Nether biomes.
|
||||
The new noise-settings wrapper sequences the five vanilla End biomes' registered
|
||||
End rule, then the five vanilla Nether biomes' registered Nether rule, then
|
||||
the original terrain rule. This fixes Cave Nether coverings and the equivalent
|
||||
End/Nether mismatch in authored Standard, Amplified and Island noise Ages.
|
||||
It uses the active rule registry rather than copying vanilla material tables.
|
||||
|
||||
All non-material settings are preserved. Dry Cave's AIR default fluid, empty
|
||||
aquifer config and minimum-relative sea level remain intact. Native Nether
|
||||
surface rules can still place their own lava patches; this does not restore
|
||||
flooded Cave aquifers. Flat/Void layer materials and custom feature materials
|
||||
are not rewritten. Old saved Ages pick up the rule when reloaded, but only
|
||||
newly generated chunks change; no generated blocks are retroactively edited.
|
||||
No profile field or network protocol change is required.
|
||||
|
||||
The creation fixture verifies unchanged geometry/router/default blocks and
|
||||
fluids, aquifers and sea level for four noise presets, and round-trips the
|
||||
composed material rule with registry-aware codecs. `material_probe` limits
|
||||
generation to one terrain-stage chunk and reports actual block counts.
|
||||
|
||||
Build, registry-aware rule codec tests and disposable server terrain checks
|
||||
passed. All five Nether Cave fixtures generated their native material families
|
||||
without grass/dirt: Nylium, Soul Sand/Soil, Basalt/Blackstone or Netherrack.
|
||||
Standard The End and Island End Highlands generated End Stone; Lush Cave's
|
||||
original Overworld materials remained present. Reload retained the rules, and
|
||||
fresh chunks after full restart again used Nylium/End Stone. No full feature
|
||||
or entity chunk scans were run. The server was stopped and temporary world
|
||||
deleted. Nothing was committed, pushed or published.
|
||||
|
||||
## Verification of this first slice
|
||||
|
||||
The 1.21.1 `compileJava` and `build` tasks passed offline after the backend
|
||||
|
||||
Reference in new issue
Block a user