From 40770841eea271ae5198246d9f3fa65a178a9cc7 Mon Sep 17 00:00:00 2001 From: Dustin Norberg Date: Wed, 4 Nov 2026 18:08:12 -0500 Subject: [PATCH] Port celestial systems and seeded Age completion to 26.3 beta --- README.md | 9 +- dev images/Pasted image (2).png | Bin 243685 -> 0 bytes dev images/Pasted image.png | Bin 0 -> 165953 bytes docs/MINECRAFT_26_3_PORT.md | 498 +++++++++++ ports/mc263/README.md | 348 +++++++- ports/mc263/RELEASE_NOTES_1.0.1.93-beta.1.md | 83 ++ ports/mc263/gradle.properties | 2 +- ports/mc263/port_en_us.json | 54 +- .../rivencraft/age/AgeCatalogSync.java | 2 +- .../rivencraft/age/PortAgeColors.java | 47 +- .../rivencraft/age/PortAgeCommands.java | 831 +++++++++++++++++- .../age/PortBiomeMaterialRules.java | 31 + .../rivencraft/age/PortCelestialBody.java | 96 ++ .../dnorberg/rivencraft/age/PortDayCycle.java | 164 +++- .../age/PortFeatureChunkGenerator.java | 8 +- .../age/PortRandomAgeSelection.java | 3 +- .../age/PortRandomFeatureSelection.java | 85 ++ .../age/PortRandomStructureSelection.java | 69 ++ .../rivencraft/age/PortRankedChoice.java | 36 + .../dnorberg/rivencraft/age/PortSkyStyle.java | 13 +- .../rivencraft/age/PortStructurePages.java | 14 + .../age/PortTerrainFeaturePlan.java | 13 +- .../rivencraft/age/RuntimeAgeBackend.java | 2 +- .../rivencraft/client/PortCelestialDiscs.java | 85 ++ .../rivencraft/client/StaticSkyState.java | 9 + .../mixin/AgeColorAttributesMixin.java | 4 +- .../rivencraft/mixin/AgeDayTimelineMixin.java | 25 + .../mixin/StaticSkyRendererMixin.java | 196 ++++- .../rivencraft/mixin/StaticSkyStateMixin.java | 16 + .../network/PortBookNetworking.java | 18 +- .../writing/PortAuthoredWriting.java | 62 +- .../writing/PortMaterialCompletion.java | 68 ++ 32 files changed, 2792 insertions(+), 99 deletions(-) delete mode 100644 dev images/Pasted image (2).png create mode 100644 dev images/Pasted image.png create mode 100644 ports/mc263/RELEASE_NOTES_1.0.1.93-beta.1.md create mode 100644 ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortBiomeMaterialRules.java create mode 100644 ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortCelestialBody.java create mode 100644 ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortRandomFeatureSelection.java create mode 100644 ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortRandomStructureSelection.java create mode 100644 ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortRankedChoice.java create mode 100644 ports/mc263/src/main/java/net/dnorberg/rivencraft/client/PortCelestialDiscs.java create mode 100644 ports/mc263/src/main/java/net/dnorberg/rivencraft/writing/PortMaterialCompletion.java diff --git a/README.md b/README.md index de67953..a5c0f4e 100644 --- a/README.md +++ b/README.md @@ -15,11 +15,12 @@ incomplete **Minecraft 26.3 beta** is available: Java 25, NeoForge 26.3.0.99, and a first-party Age backend (no Dynamic Dimensions or Bad Packets). It now supports authored terrain/biomes, structure and vegetation pages, independent Age weather/lighting, seeded and colorable Overworld/Nether/End/Static skies, -Normal Time length/phase/direction/bearing and sun-size controls, -and a growing set of generation features, -but does not yet provide full 1.21.1 gameplay or optional-integration parity. +independent Sun/Moon controls, multiple bodies and eclipses, seeded biome and +feature completion, and random structure selection. Nether/End noise-biome +materials now follow their native rules. The beta does not yet provide full +1.21.1 gameplay or optional-integration parity. See the [26.3 beta guide](ports/mc263/README.md) and -[latest beta release notes](ports/mc263/RELEASE_NOTES_1.0.1.78-beta.1.md). +[latest beta release notes](ports/mc263/RELEASE_NOTES_1.0.1.93-beta.1.md). Keep the builds and their saves separate, and back up worlds before updating. ## Getting started diff --git a/dev images/Pasted image (2).png b/dev images/Pasted image (2).png deleted file mode 100644 index cfb83c0ca4ea18b77f8ba90433336a47e266cc16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243685 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�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�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%0A%AEjI^UF$)&cRGb= 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 C{|j?FD*f&JKSztmpD@0tkit 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 diff --git a/dev images/Pasted image.png b/dev images/Pasted image.png new file mode 100644 index 0000000000000000000000000000000000000000..6764c5a5715883c67c4868c61a8b383cc7747fee GIT binary patch literal 165953 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�-*NoRW@(iEtrLE4m_U- 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¨9WOgwQed=uqFCzmJL2T@6>1>W3gt53;yv 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

E`RcE44!N4YJw{_ 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 + <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 +` 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 ` 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 +` 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 [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 ` 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 [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 +`; `age biome_pool ` 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 + ` and `age feature_plan ` (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 ` +creates a feature-only fixture and `age feature_plan ` 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 + ` creates a controlled fixture; +`age feature_plan ` 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 cave` creates an eight-page +fixture. `age dungeons_probe [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 ` +and `age material_probe [chunk_x chunk_z]`. The latter examines one +terrain-stage chunk (default 0,0) without feature, lighting or entity generation. Nothing is committed +or published without explicit request. + From the repository root: ```sh diff --git a/ports/mc263/RELEASE_NOTES_1.0.1.93-beta.1.md b/ports/mc263/RELEASE_NOTES_1.0.1.93-beta.1.md new file mode 100644 index 0000000..d10eb80 --- /dev/null +++ b/ports/mc263/RELEASE_NOTES_1.0.1.93-beta.1.md @@ -0,0 +1,83 @@ +# Rivencraft 26.3 beta 1.0.1.93-beta.1 + +Collects the player-validated port slices .79–.93 since 1.0.1.78-beta.1. +This beta is not yet feature-complete with Minecraft 1.21.1. + +## Celestial writing and rendering + +- Ported standalone Sun and Moon pages and multiple independently authored + bodies, up to ten of each. Each controller consumes its own ordered Color, + Length, Phase, Direction, Angle and Size modifiers; Number pages fine-tune + supported values. Normal Time retains its paired sun/moon behavior. +- Color groups before Normal Time tint both bodies; independent Sun/Moon + groups can use different colors. Authored moons use full-moon sprites as in + 1.21.1; native Normal Time retains calendar moon phases. +- Authored bodies render over Overworld, Nether, End and animated Static + backgrounds. Opaque centers retain transparent glows. Eclipse alignment + affects body color, background shading and gameplay sky light. +- Bare Sun/Moon pages receive independent seeded colors, sizes, bearings, + phases, directions and lengths, including stopped cycles. Explicit modifier + groups retain their authored behavior. +- Books without celestial controllers seed-complete 0–3 suns and 0–3 moons. + Empty skies do not accidentally draw a vanilla pair. Explicit controllers + suppress extra-body completion. Link-Panel-only random Ages also receive + seeded sky/fog colors using the 1.21.1 palette. +- All resolved settings are saved, not rerolled by viewing a book, restarting, + or reseeding future terrain. Existing Age profiles remain unchanged. + +## Biome and feature completion + +- Explicit biome-distribution pages can now seed-complete missing biome + pools. Single selects one; other nonnative controllers require two distinct + biomes. Fully omitted pools use the seeded continuation rule, bounded by the + available biome pool. Authored pools fill only the missing minimum. +- Supplied biome order and duplicate weights are retained. Two distinct + supplied biomes do not acquire an unwanted third biome. Cave pools use + recognized Cave/Nether biomes; Void does not inject The Void alongside + supplied biome pages. +- Unpaired Block/Fluid pages receive seeded terrain-compatible implied + features. Consecutive materials resolve independently; explicit pairs remain + authoritative. Unsupported pairings and the current feature caps remain. +- Link-Panel-only Ages roll 0–2 distinct material feature types with Legacy + rank weighting and compatible registered solids/source fluids. Additional + rare rolls cover Skylands, Crystal Formations and Star Fissures. +- Random Ages also roll 0–2 distinct structure families, filtered by terrain, + registry availability and the chosen biome pool. Newer structures, including + 26.3 Abandoned Camps, are rare candidates. An intentionally empty selection + disables page-controlled structure sets rather than enabling all of them. +- Cave terrain now supports authored and randomly selected Dungeons, matching + 1.21.1. Dungeon placement retains eight monster-room attempts per page and + modern build-height anchors. Flat/Void Dungeons and Cave lakes remain + unsupported. + +## Nether and End material correction + +- Ported 1.21.1's biome-specific material-rule layer for noise terrain. Nether + biomes in Cave Ages now use their native Netherrack, Nylium, Soul Sand/Soil, + Basalt and Blackstone rules instead of Overworld grass. End biomes use End + Stone. Other biomes retain the original terrain rules. +- Geometry, biome selection, dry Cave aquifers and other environment settings + are preserved. Flat/Void layers and authored feature materials are unchanged. +- Existing Ages pick up the correction after reload, but only new chunks + change. Already generated grass is not replaced. + +## Compatibility and validation + +- Requires Minecraft **26.3**, NeoForge **26.3.0.99**, and **Java 25**. Dynamic + Dimensions and Bad Packets are not required. Minecraft 1.21.1 is unchanged. +- Catalog protocol is **10**: use matching client/server builds. +- Player in-game checks passed for all included slices. Builds and targeted + disposable-server checks covered writing, seeded completion, codecs/catalog + round trips, terrain materials, reload, reseed and restart. Temporary servers + and test worlds were removed. This is not a full automated GameTest run. +- Full writing recovery, discovery/stations, instability, portals and optional + integration parity remain unfinished. Random-page eligibility config also + remains pending; valuable/hazardous random materials currently lack the + finished version's instability scoring. Creative availability does not imply + full page support. Number-controlled Static resolution (#109) and time-page + naming (#110) remain separate work. +- Beta save compatibility is not guaranteed. Back up worlds and keep the two + Minecraft version tracks and saves separate. + +Report issues and help improve the wiki at +[BlackSheep Git](https://git.paddedcell.org/dnorberg/rivencraft). diff --git a/ports/mc263/gradle.properties b/ports/mc263/gradle.properties index 63c42fb..6dc6d3e 100644 --- a/ports/mc263/gradle.properties +++ b/ports/mc263/gradle.properties @@ -7,4 +7,4 @@ neo_version=26.3.0.99 mod_id=rivencraft mod_name=Rivencraft mod_license=LGPL-3.0-or-later -mod_version=1.0.1.78-beta.1 +mod_version=1.0.1.93-beta.1 diff --git a/ports/mc263/port_en_us.json b/ports/mc263/port_en_us.json index cf9c570..e02d1d5 100644 --- a/ports/mc263/port_en_us.json +++ b/ports/mc263/port_en_us.json @@ -9,33 +9,35 @@ "item.rivencraft.page.symbol.implemented": "Implemented in 26.3; book and terrain requirements still apply.", "symbol.rivencraft.weather.normal.description": "Use an independent normal weather cycle. Cave terrain keeps weather off.", "symbol.rivencraft.sky.overworld.description": "Use the native Overworld sky. Terrain and lighting remain independently authored.", - "symbol.rivencraft.sky.nether.description": "Use a Nether-style sky and reddish fog, without Nether terrain or gameplay rules.", - "symbol.rivencraft.sky.end.description": "Use the native End sky backdrop, without End terrain or a dragon fight.", - "symbol.rivencraft.sky.static.description": "Animated static surrounds the Age. Preceding color pages tint it; otherwise it is gray.", + "symbol.rivencraft.sky.nether.description": "Use a Nether-style reddish fog backdrop. Authored celestials render over it; terrain and gameplay rules remain independent.", + "symbol.rivencraft.sky.end.description": "Use the native End sky backdrop with authored celestials over it, without End terrain or a dragon fight.", + "symbol.rivencraft.sky.static.description": "Animated static surrounds the Age, behind authored celestials. Preceding colors tint it; otherwise it is gray.", "symbol.rivencraft.lighting.ambient_color": "Ambient Light Color", "symbol.rivencraft.lighting.ambient_color.description": "Apply preceding shared colors to ambient light. Use Bright separately for full effective ambient lighting.", "symbol.rivencraft.number.description": "Before Color: value × 10 per channel. Before Length: value × 0.08 days. Before Phase/Angle: value × 15 degrees. Before Size: 0.25× to 3× (0-24).", - "symbol.rivencraft.size.small.description": "Before Normal Time: render the sun at 0.5× size. Its paired moon stays normal-sized, matching 1.21.1. A preceding Number overrides the size.", - "symbol.rivencraft.size.normal.description": "Before Normal Time: render the sun at 1× size. A preceding Number selects 0.25× through 3× (0-24). Its paired moon is unchanged.", - "symbol.rivencraft.size.large.description": "Before Normal Time: render the sun at 2× size. A preceding Number selects 0.25× through 3× (0-24). Its paired moon is unchanged.", - "symbol.rivencraft.angle.north.description": "Before Normal Time: set the native celestial orbit bearing to 0 degrees. A preceding Number overrides Angle in 15-degree steps.", - "symbol.rivencraft.angle.east.description": "Before Normal Time: set the native celestial orbit bearing to 90 degrees. A preceding Number overrides Angle in 15-degree steps.", - "symbol.rivencraft.angle.south.description": "Before Normal Time: set the native celestial orbit bearing to 180 degrees. A preceding Number overrides Angle in 15-degree steps.", - "symbol.rivencraft.angle.west.description": "Before Normal Time: set the native celestial orbit bearing to 270 degrees. A preceding Number overrides Angle in 15-degree steps.", - "symbol.rivencraft.phase.rising.description": "Before Normal Time: start this Age's native cycle at sunrise. A preceding Number overrides Phase in 15-degree steps from midnight.", - "symbol.rivencraft.phase.zenith.description": "Before Normal Time: start this Age's native cycle at noon. With Zero Length it remains noon.", - "symbol.rivencraft.phase.setting.description": "Before Normal Time: start this Age's native cycle at sunset. A preceding Number overrides Phase in 15-degree steps from midnight.", - "symbol.rivencraft.phase.nadir.description": "Before Normal Time: start this Age's native cycle at midnight. With Zero Length it remains midnight.", - "symbol.rivencraft.direction.clockwise.description": "Before Normal Time: advance this Age's native day cycle in its usual direction.", - "symbol.rivencraft.direction.counterclockwise.description": "Before Normal Time: run this Age's native day cycle in reverse. Does not change the Overworld clock.", - "symbol.rivencraft.celestial.normal_time.description": "Use the native sun/moon cycle with Length, Phase, Direction, Angle, and sun Size modifiers. Without a Length, use one normal day.", - "symbol.rivencraft.period.zero.description": "Before Normal Time: freeze the Age's day timelines at the written Phase, or a saved seeded time if Phase is omitted. A preceding Number overrides the Length.", - "symbol.rivencraft.period.half.description": "Before Normal Time: a half-length day (twice as fast). A preceding Number sets Length to value × 0.08 days.", - "symbol.rivencraft.period.full.description": "Before Normal Time: a normal-length day. A preceding Number sets Length to value × 0.08 days.", - "symbol.rivencraft.period.double.description": "Before Normal Time: a double-length day (half as fast). A preceding Number sets Length to value × 0.08 days.", - "symbol.rivencraft.color.red.description": "Add red to the next sky or Ambient Light Color target; trailing colors tint the sky. Precede with a Number, or use a seeded amount.", - "symbol.rivencraft.color.green.description": "Add green to the next sky or Ambient Light Color target; trailing colors tint the sky. Precede with a Number, or use a seeded amount.", - "symbol.rivencraft.color.blue.description": "Add blue to the next sky or Ambient Light Color target; trailing colors tint the sky. Precede with a Number, or use a seeded amount.", + "symbol.rivencraft.size.small.description": "Before Sun/Moon: 0.5× body size. Before Normal Time: size the sun only. A preceding Number overrides the size.", + "symbol.rivencraft.size.normal.description": "Before Sun/Moon: 1× body size. Before Normal Time: size the sun only. A preceding Number selects 0.25× through 3× (0-24).", + "symbol.rivencraft.size.large.description": "Before Sun/Moon: 2× body size. Before Normal Time: size the sun only. A preceding Number selects 0.25× through 3× (0-24).", + "symbol.rivencraft.angle.north.description": "Before Normal Time, Sun or Moon: set orbit bearing to 0 degrees. A preceding Number overrides Angle in 15-degree steps.", + "symbol.rivencraft.angle.east.description": "Before Normal Time, Sun or Moon: set orbit bearing to 90 degrees. A preceding Number overrides Angle in 15-degree steps.", + "symbol.rivencraft.angle.south.description": "Before Normal Time, Sun or Moon: set orbit bearing to 180 degrees. A preceding Number overrides Angle in 15-degree steps.", + "symbol.rivencraft.angle.west.description": "Before Normal Time, Sun or Moon: set orbit bearing to 270 degrees. A preceding Number overrides Angle in 15-degree steps.", + "symbol.rivencraft.phase.rising.description": "Before a celestial controller: start the sun or standalone moon at rising. A preceding Number overrides Phase in 15-degree steps from Nadir.", + "symbol.rivencraft.phase.zenith.description": "Before a celestial controller: start the sun or standalone moon overhead. Zero Length holds this position.", + "symbol.rivencraft.phase.setting.description": "Before a celestial controller: start the sun or standalone moon at setting. A preceding Number overrides Phase in 15-degree steps from Nadir.", + "symbol.rivencraft.phase.nadir.description": "Before a celestial controller: start the sun or standalone moon below the world. Zero Length holds this position.", + "symbol.rivencraft.direction.clockwise.description": "Before Normal Time, Sun or Moon: advance this Age's celestial cycle in its usual direction.", + "symbol.rivencraft.direction.counterclockwise.description": "Before Normal Time, Sun or Moon: reverse this Age's celestial cycle. Does not change the Overworld clock.", + "symbol.rivencraft.celestial.normal_time.description": "Add a sun/moon pair. Preceding modifiers apply to this pair; Size affects its sun only. Colors tint both. Limit ten suns and ten moons per Age.", + "symbol.rivencraft.celestial.sun.description": "Add a sun. A bare page gets saved seeded color, size and orbit controls. Written modifiers preserve authored behavior and reset per controller. Moon alignment causes eclipses; limit ten suns.", + "symbol.rivencraft.celestial.moon.description": "Add a moon with weaker light. A bare page gets saved seeded color, size and orbit controls. Written modifiers preserve authored behavior and reset per controller. Sun alignment causes eclipses; limit ten moons.", + "symbol.rivencraft.period.zero.description": "Before Normal Time, Sun or Moon: freeze at the written Phase, or a saved seeded time if omitted. A preceding Number overrides the Length.", + "symbol.rivencraft.period.half.description": "Before Normal Time, Sun or Moon: a half-length cycle (twice as fast). A preceding Number sets Length to value × 0.08 days.", + "symbol.rivencraft.period.full.description": "Before Normal Time, Sun or Moon: a normal-length cycle. A preceding Number sets Length to value × 0.08 days.", + "symbol.rivencraft.period.double.description": "Before Normal Time, Sun or Moon: a double-length cycle (half as fast). A preceding Number sets Length to value × 0.08 days.", + "symbol.rivencraft.color.red.description": "Add red to the next Sky, Ambient Light Color or celestial controller; trailing colors tint the sky. Precede with a Number, or use a seeded amount.", + "symbol.rivencraft.color.green.description": "Add green to the next Sky, Ambient Light Color or celestial controller; trailing colors tint the sky. Precede with a Number, or use a seeded amount.", + "symbol.rivencraft.color.blue.description": "Add blue to the next Sky, Ambient Light Color or celestial controller; trailing colors tint the sky. Precede with a Number, or use a seeded amount.", "symbol.rivencraft.color.white.description": "Add equally to all RGB channels. Precede with a Number, or use a seeded amount.", "symbol.rivencraft.color.black.description": "Subtract equally from all RGB channels. Precede with a Number, or use a seeded amount.", "symbol.rivencraft.lighting.normal.description": "Use normal skylight and ambient brightness. Cave terrain remains without skylight.", @@ -82,8 +84,10 @@ "symbol.rivencraft.feature.red_shrubs.description": "Add red shrub patches to surface terrain with suitable ground.", "symbol.rivencraft.feature.abandoned_camps": "Abandoned Camps", "symbol.rivencraft.feature.abandoned_camps.description": "Allow abandoned camps on surface noise terrain, including outside their usual biomes.", - "symbol.rivencraft.block.generated.description": "Place immediately before a compatible feature; unpaired materials are not yet supported.", + "symbol.rivencraft.block.generated.description": "Modify the next compatible feature. Without a following feature, choose a compatible feature from the Age seed.", "symbol.rivencraft.biome.native.description": "Use the terrain's native biome source; do not include Biome pages.", + "symbol.rivencraft.feature.dungeons.description": "Add monster-room dungeon attempts throughout surface noise or Cave terrain, including Nether cave biomes. Not Flat or Void.", + "symbol.rivencraft.biome.single.description": "Use one biome across the Age. If omitted, choose an eligible biome from the Age seed.", "symbol.rivencraft.terrain.flat.description": "A level, biome-decorated landscape with its foundation at Y=0.", "symbol.rivencraft.feature.floating_islands.description": "Add high floating islands alongside noise, Flat, or Void terrain; not Cave terrain.", "symbol.rivencraft.feature.caves.description": "Add extra cave carving to noise terrain, including Cave; not Flat or Void.", diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/AgeCatalogSync.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/AgeCatalogSync.java index 012c3a5..4e87551 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/AgeCatalogSync.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/AgeCatalogSync.java @@ -21,7 +21,7 @@ public final class AgeCatalogSync { } public static void registerPayloads(RegisterPayloadHandlersEvent event) { - var registrar = event.registrar("6"); + var registrar = event.registrar("10"); registrar.playToClient(AgeCatalogPayload.TYPE, AgeCatalogPayload.STREAM_CODEC); registrar.playToServer(AgeCatalogAckPayload.TYPE, AgeCatalogAckPayload.STREAM_CODEC, (payload, context) -> { diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortAgeColors.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortAgeColors.java index 8447e55..0eaf46f 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortAgeColors.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortAgeColors.java @@ -14,22 +14,27 @@ import org.joml.Vector3f; import org.joml.Vector3fc; /** Frozen shared-color writing, adapted from 1.21.1 AgeSkyProfile. -1 means native. */ -public record PortAgeColors(int sky, int ambient) { +public record PortAgeColors(int sky, int ambient, int celestial) { public static final PortAgeColors NATIVE = new PortAgeColors(-1, -1); public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( Codec.intRange(-1, 0xffffff).fieldOf("sky").forGetter(PortAgeColors::sky), - Codec.intRange(-1, 0xffffff).fieldOf("ambient").forGetter(PortAgeColors::ambient) + Codec.intRange(-1, 0xffffff).fieldOf("ambient").forGetter(PortAgeColors::ambient), + Codec.intRange(-1, 0xffffff).optionalFieldOf("celestial", -1).forGetter(PortAgeColors::celestial) ).apply(instance, PortAgeColors::new)); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.INT, PortAgeColors::sky, ByteBufCodecs.INT, PortAgeColors::ambient, PortAgeColors::new); + ByteBufCodecs.INT, PortAgeColors::sky, ByteBufCodecs.INT, PortAgeColors::ambient, + ByteBufCodecs.INT, PortAgeColors::celestial, PortAgeColors::new); public static final Identifier AMBIENT = Identifier.fromNamespaceAndPath("rivencraft", "lighting/ambient_color"); private static volatile Map clientColors = Map.of(); public PortAgeColors { - if (sky < -1 || sky > 0xffffff || ambient < -1 || ambient > 0xffffff) + if (sky < -1 || sky > 0xffffff || ambient < -1 || ambient > 0xffffff + || celestial < -1 || celestial > 0xffffff) throw new IllegalArgumentException("Invalid Age color"); } + public PortAgeColors(int sky, int ambient) { this(sky, ambient, -1); } + public static void updateClient(Map colors) { clientColors = Map.copyOf(colors); } public static PortAgeColors forLevel(Level level) { @@ -65,7 +70,7 @@ public record PortAgeColors(int sky, int ambient) { public static PortAgeColors compile(List pages, long seed) { if (!validNumbers(pages)) throw new IllegalArgumentException("Number pages must precede a supported Color, Length, Phase, Angle, or Size modifier"); - int red = 0, green = 0, blue = 0, sky = -1, ambient = -1; + int red = 0, green = 0, blue = 0, sky = -1, ambient = -1, celestial = -1; boolean written = false; for (int i = 0; i < pages.size(); i++) { Identifier page = pages.get(i); @@ -81,17 +86,43 @@ public record PortAgeColors(int sky, int ambient) { case "color/white" -> { red += amount; green += amount; blue += amount; } case "color/black" -> { red -= amount; green -= amount; blue -= amount; } } - } else if (PortSkyStyle.forPage(page) != null || page.equals(AMBIENT)) { + } else if (PortSkyStyle.forPage(page) != null || page.equals(AMBIENT) + || PortDayCycle.isController(page)) { + if (PortDayCycle.isController(page)) celestial = -1; if (written) { int rgb = clamp(red) << 16 | clamp(green) << 8 | clamp(blue); - if (page.equals(AMBIENT)) ambient = rgb; else sky = rgb; + if (page.equals(AMBIENT)) ambient = rgb; + else if (PortDayCycle.isController(page)) celestial = rgb; + else sky = rgb; } red = green = blue = 0; written = false; } } if (written) sky = clamp(red) << 16 | clamp(green) << 8 | clamp(blue); - return new PortAgeColors(sky, ambient); + return new PortAgeColors(sky, ambient, celestial); + } + + /** Only pageless random Ages receive a random sky tint, as in 1.21.1. */ + public static PortAgeColors resolve(List pages, long seed) { + if (!pages.isEmpty()) return compile(pages, seed); + var random = new Random(seed ^ 0x534B5950524F464CL); + random.nextInt(5); // Root sky-style draw precedes the sky-color draw. + return new PortAgeColors(randomColor(random, true), -1); + } + + /** Shared palette; retain .85's truncation for already-defined body defaults. */ + static int randomColor(Random random, boolean rounded) { + int[] palette = {0xB74A50, 0xD9834B, 0xDBC574, 0x5AAB80, 0x6FA8DF, 0x9870B9, 0xD5DBE1, 0x252531}; + int count = 1 + random.nextInt(3), red = 0, green = 0, blue = 0; + for (int i = 0; i < count; i++) { + int color = palette[random.nextInt(palette.length)]; + red += color >> 16 & 255; + green += color >> 8 & 255; + blue += color & 255; + } + int offset = rounded ? count / 2 : 0; + return (red + offset) / count << 16 | (green + offset) / count << 8 | (blue + offset) / count; } private static int clamp(int value) { return Math.max(0, Math.min(255, value)); } diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortAgeCommands.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortAgeCommands.java index 0321b3d..8112af6 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortAgeCommands.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortAgeCommands.java @@ -8,6 +8,7 @@ import net.dnorberg.rivencraft.Rivencraft; import net.dnorberg.rivencraft.item.LinkBookTarget; import net.minecraft.commands.Commands; import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.arguments.IdentifierArgument; import net.minecraft.core.registries.Registries; import net.minecraft.core.component.DataComponents; import net.minecraft.network.chat.Component; @@ -68,6 +69,85 @@ public final class PortAgeCommands { return 1; }))) .then(Commands.literal("age") + .then(Commands.literal("create_biome_surface") + .then(Commands.argument("name", StringArgumentType.word()) + .then(Commands.argument("seed", LongArgumentType.longArg()) + .then(Commands.argument("terrain", StringArgumentType.word()) + .then(Commands.argument("biome", IdentifierArgument.id()) + .executes(PortAgeCommands::createBiomeSurface)))))) + .then(Commands.literal("material_probe") + .then(Commands.argument("name", StringArgumentType.word()) + .executes(context -> probeBiomeMaterials(context, 0, 0)) + .then(Commands.argument("chunk_x", IntegerArgumentType.integer()) + .then(Commands.argument("chunk_z", IntegerArgumentType.integer()) + .executes(context -> probeBiomeMaterials(context, + IntegerArgumentType.getInteger(context, "chunk_x"), + IntegerArgumentType.getInteger(context, "chunk_z"))))))) + .then(Commands.literal("create_random_structures") + .then(Commands.argument("name", StringArgumentType.word()) + .then(Commands.argument("seed", LongArgumentType.longArg()) + .then(Commands.argument("terrain", StringArgumentType.word()) + .then(Commands.argument("biome", IdentifierArgument.id()) + .executes(PortAgeCommands::createRandomStructures)))))) + .then(Commands.literal("create_random_features") + .then(Commands.argument("name", StringArgumentType.word()) + .then(Commands.argument("seed", LongArgumentType.longArg()) + .then(Commands.argument("terrain", StringArgumentType.word()) + .executes(PortAgeCommands::createRandomFeatures))))) + .then(Commands.literal("create_implied_material") + .then(Commands.argument("name", StringArgumentType.word()) + .then(Commands.argument("seed", LongArgumentType.longArg()) + .then(Commands.argument("terrain", StringArgumentType.word()) + .then(Commands.argument("material", IdentifierArgument.id()) + .executes(PortAgeCommands::createImpliedMaterial)))))) + .then(Commands.literal("feature_plan") + .then(Commands.argument("name", StringArgumentType.word()) + .executes(PortAgeCommands::probeFeaturePlan))) + .then(Commands.literal("create_completed_biomes") + .then(Commands.argument("name", StringArgumentType.word()) + .then(Commands.argument("seed", LongArgumentType.longArg()) + .then(Commands.argument("terrain", StringArgumentType.word()) + .then(Commands.argument("distribution", StringArgumentType.word()) + .executes(PortAgeCommands::createCompletedBiomes)))))) + .then(Commands.literal("biome_pool") + .then(Commands.argument("name", StringArgumentType.word()) + .executes(PortAgeCommands::probeBiomePool))) + .then(Commands.literal("create_completed_sky") + .then(Commands.argument("name", StringArgumentType.word()) + .then(Commands.argument("seed", LongArgumentType.longArg()) + .executes(context -> createCompletedSky(context, null)) + .then(Commands.argument("sky", StringArgumentType.word()) + .executes(context -> createCompletedSky(context, + StringArgumentType.getString(context, "sky"))))))) + .then(Commands.literal("create_random_celestials") + .then(Commands.argument("name", StringArgumentType.word()) + .then(Commands.argument("seed", LongArgumentType.longArg()) + .executes(PortAgeCommands::createRandomCelestialsAge)))) + .then(Commands.literal("create_eclipse") + .then(Commands.argument("name", StringArgumentType.word()) + .then(Commands.argument("seed", LongArgumentType.longArg()) + .then(Commands.argument("mode", StringArgumentType.word()) + .executes(PortAgeCommands::createEclipseAge) + .then(Commands.argument("sky", StringArgumentType.word()) + .executes(context -> createEclipseAge(context, + StringArgumentType.getString(context, "sky")))))))) + .then(Commands.literal("create_celestials") + .then(Commands.argument("name", StringArgumentType.word()) + .then(Commands.argument("seed", LongArgumentType.longArg()) + .executes(PortAgeCommands::createMultiBodyAge)))) + .then(Commands.literal("create_body") + .then(Commands.argument("name", StringArgumentType.word()) + .then(Commands.argument("seed", LongArgumentType.longArg()) + .then(Commands.argument("body", StringArgumentType.word()) + .then(Commands.argument("phase", StringArgumentType.word()) + .executes(PortAgeCommands::createBodyAge)))))) + .then(Commands.literal("create_celestial_color") + .then(Commands.argument("name", StringArgumentType.word()) + .then(Commands.argument("seed", LongArgumentType.longArg()) + .then(Commands.argument("phase", StringArgumentType.word()) + .then(Commands.argument("color", StringArgumentType.word()) + .then(Commands.argument("number", IntegerArgumentType.integer(0, 24)) + .executes(PortAgeCommands::createCelestialColorAge))))))) .then(Commands.literal("create_size") .then(Commands.argument("name", StringArgumentType.word()) .then(Commands.argument("seed", LongArgumentType.longArg()) @@ -209,8 +289,13 @@ public final class PortAgeCommands { PortRandomAgeSelection.Selection selected = PortRandomAgeSelection.select( context.getSource().getServer(), seed); var environment = PortEnvironmentSelection.resolve(java.util.List.of(), seed, selected.terrain()); + var cycle = PortDayCycle.resolve(java.util.List.of(), seed, + PortDayCycle.nativeTicks(context.getSource().getServer().overworld())); + var features = PortRandomFeatureSelection.select(context.getSource().getServer(), + seed, selected.terrain(), selected.biomes()); int created = createAge(context, selected.terrain(), selected.biomes(), - null, null, 0, null, null, environment); + features.rocks(), null, features.dungeons(), features.lakes(), features.terrain(), environment, cycle, + PortAgeColors.resolve(java.util.List.of(), seed)); if (created != 0) context.getSource().sendSuccess(() -> Component.literal( "Random Age plan: terrain=" + selected.terrain() + " biomes=" + selected.biomes() @@ -244,7 +329,9 @@ public final class PortAgeCommands { .then(Commands.argument("name", StringArgumentType.word()) .then(Commands.argument("seed", LongArgumentType.longArg()) .executes(context -> createAge(context, PortAgeTerrain.STANDARD, - null, null, null, testDungeons()))))) + null, null, null, testDungeons())) + .then(Commands.argument("terrain", StringArgumentType.word()) + .executes(PortAgeCommands::createDungeonTerrain))))) .then(Commands.literal("create_lakes") .then(Commands.argument("name", StringArgumentType.word()) .then(Commands.argument("seed", LongArgumentType.longArg()) @@ -378,7 +465,10 @@ public final class PortAgeCommands { .executes(PortAgeCommands::probeVegetation))) .then(Commands.literal("dungeons_probe") .then(Commands.argument("name", StringArgumentType.word()) - .executes(PortAgeCommands::probeDungeons))) + .executes(context -> probeDungeons(context, 4)) + .then(Commands.argument("chunks", IntegerArgumentType.integer(1, 4)) + .executes(context -> probeDungeons(context, + IntegerArgumentType.getInteger(context, "chunks")))))) .then(Commands.literal("lakes_probe") .then(Commands.argument("name", StringArgumentType.word()) .executes(PortAgeCommands::probeLakes))) @@ -586,12 +676,659 @@ public final class PortAgeCommands { var pos = new net.minecraft.core.BlockPos(0, 80, 0); var sun = level.environmentAttributes().getValue(net.minecraft.world.attribute.EnvironmentAttributes.SUN_ANGLE, pos); var light = level.environmentAttributes().getDimensionValue(net.minecraft.world.attribute.EnvironmentAttributes.SKY_LIGHT_LEVEL); + var moon = level.environmentAttributes().getValue(net.minecraft.world.attribute.EnvironmentAttributes.MOON_ANGLE, pos); + if (cycle.customLight()) { + float expectedAngle = cycle.bodyAngle(source.totalTicks()); + float weather = (1F - level.getRainLevel(1F) * 5F / 16F) + * (1F - level.getThunderLevel(1F) * 5F / 16F); + float expectedLight = 15F - (int) ((1F - cycle.bodyLight(source.totalTicks()) * weather) * 11F); + if (cycle.singleBody() && (Math.abs(sun - expectedAngle) > 0.01F || Math.abs(moon - expectedAngle) > 0.01F) + || Math.abs(light - expectedLight) > 0.01F) + throw new IllegalStateException("Single-body attribute mismatch"); + } context.getSource().sendSuccess(() -> Component.literal("Cycle probe " + ageId(context) + " saved=" + cycle + " nativeTicks=" + source.totalTicks() + " ageTicks=" + sample.totalTicks() - + " sunAngle=" + sun + " skyLight=" + light), false); + + " sunAngle=" + sun + " moonAngle=" + moon + " skyLight=" + light), false); return 1; } + private static int createBiomeSurface(CommandContext context) { + try { + var terrain = PortAgeTerrain.valueOf(StringArgumentType.getString(context, "terrain").toUpperCase(Locale.ROOT)); + var biome = IdentifierArgument.getId(context, "biome"); + var plan = new PortBiomePlan(PortBiomePlan.Distribution.SINGLE, java.util.List.of(biome)); + var server = context.getSource().getServer(); + var registryOps = net.minecraft.resources.RegistryOps.create(com.mojang.serialization.JsonOps.INSTANCE, server.registryAccess()); + for (var key : java.util.List.of(net.minecraft.world.level.levelgen.NoiseGeneratorSettings.OVERWORLD, + net.minecraft.world.level.levelgen.NoiseGeneratorSettings.AMPLIFIED, + net.minecraft.world.level.levelgen.NoiseGeneratorSettings.CAVES, + net.minecraft.world.level.levelgen.NoiseGeneratorSettings.FLOATING_ISLANDS)) { + var base = server.registryAccess().lookupOrThrow(Registries.NOISE_SETTINGS).getOrThrow(key).value(); + var wrapped = PortBiomeMaterialRules.apply(server.registryAccess(), base).value(); + if (!wrapped.noiseSettings().equals(base.noiseSettings()) || wrapped.noiseRouter() != base.noiseRouter() + || wrapped.defaultBlock() != base.defaultBlock() || wrapped.defaultFluid() != base.defaultFluid() + || wrapped.seaLevel() != base.seaLevel() || !wrapped.aquifers().equals(base.aquifers())) + throw new IllegalStateException("Biome material rules changed terrain/aquifer settings"); + var codec = net.minecraft.world.level.levelgen.material.rule.MaterialRule.HOLDER_CODEC; + var encoded = codec.encodeStart(registryOps, wrapped.materialRule()).getOrThrow(); + var decoded = codec.parse(registryOps, encoded).getOrThrow(); + if (!encoded.equals(codec.encodeStart(registryOps, decoded).getOrThrow())) + throw new IllegalStateException("Biome material rule codec round trip failed"); + } + return createAge(context, terrain, plan); + } catch (IllegalArgumentException | IllegalStateException exception) { + context.getSource().sendFailure(Component.literal(exception.getMessage())); + return 0; + } + } + + /** One terrain-stage chunk only: no feature/lighting/entity generation. */ + private static int probeBiomeMaterials(CommandContext context, int chunkX, int chunkZ) { + var level = context.getSource().getServer().getLevel(ResourceKey.create(Registries.DIMENSION, ageId(context))); + if (level == null) { + context.getSource().sendFailure(Component.literal("Age not loaded")); + return 0; + } + var chunk = level.getChunk(chunkX, chunkZ, net.minecraft.world.level.chunk.status.ChunkStatus.TERRAIN); + var counts = new TreeMap(); + var pos = new net.minecraft.core.BlockPos.MutableBlockPos(); + for (int x = 0; x < 16; x++) for (int z = 0; z < 16; z++) + for (int y = chunk.getMinY(); y < chunk.getMaxY(); y++) { + var state = chunk.getBlockState(pos.set(chunk.getPos().getMinBlockX() + x, y, chunk.getPos().getMinBlockZ() + z)); + if (!state.isAir()) counts.merge(net.minecraft.core.registries.BuiltInRegistries.BLOCK + .getKey(state.getBlock()).toString(), 1, Integer::sum); + } + context.getSource().sendSuccess(() -> Component.literal("Terrain materials " + ageId(context) + + " chunk=" + chunkX + "," + chunkZ + " " + counts), false); + return 1; + } + + private static int createRandomStructures(CommandContext context) { + try { + var server = context.getSource().getServer(); + verifyRandomStructures(server); + long seed = LongArgumentType.getLong(context, "seed"); + var terrain = PortAgeTerrain.valueOf(StringArgumentType.getString(context, "terrain").toUpperCase(Locale.ROOT)); + Identifier biome = IdentifierArgument.getId(context, "biome"); + var plan = biome.equals(Identifier.withDefaultNamespace("native")) ? null : new PortBiomePlan(PortBiomePlan.Distribution.SINGLE, + java.util.List.of(biome)); + var selected = PortRandomFeatureSelection.select(server, seed, terrain, plan); + int result = createAge(context, terrain, plan, selected.rocks(), null, selected.dungeons(), selected.lakes(), selected.terrain()); + return result == 0 ? 0 : probeFeaturePlan(context); + } catch (IllegalArgumentException | IllegalStateException exception) { + context.getSource().sendFailure(Component.literal(exception.getMessage())); + return 0; + } + } + + private static void verifyRandomStructures(net.minecraft.server.MinecraftServer server) { + boolean empty = false, one = false, two = false, dungeons = false, caveDungeons = false, modern = false; + for (var terrain : PortAgeTerrain.values()) for (long seed = 0; seed < 64; seed++) { + var selected = PortRandomStructureSelection.select(server, seed, terrain, null); + int count = selected.structures().size() + selected.dungeons(); + if (count > 2 || selected.dungeons() > 1 + || new java.util.HashSet<>(selected.structures()).size() != selected.structures().size() + || !selected.equals(PortRandomStructureSelection.select(server, seed, terrain, null)) + || terrain == PortAgeTerrain.VOID && count != 0) + throw new IllegalStateException("Random structure count/terrain/determinism failed"); + empty |= count == 0; + one |= count == 1; + two |= count == 2; + dungeons |= selected.dungeons() != 0; + caveDungeons |= terrain == PortAgeTerrain.CAVE && selected.dungeons() != 0; + modern |= selected.structures().stream().anyMatch(page -> page.getPath().equals("feature/trial_chambers")); + for (var feature : selected.structures()) + if (!PortStructurePages.supportsTerrain(feature, terrain)) + throw new IllegalStateException("Random structure violated terrain eligibility"); + for (String biome : java.util.List.of("plains", "the_end", "basalt_deltas")) { + var biomeId = Identifier.withDefaultNamespace(biome); + var fixed = new PortBiomePlan(PortBiomePlan.Distribution.SINGLE, java.util.List.of(biomeId)); + var chosen = PortRandomStructureSelection.select(server, seed, terrain, fixed); + for (var feature : chosen.structures()) + if (!PortStructurePages.randomEligible(feature, terrain, java.util.Set.of(biomeId), server.registryAccess())) + throw new IllegalStateException("Random structure violated biome eligibility"); + } + } + if (!empty || !one || !two || !dungeons || !caveDungeons || !modern) + throw new IllegalStateException("Random structure fixture coverage failed"); + var sets = server.registryAccess().lookupOrThrow(Registries.STRUCTURE_SET); + var source = server.overworld().getChunkSource().getGenerator().getBiomeSource(); + var villages = ResourceKey.create(Registries.STRUCTURE_SET, Identifier.withDefaultNamespace("villages")); + var page = Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, "feature/villages"); + if (PortStructurePages.filtered(sets, java.util.List.of(), source).get(villages).isPresent() + || PortStructurePages.filtered(sets, java.util.List.of(page), source).get(villages).isEmpty() + || PortStructurePages.randomEligible(page, PortAgeTerrain.STANDARD, + java.util.Set.of(Identifier.withDefaultNamespace("the_end")), server.registryAccess())) + throw new IllegalStateException("Random empty-selection/biome gate failed"); + var merged = PortRandomFeatureSelection.select(server, 91, PortAgeTerrain.STANDARD, null); + var base = PortRandomFeatureSelection.select(91, PortAgeTerrain.STANDARD); + var encoded = PortTerrainFeaturePlan.CODEC.encodeStart(com.mojang.serialization.JsonOps.INSTANCE, merged.terrain()).getOrThrow(); + if (!merged.terrain().structureControl() + || !java.util.Objects.equals(merged.rocks(), base.rocks()) || !java.util.Objects.equals(merged.lakes(), base.lakes()) + || !merged.terrain().equals(PortTerrainFeaturePlan.CODEC.parse(com.mojang.serialization.JsonOps.INSTANCE, encoded).getOrThrow())) + throw new IllegalStateException("Random structure merge/persistence failed"); + var older = PortTerrainFeaturePlan.CODEC.parse(com.mojang.serialization.JsonOps.INSTANCE, + com.google.gson.JsonParser.parseString("{\"choices\":[],\"skylands\":true}")).getOrThrow(); + if (older.structureControl()) throw new IllegalStateException("Old Age acquired structure control"); + } + + private static int createRandomFeatures(CommandContext context) { + try { + verifyRandomFeatures(); + long seed = LongArgumentType.getLong(context, "seed"); + var terrain = PortAgeTerrain.valueOf(StringArgumentType.getString(context, "terrain").toUpperCase(Locale.ROOT)); + var features = PortRandomFeatureSelection.select(seed, terrain); + int result = createAge(context, terrain, null, features.rocks(), null, 0, features.lakes(), features.terrain()); + return result == 0 ? 0 : probeFeaturePlan(context); + } catch (IllegalArgumentException | IllegalStateException exception) { + context.getSource().sendFailure(Component.literal(exception.getMessage())); + return 0; + } + } + + private static void verifyRandomFeatures() { + var seen = new java.util.HashSet(); + boolean empty = false, single = false, doubleFeature = false, skylands = false, crystals = false, fissures = false; + for (var terrain : PortAgeTerrain.values()) for (long seed = 0; seed < 64; seed++) { + var selected = PortRandomFeatureSelection.select(seed, terrain); + if (!selected.equals(PortRandomFeatureSelection.select(seed, terrain))) + throw new IllegalStateException("Random feature completion is not deterministic"); + var materialPages = new java.util.ArrayList(); + if (selected.rocks() != null) { + materialPages.add(Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, "feature/rocks")); + var encoded = PortRockPlan.CODEC.encodeStart(com.mojang.serialization.JsonOps.INSTANCE, selected.rocks()).getOrThrow(); + if (!selected.rocks().equals(PortRockPlan.CODEC.parse(com.mojang.serialization.JsonOps.INSTANCE, encoded).getOrThrow())) + throw new IllegalStateException("Random Rocks codec mismatch"); + } + if (selected.lakes() != null) { + materialPages.addAll(selected.lakes().choices().stream().map(PortLakePlan.Choice::page).toList()); + var encoded = PortLakePlan.CODEC.encodeStart(com.mojang.serialization.JsonOps.INSTANCE, selected.lakes()).getOrThrow(); + if (!selected.lakes().equals(PortLakePlan.CODEC.parse(com.mojang.serialization.JsonOps.INSTANCE, encoded).getOrThrow())) + throw new IllegalStateException("Random lake codec mismatch"); + } + if (selected.terrain() != null) { + var plan = selected.terrain(); + materialPages.addAll(plan.choices().stream().map(PortTerrainFeaturePlan.Choice::page) + .filter(page -> !page.equals(PortTerrainFeaturePlan.CRYSTAL_FORMATIONS)).toList()); + skylands |= plan.skylands(); + crystals |= plan.choices().stream().anyMatch(choice -> choice.page().equals(PortTerrainFeaturePlan.CRYSTAL_FORMATIONS)); + fissures |= plan.starFissures(); + var encoded = PortTerrainFeaturePlan.CODEC.encodeStart(com.mojang.serialization.JsonOps.INSTANCE, plan).getOrThrow(); + if (!plan.equals(PortTerrainFeaturePlan.CODEC.parse(com.mojang.serialization.JsonOps.INSTANCE, encoded).getOrThrow())) + throw new IllegalStateException("Random terrain feature codec mismatch"); + } + int count = materialPages.size(); + int expected = new java.util.Random(seed ^ 0x4D4154455249414CL).nextInt(3); + if (count != expected || new java.util.HashSet<>(materialPages).size() != count) + throw new IllegalStateException("Random material feature count/uniqueness failed"); + var terrainPage = Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, "terrain/" + terrain.name().toLowerCase(Locale.ROOT)); + for (Identifier feature : materialPages) + if (!net.dnorberg.rivencraft.writing.PortAuthoredWriting.supports(java.util.List.of(terrainPage, feature))) + throw new IllegalStateException("Random feature is incompatible with its terrain"); + seen.addAll(materialPages); + empty |= count == 0; + single |= count == 1; + doubleFeature |= count == 2; + } + if (seen.size() != 9 || !empty || !single || !doubleFeature || !skylands || !crystals || !fissures) + throw new IllegalStateException("Random feature seed coverage failed"); + } + + private static int createImpliedMaterial(CommandContext context) { + try { + verifyMaterialCompletion(); + var server = context.getSource().getServer(); + long seed = LongArgumentType.getLong(context, "seed"); + var terrain = PortAgeTerrain.valueOf(StringArgumentType.getString(context, "terrain").toUpperCase(Locale.ROOT)); + var material = net.dnorberg.rivencraft.writing.PortRegistryPages.blockPageId( + IdentifierArgument.getId(context, "material")); + var pages = java.util.List.of(Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, + "terrain/" + terrain.name().toLowerCase(Locale.ROOT)), material); + var biomes = net.dnorberg.rivencraft.writing.PortAuthoredWriting.biomePlan(pages, server, seed); + int result = createAge(context, terrain, biomes, + net.dnorberg.rivencraft.writing.PortAuthoredWriting.rockPlan(pages, seed), null, 0, + net.dnorberg.rivencraft.writing.PortAuthoredWriting.lakePlan(pages, seed), + net.dnorberg.rivencraft.writing.PortAuthoredWriting.terrainFeaturePlan(pages, seed)); + return result == 0 ? 0 : probeFeaturePlan(context); + } catch (IllegalArgumentException | IllegalStateException exception) { + context.getSource().sendFailure(Component.literal(exception.getMessage())); + return 0; + } + } + + private static void verifyMaterialCompletion() { + java.util.function.Function symbol = path -> Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, path); + var solid = net.dnorberg.rivencraft.writing.PortRegistryPages.blockPageId(Identifier.withDefaultNamespace("glowstone")); + var fluid = net.dnorberg.rivencraft.writing.PortRegistryPages.blockPageId(Identifier.withDefaultNamespace("water")); + var seen = new java.util.HashSet(); + for (var terrain : PortAgeTerrain.values()) for (long seed = 0; seed < 64; seed++) { + var terrainPage = symbol.apply("terrain/" + terrain.name().toLowerCase(Locale.ROOT)); + var pages = java.util.List.of(terrainPage, solid, solid); + var completed = net.dnorberg.rivencraft.writing.PortMaterialCompletion.complete(pages, seed); + if (completed.size() != 5 || !completed.get(1).equals(solid) || !completed.get(3).equals(solid) + || !net.dnorberg.rivencraft.writing.PortAuthoredWriting.supports(completed) + || !completed.equals(net.dnorberg.rivencraft.writing.PortMaterialCompletion.complete(pages, seed)) + || !completed.equals(net.dnorberg.rivencraft.writing.PortMaterialCompletion.complete(completed, seed))) + throw new IllegalStateException("Implied material completion lost order, compatibility or determinism"); + seen.add(completed.get(2)); + var explicit = java.util.List.of(terrainPage, solid, PortTerrainFeaturePlan.TENDRILS); + if (!explicit.equals(net.dnorberg.rivencraft.writing.PortMaterialCompletion.complete(explicit, seed))) + throw new IllegalStateException("Explicit material target was replaced"); + boolean wetTerrain = terrain == PortAgeTerrain.STANDARD || terrain == PortAgeTerrain.AMPLIFIED || terrain == PortAgeTerrain.ISLAND; + var wet = java.util.List.of(terrainPage, fluid); + if (net.dnorberg.rivencraft.writing.PortAuthoredWriting.supports(wet) != wetTerrain) + throw new IllegalStateException("Implied fluid terrain validation failed"); + if (wetTerrain) { + var lakes = net.dnorberg.rivencraft.writing.PortAuthoredWriting.lakePlan(wet, seed); + if (lakes == null || lakes.choices().size() != 1 + || !lakes.choices().getFirst().fluid().equals(Identifier.withDefaultNamespace("water"))) + throw new IllegalStateException("Implied lake discarded its authored fluid"); + } + } + if (seen.size() < 6 || net.dnorberg.rivencraft.writing.PortAuthoredWriting.supports( + java.util.List.of(fluid, PortTerrainFeaturePlan.TENDRILS))) + throw new IllegalStateException("Implied feature coverage/explicit incompatibility check failed"); + } + + private static int probeFeaturePlan(CommandContext context) { + var level = context.getSource().getServer().getLevel(ResourceKey.create(Registries.DIMENSION, ageId(context))); + if (level == null) { + context.getSource().sendFailure(Component.literal("Age not loaded")); + return 0; + } + if (!(level.getChunkSource().getGenerator() instanceof PortFeatureChunkGenerator features)) { + context.getSource().sendSuccess(() -> Component.literal("Feature plan " + ageId(context) + ": none"), false); + return 1; + } + context.getSource().sendSuccess(() -> Component.literal("Feature plan " + ageId(context) + + " rocks=" + features.rocks() + " lakes=" + features.lakes() + " dungeons=" + features.dungeons() + + " terrain=" + features.terrainFeatures()), false); + return 1; + } + + private static int createCompletedBiomes(CommandContext context) { + try { + var server = context.getSource().getServer(); + long seed = LongArgumentType.getLong(context, "seed"); + var terrain = PortAgeTerrain.valueOf(StringArgumentType.getString(context, "terrain").toUpperCase(Locale.ROOT)); + var distribution = PortBiomePlan.Distribution.valueOf( + StringArgumentType.getString(context, "distribution").toUpperCase(Locale.ROOT)); + java.util.function.Function symbol = path -> Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, path); + var pages = java.util.List.of(symbol.apply("terrain/" + terrain.name().toLowerCase(Locale.ROOT)), + symbol.apply("biome/" + distribution.name().toLowerCase(Locale.ROOT))); + var plan = net.dnorberg.rivencraft.writing.PortAuthoredWriting.biomePlan(pages, server, seed); + // Controller-only and partial pools complete; already-sufficient pools never gain extras. + var plains = net.dnorberg.rivencraft.writing.PortRegistryPages.biomePageId(Identifier.withDefaultNamespace("plains")); + var forest = net.dnorberg.rivencraft.writing.PortRegistryPages.biomePageId(Identifier.withDefaultNamespace("forest")); + for (var mode : PortBiomePlan.Distribution.values()) { + var controller = symbol.apply("biome/" + mode.name().toLowerCase(Locale.ROOT)); + for (long s = 0; s < 32; s++) { + var selected = net.dnorberg.rivencraft.writing.PortAuthoredWriting.biomePlan(java.util.List.of(controller), server, s); + if (!selected.equals(net.dnorberg.rivencraft.writing.PortAuthoredWriting.biomePlan(java.util.List.of(controller), server, s)) + || selected.distribution() != mode) + throw new IllegalStateException("Biome completion is not deterministic"); + } + if (mode == PortBiomePlan.Distribution.NATIVE || mode == PortBiomePlan.Distribution.SINGLE) continue; + var partial = net.dnorberg.rivencraft.writing.PortAuthoredWriting.biomePlan(java.util.List.of(controller, plains), server, seed); + var full = net.dnorberg.rivencraft.writing.PortAuthoredWriting.biomePlan(java.util.List.of(controller, plains, forest), server, seed); + var repeated = net.dnorberg.rivencraft.writing.PortAuthoredWriting.biomePlan(java.util.List.of(controller, plains, plains), server, seed); + if (partial.biomes().size() != 2 || !partial.biomes().getFirst().equals(Identifier.withDefaultNamespace("plains")) + || !full.biomes().equals(java.util.List.of(Identifier.withDefaultNamespace("plains"), Identifier.withDefaultNamespace("forest"))) + || repeated.biomes().size() != 3 || new java.util.HashSet<>(repeated.biomes()).size() != 2) + throw new IllegalStateException("Authored pool completion changed weights or added unnecessary biomes"); + } + var encoded = PortBiomePlan.CODEC.encodeStart(com.mojang.serialization.JsonOps.INSTANCE, plan).getOrThrow(); + if (!plan.equals(PortBiomePlan.CODEC.parse(com.mojang.serialization.JsonOps.INSTANCE, encoded).getOrThrow())) + throw new IllegalStateException("Completed biome plan codec mismatch"); + int created = createAge(context, terrain, plan); + if (created != 0) context.getSource().sendSuccess(() -> Component.literal("Completed biome plan: " + plan), false); + return created == 0 ? 0 : probeBiomePool(context); + } catch (IllegalArgumentException | IllegalStateException exception) { + context.getSource().sendFailure(Component.literal(exception.getMessage())); + return 0; + } + } + + private static int probeBiomePool(CommandContext context) { + var level = context.getSource().getServer().getLevel(ResourceKey.create(Registries.DIMENSION, ageId(context))); + if (level == null) { + context.getSource().sendFailure(Component.literal("Age not loaded")); + return 0; + } + var biomes = level.getChunkSource().getGenerator().getBiomeSource().possibleBiomes().stream() + .flatMap(holder -> holder.unwrapKey().stream()).map(key -> key.identifier()).sorted().toList(); + context.getSource().sendSuccess(() -> Component.literal("Biome pool " + ageId(context) + ": " + biomes), false); + return 1; + } + + private static int createCompletedSky(CommandContext context, String sky) { + try { + verifyRandomSkyColors(); + java.util.function.Function symbol = path -> Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, path); + var pages = new java.util.ArrayList(java.util.stream.Stream.of("terrain/flat", "lighting/normal", "weather/off").map(symbol).toList()); + if (sky != null) { + PortSkyStyle.valueOf(sky.toUpperCase(Locale.ROOT)); + pages.add(symbol.apply("sky/" + sky.toLowerCase(Locale.ROOT))); + } + var server = context.getSource().getServer(); + long seed = LongArgumentType.getLong(context, "seed"), origin = PortDayCycle.nativeTicks(server.overworld()); + var cycle = PortDayCycle.resolve(pages, seed, origin); + int zeroSeed = -1; + boolean sunOnly = false, moonOnly = false, mixed = false; + for (int s = 0; s < 256; s++) { + var selected = PortDayCycle.resolve(java.util.List.of(), s, origin); + long suns = selected.bodies().stream().filter(body -> body.kind() == PortDayCycle.SUN).count(); + long moons = selected.bodies().size() - suns; + if (suns > 3 || moons > 3 || !selected.authored() + || !selected.equals(PortDayCycle.resolve(pages, s, origin))) + throw new IllegalStateException("Missing-celestial completion bounds/determinism failed"); + if (suns == 0 && moons == 0) { + zeroSeed = zeroSeed < 0 ? s : zeroSeed; + if (selected.bodyMode() != PortDayCycle.NONE || selected.customLight()) + throw new IllegalStateException("Empty sky incorrectly acquires a hidden native pair"); + } + sunOnly |= suns > 0 && moons == 0; + moonOnly |= moons > 0 && suns == 0; + mixed |= suns > 0 && moons > 0; + } + for (String controller : java.util.List.of("celestial/sun", "celestial/moon", "celestial/normal_time")) { + var explicit = java.util.List.of(symbol.apply(controller)); + if (!PortDayCycle.resolve(explicit, seed, origin).equals(PortDayCycle.compile(explicit, seed, origin))) + throw new IllegalStateException("Explicit controller gained additional bodies"); + } + var older = PortDayCycle.CODEC.parse(com.mojang.serialization.JsonOps.INSTANCE, + com.google.gson.JsonParser.parseString("{\"authored\":false,\"period\":1,\"stopped_time\":0}")).getOrThrow(); + if (zeroSeed < 0 || !sunOnly || !moonOnly || !mixed || !older.equals(PortDayCycle.NATIVE)) + throw new IllegalStateException("Completion coverage/old-profile default failed"); + var environment = PortEnvironmentSelection.resolve(pages, seed, PortAgeTerrain.FLAT); + var biomes = net.dnorberg.rivencraft.writing.PortAuthoredWriting.biomePlan(pages, server.registryAccess()); + RuntimeAgeBackend.create(server, ageId(context), seed, biomes, PortAgeTerrain.FLAT, + null, null, 0, null, null, environment.weather(), environment.lighting(), environment.sky(), + PortAgeColors.compile(pages, seed), cycle); + final int sample = zeroSeed; + context.getSource().sendSuccess(() -> Component.literal("Completed sky; sample zero-body seed=" + sample), false); + return probeDayCycle(context); + } catch (IllegalArgumentException | IllegalStateException exception) { + context.getSource().sendFailure(Component.literal(exception.getMessage())); + return 0; + } + } + + private static int createRandomCelestialsAge(CommandContext context) { + try { + java.util.function.Function symbol = path -> Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, path); + var pages = java.util.stream.Stream.of("celestial/sun", "celestial/moon", "celestial/sun", + "weather/off", "lighting/normal", "terrain/flat").map(symbol).toList(); + var server = context.getSource().getServer(); + long seed = LongArgumentType.getLong(context, "seed"), origin = PortDayCycle.nativeTicks(server.overworld()); + var cycle = PortDayCycle.compile(pages, seed, origin); + var decorated = new java.util.ArrayList(java.util.stream.Stream.of("weather/off", "sky/overworld", + "terrain/flat", "number/10", "color/red", "lighting/ambient_color").map(symbol).toList()); + decorated.addAll(pages); + if (!net.dnorberg.rivencraft.writing.PortAuthoredWriting.supports(pages) + || cycle.bodies().size() != 3 || cycle.bodies().get(0).equals(cycle.bodies().get(2)) + || !cycle.equals(PortDayCycle.compile(pages, seed, origin)) + || !cycle.bodies().equals(PortDayCycle.compile(decorated, seed, origin).bodies())) + throw new IllegalStateException("Random body determinism/independence failed"); + var oneSun = PortDayCycle.compile(java.util.List.of(symbol.apply("celestial/sun")), seed, origin); + var oneMoon = PortDayCycle.compile(java.util.List.of(symbol.apply("celestial/moon")), seed, origin); + if (oneSun.bodies().size() != 1 || oneMoon.bodies().size() != 1 + || !oneSun.bodies().getFirst().equals(cycle.bodies().getFirst()) + || oneMoon.bodies().getFirst().kind() != PortDayCycle.MOON) + throw new IllegalStateException("Standalone bare body compilation failed"); + int stopped = 0, moving = 0, forward = 0, reverse = 0; + for (int s = 0; s < 128; s++) { + var random = PortDayCycle.compile(pages, s, origin); + for (var body : random.bodies()) { + if (body.period() == 0) stopped++; else moving++; + if (body.clockwise()) forward++; else reverse++; + if (body.period() != 0 && (body.period() < 0.2 || body.period() > 2) + || body.size() < 0.75 || body.size() >= 1.75 || body.bearing() < 0 + || body.bearing() >= 360 || body.phaseTick() < 0 || body.phaseTick() >= 24000 + || body.color() < 0 || body.color() > 0xffffff) + throw new IllegalStateException("Random body bounds failed"); + } + } + if (stopped == 0 || moving == 0 || forward == 0 || reverse == 0) + throw new IllegalStateException("Random body pool coverage failed"); + var explicit = PortDayCycle.compile(java.util.List.of(symbol.apply("size/small"), symbol.apply("celestial/sun")), seed, origin); + var normal = PortDayCycle.compile(java.util.List.of(PortDayCycle.NORMAL_TIME), seed, origin); + if (!explicit.bodies().isEmpty() || explicit.sunSize() != 0.5F || explicit.period() != 1 || explicit.bearing() != -1 + || !normal.bodies().isEmpty() || normal.period() != 1 || normal.sunSize() != 1) + throw new IllegalStateException("Explicit/Normal Time default changed"); + var environment = PortEnvironmentSelection.resolve(pages, seed, PortAgeTerrain.FLAT); + var biomes = net.dnorberg.rivencraft.writing.PortAuthoredWriting.biomePlan(pages, server.registryAccess()); + RuntimeAgeBackend.create(server, ageId(context), seed, biomes, PortAgeTerrain.FLAT, + null, null, 0, null, null, environment.weather(), environment.lighting(), environment.sky(), + PortAgeColors.compile(pages, seed), cycle); + return probeDayCycle(context); + } catch (IllegalArgumentException | IllegalStateException exception) { + context.getSource().sendFailure(Component.literal(exception.getMessage())); + return 0; + } + } + + private static int createEclipseAge(CommandContext context) { + return createEclipseAge(context, null); + } + + private static int createEclipseAge(CommandContext context, String sky) { + try { + java.util.function.Function symbol = path -> Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, path); + String mode = StringArgumentType.getString(context, "mode"); + if (!java.util.Set.of("aligned", "partial", "clear", "below", "moving").contains(mode)) + throw new IllegalArgumentException("Use aligned, partial, clear, below or moving"); + long seed = LongArgumentType.getLong(context, "seed"); + var server = context.getSource().getServer(); + long origin = PortDayCycle.nativeTicks(server.overworld()); + var pages = new java.util.ArrayList(); + pages.add(symbol.apply("period/zero")); + if (mode.equals("partial")) pages.add(symbol.apply("number/13")); + pages.add(symbol.apply(mode.equals("below") ? "phase/nadir" : "phase/zenith")); + if (mode.equals("partial")) { pages.add(symbol.apply("number/24")); pages.add(symbol.apply("size/large")); } + pages.addAll(java.util.stream.Stream.of("number/24", "color/red", "celestial/sun", + mode.equals("moving") ? "period/half" : "period/zero", + mode.equals("below") || mode.equals("clear") ? "phase/nadir" : "phase/zenith").map(symbol).toList()); + if (mode.equals("partial")) pages.add(symbol.apply("number/24")); + pages.addAll(java.util.stream.Stream.of("size/large", "celestial/moon", "weather/off", "lighting/normal", "terrain/flat").map(symbol).toList()); + if (sky != null) { + PortSkyStyle.valueOf(sky.toUpperCase(Locale.ROOT)); + pages.add(symbol.apply("sky/" + sky.toLowerCase(Locale.ROOT))); + } + var cycle = PortDayCycle.compile(pages, seed, origin); + var bodies = cycle.bodies(); + float eclipse = PortCelestialBody.eclipseAt(bodies, origin); + if (!net.dnorberg.rivencraft.writing.PortAuthoredWriting.supports(pages) + || (mode.equals("aligned") || mode.equals("moving")) && (Math.abs(eclipse - 1) > 0.0001F + || Math.abs(cycle.bodyLight(origin) - 0.15F) > 0.0001F) + || mode.equals("partial") && !(eclipse > 0 && eclipse < 1) + || (mode.equals("clear") || mode.equals("below")) && eclipse != 0) + throw new IllegalStateException("Eclipse fixture failed: " + mode); + var sun = bodies.get(0); + var moon = bodies.get(1); + if (sun.eclipse(java.util.List.of(sun, sun), origin) != 0 + || sun.eclipseColor(1) != 0xfccccc || moon.eclipseColor(1) != 0 + || mode.equals("moving") && (PortCelestialBody.eclipseAt(bodies, origin + 100) >= eclipse + || PortCelestialBody.eclipseAt(bodies, origin + 800) != 0)) + throw new IllegalStateException("Eclipse color/movement invariant failed"); + var environment = PortEnvironmentSelection.resolve(pages, seed, PortAgeTerrain.FLAT); + var biomes = net.dnorberg.rivencraft.writing.PortAuthoredWriting.biomePlan(pages, server.registryAccess()); + RuntimeAgeBackend.create(server, ageId(context), seed, biomes, PortAgeTerrain.FLAT, + null, null, 0, null, null, environment.weather(), environment.lighting(), environment.sky(), + PortAgeColors.compile(pages, seed), cycle); + context.getSource().sendSuccess(() -> Component.literal("Eclipse fixture " + mode + " overlap=" + eclipse + + " bodyLight=" + cycle.bodyLight(origin) + " skyShade=" + (1F - 0.65F * eclipse)), false); + return probeDayCycle(context); + } catch (IllegalArgumentException | IllegalStateException exception) { + context.getSource().sendFailure(Component.literal(exception.getMessage())); + return 0; + } + } + + private static int createMultiBodyAge(CommandContext context) { + try { + java.util.function.Function symbol = path -> Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, path); + var pages = java.util.stream.Stream.of("period/zero", "phase/zenith", "size/large", "number/24", "color/red", "celestial/sun", + "period/zero", "phase/nadir", "size/small", "number/24", "color/blue", "celestial/moon", + "period/half", "phase/rising", "angle/east", "direction/counterclockwise", "number/12", "color/green", "celestial/sun", + "weather/off", "lighting/normal", "terrain/flat").map(symbol).toList(); + var server = context.getSource().getServer(); + long seed = LongArgumentType.getLong(context, "seed"), origin = PortDayCycle.nativeTicks(server.overworld()); + var cycle = PortDayCycle.compile(pages, seed, origin); + var bodies = cycle.bodies(); + if (!net.dnorberg.rivencraft.writing.PortAuthoredWriting.supports(pages) || bodies.size() != 3 + || bodies.get(0).kind() != PortDayCycle.SUN || bodies.get(0).color() != 0xf00000 || bodies.get(0).size() != 2F + || bodies.get(1).kind() != PortDayCycle.MOON || bodies.get(1).color() != 0x0000f0 || bodies.get(1).size() != 0.5F + || bodies.get(2).color() != 0x007800 || bodies.get(2).size() != 1F || bodies.get(2).bearing() != 90 + || Math.abs(bodies.get(2).angle(origin + 100) + 93F) > 0.001F + || cycle.bodyLight(origin) != 1F) + throw new IllegalStateException("Independent body fixture failed"); + var limits = new java.util.ArrayList(); + for (int i = 0; i < 10; i++) limits.add(PortDayCycle.NORMAL_TIME); + var atLimit = PortDayCycle.compile(limits, seed, origin); + if (!PortDayCycle.validWriting(limits) || atLimit.bodies().size() != 20) + throw new IllegalStateException("Body limit rejected valid writing"); + limits.add(symbol.apply("celestial/sun")); + if (PortDayCycle.validWriting(limits)) throw new IllegalStateException("Body limit not enforced"); + var reset = PortDayCycle.compile(java.util.stream.Stream.of("number/24", "color/red", "size/large", "celestial/sun", + "size/normal", "celestial/moon", "celestial/normal_time").map(symbol).toList(), seed, origin).bodies(); + if (reset.size() != 4 || reset.get(1).color() != -1 || reset.get(1).size() != 1F + || reset.get(2).color() != -1 || reset.get(3).size() != 1F + || Math.abs(Math.abs(reset.get(2).angle(origin) - reset.get(3).angle(origin)) - 180F) > 0.001F) + throw new IllegalStateException("Body modifier reset/paired expansion failed"); + var moonlight = PortDayCycle.compile(java.util.stream.Stream.of("period/zero", "phase/zenith", "celestial/moon", + "period/zero", "phase/zenith", "celestial/moon").map(symbol).toList(), seed, origin); + var sunlight = PortDayCycle.compile(java.util.stream.Stream.of("period/zero", "phase/zenith", "celestial/sun", + "period/zero", "phase/zenith", "celestial/sun").map(symbol).toList(), seed, origin); + if (Math.abs(moonlight.bodyLight(origin) - 0.36F) > 0.0001F || sunlight.bodyLight(origin) != 1F) + throw new IllegalStateException("Multi-body light aggregation failed"); + var encoded = PortDayCycle.CODEC.encodeStart(com.mojang.serialization.JsonOps.INSTANCE, cycle).getOrThrow(); + if (!cycle.equals(PortDayCycle.CODEC.parse(com.mojang.serialization.JsonOps.INSTANCE, encoded).getOrThrow())) + throw new IllegalStateException("Body profile codec round trip failed"); + var environment = PortEnvironmentSelection.resolve(pages, seed, PortAgeTerrain.FLAT); + var biomes = net.dnorberg.rivencraft.writing.PortAuthoredWriting.biomePlan(pages, server.registryAccess()); + RuntimeAgeBackend.create(server, ageId(context), seed, biomes, PortAgeTerrain.FLAT, + null, null, 0, null, null, environment.weather(), environment.lighting(), environment.sky(), + PortAgeColors.compile(pages, seed), cycle); + return probeDayCycle(context); + } catch (IllegalArgumentException | IllegalStateException exception) { + context.getSource().sendFailure(Component.literal(exception.getMessage())); + return 0; + } + } + + private static int createBodyAge(CommandContext context) { + try { + java.util.function.Function symbol = path -> Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, path); + String body = StringArgumentType.getString(context, "body"); + Identifier controller = symbol.apply("celestial/" + body); + Identifier phase = symbol.apply("phase/" + StringArgumentType.getString(context, "phase")); + if ((!body.equals("sun") && !body.equals("moon")) || !PortDayCycle.isPhase(phase)) + throw new IllegalArgumentException("Use sun/moon and rising/zenith/setting/nadir"); + var pages = java.util.stream.Stream.of("period/zero", phase.getPath(), "angle/east", + "size/large", "number/24", "color/red", controller.getPath(), "weather/off", + "lighting/normal", "terrain/flat").map(symbol).toList(); + var server = context.getSource().getServer(); + long seed = LongArgumentType.getLong(context, "seed"), origin = PortDayCycle.nativeTicks(server.overworld()); + var cycle = PortDayCycle.compile(pages, seed, origin); + var colors = PortAgeColors.compile(pages, seed); + if (!net.dnorberg.rivencraft.writing.PortAuthoredWriting.supports(pages) + || !cycle.singleBody() || colors.celestial() != 0xf00000 || colors.sky() != -1 + || cycle.sunSize() != 2 || cycle.bearing() != 90) + throw new IllegalStateException("Single-body fixture failed"); + for (String kind : java.util.List.of("sun", "moon")) { + var target = symbol.apply("celestial/" + kind); + int mode = kind.equals("sun") ? PortDayCycle.SUN : PortDayCycle.MOON; + for (var entry : java.util.Map.of("rising", 0, "zenith", 6000, "setting", 12000, "nadir", 18000).entrySet()) { + var selected = PortDayCycle.compile(java.util.List.of(symbol.apply("period/zero"), + symbol.apply("phase/" + entry.getKey()), target), seed, origin); + float expectedLight = entry.getKey().equals("zenith") ? (mode == PortDayCycle.MOON ? 0.18F : 1F) : 0F; + if (selected.bodyMode() != mode || selected.ticks(origin) != entry.getValue() + || Math.abs(selected.bodyLight(origin) - expectedLight) > 0.0001F) + throw new IllegalStateException("Single-body phase/light invariant failed"); + } + var moving = PortDayCycle.compile(java.util.stream.Stream.of("period/half", "phase/zenith", + "direction/counterclockwise", "number/12", "size/large", target.getPath()).map(symbol).toList(), seed, origin); + if (moving.sunSize() != 1.625F || moving.ticks(origin + 100) != 5800 + || Math.abs(moving.bodyAngle(origin + 100) + 3F) > 0.0001F + || !PortDayCycle.validWriting(java.util.List.of(target, PortDayCycle.NORMAL_TIME)) + || !PortDayCycle.validWriting(java.util.List.of(target, target)) + || PortDayCycle.validWriting(java.util.List.of(target, symbol.apply("size/large")))) + throw new IllegalStateException("Single-body modifier/order invariant failed"); + } + var older = PortDayCycle.CODEC.parse(com.mojang.serialization.JsonOps.INSTANCE, + com.google.gson.JsonParser.parseString("{\"authored\":true,\"period\":1,\"stopped_time\":0,\"sun_size\":2}")).getOrThrow(); + if (older.bodyMode() != PortDayCycle.PAIRED || older.singleBody()) + throw new IllegalStateException("Old paired body default failed"); + var environment = PortEnvironmentSelection.resolve(pages, seed, PortAgeTerrain.FLAT); + if (environment.sky() != PortSkyStyle.OVERWORLD) + throw new IllegalStateException("Single body selected an incompatible sky"); + var biomes = net.dnorberg.rivencraft.writing.PortAuthoredWriting.biomePlan(pages, server.registryAccess()); + RuntimeAgeBackend.create(server, ageId(context), seed, biomes, PortAgeTerrain.FLAT, + null, null, 0, null, null, environment.weather(), environment.lighting(), environment.sky(), colors, cycle); + return probeColors(context) == 1 ? probeDayCycle(context) : 0; + } catch (IllegalArgumentException | IllegalStateException exception) { + context.getSource().sendFailure(Component.literal(exception.getMessage())); + return 0; + } + } + + private static int createCelestialColorAge(CommandContext context) { + try { + java.util.function.Function symbol = path -> Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, path); + Identifier phase = symbol.apply("phase/" + StringArgumentType.getString(context, "phase")); + Identifier color = symbol.apply("color/" + StringArgumentType.getString(context, "color")); + if (!PortDayCycle.isPhase(phase) || !PortAgeColors.isColor(color)) + throw new IllegalArgumentException("Use rising/zenith/setting/nadir and red/green/blue/white/black"); + var pages = java.util.List.of(symbol.apply("number/10"), symbol.apply("color/blue"), + symbol.apply("sky/overworld"), symbol.apply("number/20"), symbol.apply("color/white"), + PortAgeColors.AMBIENT, symbol.apply("period/zero"), phase, + symbol.apply("number/" + IntegerArgumentType.getInteger(context, "number")), color, + PortDayCycle.NORMAL_TIME, symbol.apply("weather/off"), symbol.apply("lighting/normal"), + symbol.apply("terrain/flat")); + long seed = LongArgumentType.getLong(context, "seed"); + var colors = PortAgeColors.compile(pages, seed); + int amount = IntegerArgumentType.getInteger(context, "number") * 10; + int expected = switch (color.getPath()) { + case "color/red" -> amount << 16; + case "color/green" -> amount << 8; + case "color/blue" -> amount; + case "color/white" -> amount * 0x010101; + default -> 0; + }; + if (!net.dnorberg.rivencraft.writing.PortAuthoredWriting.supports(pages) + || !colors.equals(new PortAgeColors(0x000064, 0xc8c8c8, expected))) + throw new IllegalStateException("Celestial color fixture failed"); + // Color groups persist across intervening Length/Phase/Size modifiers, then + // are consumed by Normal Time rather than leaking into a following target. + var mixed = PortAgeColors.compile(java.util.stream.Stream.of("number/24", "color/red", + "number/24", "color/red", "number/24", "color/black", "size/large", + "celestial/normal_time", "sky/overworld", "lighting/ambient_color") + .map(symbol).toList(), seed); + var trailing = PortAgeColors.compile(java.util.stream.Stream.of("number/10", "color/red", + "celestial/normal_time", "number/5", "color/green").map(symbol).toList(), seed); + var unnumbered = java.util.List.of(symbol.apply("color/blue"), PortDayCycle.NORMAL_TIME); + var older = PortAgeColors.CODEC.parse(com.mojang.serialization.JsonOps.INSTANCE, + com.google.gson.JsonParser.parseString("{\"sky\":100,\"ambient\":-1}")).getOrThrow(); + if (!mixed.equals(new PortAgeColors(-1, -1, 0xf00000)) + || !trailing.equals(new PortAgeColors(0x003200, -1, 0x640000)) + || !older.equals(new PortAgeColors(100, -1)) + || !PortAgeColors.compile(unnumbered, seed).equals(PortAgeColors.compile(unnumbered, seed)) + || PortAgeColors.compile(unnumbered, seed).sky() != -1) + throw new IllegalStateException("Celestial color grouping/default invariant failed"); + var server = context.getSource().getServer(); + var cycle = PortDayCycle.compile(pages, seed, PortDayCycle.nativeTicks(server.overworld())); + var biomes = net.dnorberg.rivencraft.writing.PortAuthoredWriting.biomePlan(pages, server.registryAccess()); + var environment = PortEnvironmentSelection.resolve(pages, seed, PortAgeTerrain.FLAT); + RuntimeAgeBackend.create(server, ageId(context), seed, biomes, PortAgeTerrain.FLAT, + null, null, 0, null, null, environment.weather(), environment.lighting(), environment.sky(), colors, cycle); + return probeColors(context) == 1 ? probeDayCycle(context) : 0; + } catch (IllegalArgumentException | IllegalStateException exception) { + context.getSource().sendFailure(Component.literal(exception.getMessage())); + return 0; + } + } + private static int createColorAge(CommandContext context) { try { String sky = StringArgumentType.getString(context, "sky").toLowerCase(Locale.ROOT); @@ -641,7 +1378,8 @@ public final class PortAgeCommands { var sky = level.environmentAttributes().getValue(net.minecraft.world.attribute.EnvironmentAttributes.SKY_COLOR, pos); var fog = level.environmentAttributes().getValue(net.minecraft.world.attribute.EnvironmentAttributes.FOG_COLOR, pos); var ambient = level.environmentAttributes().getValue(net.minecraft.world.attribute.EnvironmentAttributes.AMBIENT_LIGHT_COLOR, pos); - if (colors.sky() >= 0 && (!sky.equals(PortAgeColors.vector(colors.sky())) || !fog.equals(sky)) + var expectedFog = colors.sky() < 0 ? fog : new org.joml.Vector3f(PortAgeColors.vector(colors.sky())).mul(PortSkyStyle.fogShade(level)); + if (colors.sky() >= 0 && (!sky.equals(PortAgeColors.vector(colors.sky())) || !fog.equals(expectedFog)) || colors.ambient() >= 0 && !ambient.equals(PortAgeColors.vector(colors.ambient()))) { context.getSource().sendFailure(Component.literal("Color attribute mismatch")); return 0; @@ -651,6 +1389,29 @@ public final class PortAgeCommands { return 1; } + private static void verifyRandomSkyColors() { + long[] seeds = {0, 1, 2, 14, 86, 87}; + int[] expected = {0x8abac0, 0x8cb39c, 0x6e3841, 0xcda38c, 0xb7a6cd, 0x406859}; + for (int i = 0; i < seeds.length; i++) { + var colors = PortAgeColors.resolve(java.util.List.of(), seeds[i]); + var encoded = PortAgeColors.CODEC.encodeStart(com.mojang.serialization.JsonOps.INSTANCE, colors).getOrThrow(); + if (colors.sky() != expected[i] || colors.ambient() != -1 || colors.celestial() != -1 + || !colors.equals(PortAgeColors.resolve(java.util.List.of(), seeds[i])) + || !colors.equals(PortAgeColors.CODEC.parse(com.mojang.serialization.JsonOps.INSTANCE, encoded).getOrThrow())) + throw new IllegalStateException("Random sky root-vector/persistence mismatch"); + } + for (var paths : java.util.List.of(java.util.List.of("sky/end"), java.util.List.of("celestial/sun"), + java.util.List.of("terrain/flat"), java.util.List.of("number/12", "color/red", "sky/overworld"), + java.util.List.of("number/0", "color/black"))) { + var pages = paths.stream().map(path -> Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, path)).toList(); + if (!PortAgeColors.resolve(pages, 87).equals(PortAgeColors.compile(pages, 87))) + throw new IllegalStateException("Authored sky colors were randomized"); + } + var older = PortAgeColors.CODEC.parse(com.mojang.serialization.JsonOps.INSTANCE, + com.google.gson.JsonParser.parseString("{\"sky\":-1,\"ambient\":-1}")).getOrThrow(); + if (!older.equals(PortAgeColors.NATIVE)) throw new IllegalStateException("Old sky-color defaults changed"); + } + private static void verifyCatalogRoundTrip(net.minecraft.server.MinecraftServer server) { var payload = new AgeCatalogPayload(1, server.levelKeys().stream().map(key -> key.identifier()).toList(), RuntimeAgeBackend.savedColors(server), RuntimeAgeBackend.savedDayCycles(server)); @@ -925,7 +1686,41 @@ public final class PortAgeCommands { java.util.Collections.nCopies(8, page)); } - private static int probeDungeons(CommandContext context) { + private static int createDungeonTerrain(CommandContext context) { + try { + var terrain = PortAgeTerrain.valueOf(StringArgumentType.getString(context, "terrain").toUpperCase(Locale.ROOT)); + var terrainPage = Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, + "terrain/" + terrain.name().toLowerCase(Locale.ROOT)); + var dungeon = Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, "feature/dungeons"); + var cave = Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, "terrain/cave"); + var pages = new java.util.ArrayList(java.util.Collections.nCopies(8, dungeon)); + pages.addFirst(terrainPage); + var maximum = new java.util.ArrayList(java.util.Collections.nCopies(32, dungeon)); + maximum.addFirst(cave); + if (net.dnorberg.rivencraft.writing.PortAuthoredWriting.dungeonCount(maximum) != 32) + throw new IllegalStateException("Cave Dungeons stacking failed"); + maximum.add(dungeon); + if (net.dnorberg.rivencraft.writing.PortAuthoredWriting.supports(maximum) + || net.dnorberg.rivencraft.writing.PortAuthoredWriting.supports(java.util.List.of(cave, + Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, "feature/surface_lakes")))) + throw new IllegalStateException("Dungeon cap/lake restriction changed"); + for (String unsupported : java.util.List.of("flat", "void")) + if (net.dnorberg.rivencraft.writing.PortAuthoredWriting.supports(java.util.List.of(dungeon, + Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, "terrain/" + unsupported)))) + throw new IllegalStateException("Dungeons unexpectedly accepted unsupported terrain"); + var server = context.getSource().getServer(); + int count = net.dnorberg.rivencraft.writing.PortAuthoredWriting.dungeonCount(pages); + var biomes = net.dnorberg.rivencraft.writing.PortAuthoredWriting.biomePlan(pages, server, + LongArgumentType.getLong(context, "seed")); + int created = createAge(context, terrain, biomes, null, null, count); + return created == 0 ? 0 : probeFeaturePlan(context); + } catch (IllegalArgumentException | IllegalStateException exception) { + context.getSource().sendFailure(Component.literal(exception.getMessage())); + return 0; + } + } + + private static int probeDungeons(CommandContext context, int chunks) { Identifier id = ageId(context); ServerLevel level = context.getSource().getServer().getLevel(ResourceKey.create(Registries.DIMENSION, id)); if (level == null || !(level.getChunkSource().getGenerator() instanceof PortFeatureChunkGenerator features)) { @@ -934,7 +1729,7 @@ public final class PortAgeCommands { } int count = features.dungeons(); int spawners = 0; - for (int chunkX = 0; chunkX < 4; chunkX++) for (int chunkZ = 0; chunkZ < 4; chunkZ++) { + for (int chunkX = 0; chunkX < chunks; chunkX++) for (int chunkZ = 0; chunkZ < chunks; chunkZ++) { var chunk = level.getChunk(chunkX, chunkZ); for (var pos : chunk.getBlockEntitiesPos()) { if (chunk.getBlockState(pos).is(Blocks.SPAWNER)) spawners++; @@ -942,7 +1737,7 @@ public final class PortAgeCommands { } int placed = spawners; context.getSource().sendSuccess(() -> Component.literal( - "Dungeons probe " + id + " pages=" + count + " spawners=" + placed), false); + "Dungeons probe " + id + " pages=" + count + " chunks=" + chunks + "x" + chunks + " spawners=" + placed), false); return placed; } @@ -1092,6 +1887,24 @@ public final class PortAgeCommands { PortRockPlan rockPlan, PortVegetationPlan vegetationPlan, int dungeons, PortLakePlan lakes, PortTerrainFeaturePlan terrainFeatures, PortEnvironmentSelection environment) { + return createAge(context, terrain, biomePlan, rockPlan, vegetationPlan, dungeons, lakes, terrainFeatures, + environment, PortDayCycle.NATIVE); + } + + private static int createAge(CommandContext context, + PortAgeTerrain terrain, PortBiomePlan biomePlan, + PortRockPlan rockPlan, PortVegetationPlan vegetationPlan, + int dungeons, PortLakePlan lakes, PortTerrainFeaturePlan terrainFeatures, + PortEnvironmentSelection environment, PortDayCycle cycle) { + return createAge(context, terrain, biomePlan, rockPlan, vegetationPlan, dungeons, lakes, terrainFeatures, + environment, cycle, PortAgeColors.NATIVE); + } + + private static int createAge(CommandContext context, + PortAgeTerrain terrain, PortBiomePlan biomePlan, + PortRockPlan rockPlan, PortVegetationPlan vegetationPlan, + int dungeons, PortLakePlan lakes, PortTerrainFeaturePlan terrainFeatures, + PortEnvironmentSelection environment, PortDayCycle cycle, PortAgeColors colors) { String name = StringArgumentType.getString(context, "name"); Identifier id = Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, "age/" + name); long seed = LongArgumentType.getLong(context, "seed"); @@ -1099,7 +1912,7 @@ public final class PortAgeCommands { try { level = RuntimeAgeBackend.create(context.getSource().getServer(), id, seed, biomePlan, terrain, rockPlan, vegetationPlan, dungeons, lakes, terrainFeatures, - environment.weather(), environment.lighting(), environment.sky()); + environment.weather(), environment.lighting(), environment.sky(), colors, cycle); } catch (IllegalArgumentException | IllegalStateException exception) { context.getSource().sendFailure(Component.literal(exception.getMessage())); return 0; diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortBiomeMaterialRules.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortBiomeMaterialRules.java new file mode 100644 index 0000000..4f4eeb1 --- /dev/null +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortBiomeMaterialRules.java @@ -0,0 +1,31 @@ +package net.dnorberg.rivencraft.age; + +import net.minecraft.core.Holder; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.material.EndMaterialRules; +import net.minecraft.data.worldgen.material.NetherMaterialRules; +import net.minecraft.world.level.biome.Biomes; +import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; +import net.minecraft.world.level.levelgen.material.MaterialRules; + +/** Root AgeDimensionService.withBiomeMaterialRules adapted to 26.3's rule registry. */ +final class PortBiomeMaterialRules { + private PortBiomeMaterialRules() {} + + static Holder apply(HolderLookup.Provider registries, NoiseGeneratorSettings base) { + var biomes = registries.lookupOrThrow(Registries.BIOME); + var rules = registries.lookupOrThrow(Registries.MATERIAL_RULE); + var materials = MaterialRules.sequence( + MaterialRules.ifTrue(MaterialRules.isBiome(biomes, Biomes.THE_END, Biomes.END_HIGHLANDS, + Biomes.END_MIDLANDS, Biomes.SMALL_END_ISLANDS, Biomes.END_BARRENS), + MaterialRules.getRule(rules, EndMaterialRules.END)), + MaterialRules.ifTrue(MaterialRules.isBiome(biomes, Biomes.NETHER_WASTES, Biomes.SOUL_SAND_VALLEY, + Biomes.CRIMSON_FOREST, Biomes.WARPED_FOREST, Biomes.BASALT_DELTAS), + MaterialRules.getRule(rules, NetherMaterialRules.NETHER)), + base.materialRule().value()); + return Holder.direct(new NoiseGeneratorSettings(base.noiseSettings(), base.defaultBlock(), base.defaultFluid(), + base.noiseRouter(), Holder.direct(materials), base.spawnTarget(), base.seaLevel(), base.disableMobGeneration(), + base.aquifers(), base.useLegacyRandomSource(), base.debugFunctions())); + } +} diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortCelestialBody.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortCelestialBody.java new file mode 100644 index 0000000..956d14c --- /dev/null +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortCelestialBody.java @@ -0,0 +1,96 @@ +package net.dnorberg.rivencraft.age; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; + +/** One frozen authored orbit, using the same angular motion as 1.21.1 Body. */ +public record PortCelestialBody(int kind, double period, int stoppedTime, long originTick, + int phaseTick, boolean clockwise, int bearing, float size, int color) { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Codec.intRange(1, 2).fieldOf("kind").forGetter(PortCelestialBody::kind), + Codec.doubleRange(0, 2).fieldOf("period").forGetter(PortCelestialBody::period), + Codec.intRange(0, 23999).fieldOf("stopped_time").forGetter(PortCelestialBody::stoppedTime), + Codec.LONG.fieldOf("origin_tick").forGetter(PortCelestialBody::originTick), + Codec.intRange(0, 23999).fieldOf("phase_tick").forGetter(PortCelestialBody::phaseTick), + Codec.BOOL.fieldOf("clockwise").forGetter(PortCelestialBody::clockwise), + Codec.intRange(-1, 359).fieldOf("bearing").forGetter(PortCelestialBody::bearing), + Codec.floatRange(0.25F, 3F).fieldOf("size").forGetter(PortCelestialBody::size), + Codec.intRange(-1, 0xffffff).fieldOf("color").forGetter(PortCelestialBody::color) + ).apply(instance, PortCelestialBody::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.VAR_INT, PortCelestialBody::kind, ByteBufCodecs.DOUBLE, PortCelestialBody::period, + ByteBufCodecs.VAR_INT, PortCelestialBody::stoppedTime, ByteBufCodecs.VAR_LONG, PortCelestialBody::originTick, + ByteBufCodecs.VAR_INT, PortCelestialBody::phaseTick, ByteBufCodecs.BOOL, PortCelestialBody::clockwise, + ByteBufCodecs.INT, PortCelestialBody::bearing, ByteBufCodecs.FLOAT, PortCelestialBody::size, + ByteBufCodecs.INT, PortCelestialBody::color, PortCelestialBody::new); + + public PortCelestialBody { + if (kind != PortDayCycle.SUN && kind != PortDayCycle.MOON || !Double.isFinite(period) + || period < 0 || period > 2 || stoppedTime < 0 || stoppedTime >= 24000 + || phaseTick < 0 || phaseTick >= 24000 || bearing < -1 || bearing > 359 + || !Float.isFinite(size) || size < 0.25F || size > 3 || color < -1 || color > 0xffffff) + throw new IllegalArgumentException("Invalid celestial body"); + } + + public static PortCelestialBody of(PortDayCycle cycle, int kind, int color, boolean pairedMoon) { + int offset = pairedMoon ? 12000 : 0; + return new PortCelestialBody(kind, cycle.period(), (cycle.stoppedTime() + offset) % 24000, + cycle.originTick(), (cycle.phaseTick() + offset) % 24000, cycle.clockwise(), + cycle.bearing(), pairedMoon ? 1F : cycle.sunSize(), color); + } + + public float angle(double nativeTicks) { + double time = period == 0 ? stoppedTime + : (clockwise ? 1 : -1) * (nativeTicks - originTick) / period + phaseTick; + return (float) (((time - 6000D) % 24000D) * (360D / 24000D)); + } + + public float light(long nativeTicks) { + return Math.max(0F, (float) Math.cos(Math.toRadians(angle(nativeTicks)))) + * (kind == PortDayCycle.MOON ? 0.18F : 1F); + } + + public net.minecraft.world.phys.Vec3 direction(double ticks) { + double orbit = Math.toRadians(angle(ticks)), axis = Math.toRadians(bearing < 0 ? -90 : bearing); + double lateral = Math.sin(orbit); + return new net.minecraft.world.phys.Vec3(Math.sin(axis) * lateral, Math.cos(orbit), Math.cos(axis) * lateral); + } + + /** Root AgeSkyProfile.eclipseFor: contact uses the central quarter-size disc, not its halo. */ + public float eclipse(java.util.List bodies, double ticks) { + float strongest = 0; + var direction = direction(ticks); + double radius = Math.atan((kind == PortDayCycle.SUN ? 30D : 20D) * size * 0.25D / 100D); + for (var other : bodies) { + if (other.kind == kind) continue; + double separation = Math.acos(Math.max(-1D, Math.min(1D, direction.dot(other.direction(ticks))))); + double contact = radius + Math.atan((other.kind == PortDayCycle.SUN ? 30D : 20D) * other.size * 0.25D / 100D); + strongest = Math.max(strongest, (float) Math.max(0D, 1D - separation / contact)); + } + return strongest; + } + + public static float eclipseAt(java.util.List bodies, double ticks) { + float strongest = 0; + for (var body : bodies) if (body.kind == PortDayCycle.SUN && body.direction(ticks).y > 0D) + strongest = Math.max(strongest, body.eclipse(bodies, ticks)); + return strongest; + } + + /** Shared client/server-checkable RGB rule; alpha is handled by the renderer. */ + public int eclipseColor(float eclipse) { + int rgb = color < 0 ? 0xffffff : color; + float corona = kind == PortDayCycle.SUN ? (float) Math.pow(eclipse, 8D) * 0.8F : 0F; + int red = channel(rgb >> 16 & 255, eclipse, corona); + int green = channel(rgb >> 8 & 255, eclipse, corona); + int blue = channel(rgb & 255, eclipse, corona); + return red << 16 | green << 8 | blue; + } + + private int channel(int value, float eclipse, float corona) { + return Math.round(kind == PortDayCycle.MOON ? value * (1F - eclipse) : value + (255 - value) * corona); + } +} diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortDayCycle.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortDayCycle.java index 2379727..1b468b8 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortDayCycle.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortDayCycle.java @@ -19,7 +19,9 @@ import net.minecraft.world.level.Level; /** Authored native celestial controls. Never mutates the shared clock. */ public record PortDayCycle(boolean authored, double period, int stoppedTime, - long originTick, int phaseTick, boolean clockwise, int bearing, float sunSize) { + long originTick, int phaseTick, boolean clockwise, int bearing, float sunSize, int bodyMode, + List bodies) { + public static final int PAIRED = 0, SUN = 1, MOON = 2, NONE = 3; public static final PortDayCycle NATIVE = new PortDayCycle(false, 1, 0); public static final Identifier NORMAL_TIME = Identifier.fromNamespaceAndPath("rivencraft", "celestial/normal_time"); public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( @@ -30,20 +32,40 @@ public record PortDayCycle(boolean authored, double period, int stoppedTime, Codec.intRange(0, 23999).optionalFieldOf("phase_tick", 0).forGetter(PortDayCycle::phaseTick), Codec.BOOL.optionalFieldOf("clockwise", true).forGetter(PortDayCycle::clockwise), Codec.intRange(-1, 359).optionalFieldOf("bearing", -1).forGetter(PortDayCycle::bearing), - Codec.floatRange(0.25F, 3F).optionalFieldOf("sun_size", 1F).forGetter(PortDayCycle::sunSize) + Codec.floatRange(0.25F, 3F).optionalFieldOf("sun_size", 1F).forGetter(PortDayCycle::sunSize), + Codec.intRange(0, 3).optionalFieldOf("body_mode", PAIRED).forGetter(PortDayCycle::bodyMode), + PortCelestialBody.CODEC.listOf().optionalFieldOf("bodies", List.of()).forGetter(PortDayCycle::bodies) ).apply(instance, PortDayCycle::new)); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( ByteBufCodecs.BOOL, PortDayCycle::authored, ByteBufCodecs.DOUBLE, PortDayCycle::period, ByteBufCodecs.VAR_INT, PortDayCycle::stoppedTime, ByteBufCodecs.VAR_LONG, PortDayCycle::originTick, ByteBufCodecs.VAR_INT, PortDayCycle::phaseTick, ByteBufCodecs.BOOL, PortDayCycle::clockwise, - ByteBufCodecs.INT, PortDayCycle::bearing, ByteBufCodecs.FLOAT, PortDayCycle::sunSize, PortDayCycle::new); + ByteBufCodecs.INT, PortDayCycle::bearing, ByteBufCodecs.FLOAT, PortDayCycle::sunSize, + ByteBufCodecs.VAR_INT, PortDayCycle::bodyMode, + PortCelestialBody.STREAM_CODEC.apply(ByteBufCodecs.list()), PortDayCycle::bodies, PortDayCycle::new); private static volatile Map clientCycles = Map.of(); public PortDayCycle { + bodies = List.copyOf(bodies); if (!Double.isFinite(period) || period < 0 || period > 2 || stoppedTime < 0 || stoppedTime >= 24000 || phaseTick < 0 || phaseTick >= 24000 || bearing < -1 || bearing >= 360 - || !Float.isFinite(sunSize) || sunSize < 0.25F || sunSize > 3F) + || !Float.isFinite(sunSize) || sunSize < 0.25F || sunSize > 3F + || bodyMode < PAIRED || bodyMode > NONE + || bodyMode == NONE && (!authored || !bodies.isEmpty())) throw new IllegalArgumentException("Invalid day cycle"); + if (bodies.stream().filter(body -> body.kind() == SUN).count() > 10 + || bodies.stream().filter(body -> body.kind() == MOON).count() > 10) + throw new IllegalArgumentException("An Age may have at most ten suns and ten moons"); + } + + public PortDayCycle(boolean authored, double period, int stoppedTime, + long originTick, int phaseTick, boolean clockwise, int bearing, float sunSize, int bodyMode) { + this(authored, period, stoppedTime, originTick, phaseTick, clockwise, bearing, sunSize, bodyMode, List.of()); + } + + public PortDayCycle(boolean authored, double period, int stoppedTime, + long originTick, int phaseTick, boolean clockwise, int bearing, float sunSize) { + this(authored, period, stoppedTime, originTick, phaseTick, clockwise, bearing, sunSize, PAIRED); } public PortDayCycle(boolean authored, double period, int stoppedTime) { @@ -87,7 +109,14 @@ public record PortDayCycle(boolean authored, double period, int stoppedTime, } public static boolean supports(Identifier page) { - return page.equals(NORMAL_TIME) || isPeriod(page) || isPhase(page) || isDirection(page) || isAngle(page) || isSize(page); + return isController(page) || isPeriod(page) || isPhase(page) || isDirection(page) || isAngle(page) || isSize(page); + } + + public static boolean isController(Identifier page) { + return page.getNamespace().equals("rivencraft") && switch (page.getPath()) { + case "celestial/normal_time", "celestial/sun", "celestial/moon" -> true; + default -> false; + }; } public static boolean isSize(Identifier page) { @@ -98,25 +127,74 @@ public record PortDayCycle(boolean authored, double period, int stoppedTime, } public static boolean validWriting(List pages) { - int target = pages.indexOf(NORMAL_TIME), periods = 0, phases = 0, directions = 0, angles = 0, sizes = 0; - if (target != pages.lastIndexOf(NORMAL_TIME)) return false; - for (int i = 0; i < pages.size(); i++) { - if (isPeriod(pages.get(i)) && (++periods > 1 || i > target)) return false; - if (isPhase(pages.get(i)) && (++phases > 1 || i > target)) return false; - if (isDirection(pages.get(i)) && (++directions > 1 || i > target)) return false; - if (isAngle(pages.get(i)) && (++angles > 1 || i > target)) return false; - if (isSize(pages.get(i)) && (++sizes > 1 || i > target)) return false; + int periods = 0, phases = 0, directions = 0, angles = 0, sizes = 0, suns = 0, moons = 0; + for (Identifier page : pages) { + if (isPeriod(page) && ++periods > 1 || isPhase(page) && ++phases > 1 + || isDirection(page) && ++directions > 1 || isAngle(page) && ++angles > 1 + || isSize(page) && ++sizes > 1) return false; + if (isController(page)) { + if (!page.getPath().equals("celestial/moon")) suns++; + if (!page.getPath().equals("celestial/sun")) moons++; + if (suns > 10 || moons > 10) return false; + periods = phases = directions = angles = sizes = 0; + } } - return true; + return periods + phases + directions + angles + sizes == 0; } public static PortDayCycle compile(List pages, long seed) { return compile(pages, seed, 0); } + /** Creation-only completion. Exact diagnostic fixtures can still use compile. */ + public static PortDayCycle resolve(List pages, long seed, long nativeTicks) { + if (!validWriting(pages) || !PortAgeColors.validNumbers(pages)) + throw new IllegalArgumentException("Invalid celestial modifier order"); + if (pages.stream().anyMatch(PortDayCycle::isController)) return compile(pages, seed, nativeTicks); + // Match root AgeSkyProfile.random's count draw positions: sky style, + // mixed sky color, then independent 0..3 sun and moon counts. + var random = new Random(seed ^ 0x534B5950524F464CL); + random.nextInt(5); + randomColor(random); + int suns = random.nextInt(4), moons = random.nextInt(4); + var bodies = new java.util.ArrayList(); + for (int i = 0; i < suns + moons; i++) + bodies.addAll(randomUnmodified(seed, i, nativeTicks, i < suns ? SUN : MOON).bodies); + if (bodies.isEmpty()) return new PortDayCycle(true, 1, 0, 0, 0, true, -1, 1F, NONE); + var first = bodies.getFirst(); + return new PortDayCycle(true, first.period(), first.stoppedTime(), first.originTick(), first.phaseTick(), + first.clockwise(), first.bearing(), first.size(), first.kind(), bodies); + } + public static PortDayCycle compile(List pages, long seed, long nativeTicks) { - if (!validWriting(pages)) throw new IllegalArgumentException("Place at most one Length, Phase, Direction, Angle, and Size before Normal Time"); - if (!pages.contains(NORMAL_TIME)) return NATIVE; + if (!validWriting(pages)) throw new IllegalArgumentException("Place at most one of each celestial modifier before its controller; limit ten suns and ten moons"); + if (pages.stream().filter(PortDayCycle::isController).count() <= 1) + return compileOne(pages, seed, nativeTicks, 0); + var bodies = new java.util.ArrayList(); + PortDayCycle first = null; + int start = 0, ordinal = 0; + for (int i = 0; i < pages.size(); i++) if (isController(pages.get(i))) { + var cycle = compileOne(pages.subList(start, i + 1), seed, nativeTicks, ordinal++); + if (first == null) first = cycle; + // Prefix retains original page indices for seeded unnumbered colors. + int color = PortAgeColors.compile(pages.subList(0, i + 1), seed).celestial(); + if (!cycle.bodies.isEmpty()) bodies.addAll(cycle.bodies); + else { + if (cycle.bodyMode != MOON) bodies.add(PortCelestialBody.of(cycle, SUN, color, false)); + if (cycle.bodyMode != SUN) bodies.add(PortCelestialBody.of(cycle, MOON, color, cycle.bodyMode == PAIRED)); + } + start = i + 1; + } + return new PortDayCycle(first.authored, first.period, first.stoppedTime, first.originTick, + first.phaseTick, first.clockwise, first.bearing, first.sunSize, first.bodyMode, bodies); + } + + private static PortDayCycle compileOne(List pages, long seed, long nativeTicks, int ordinal) { + var controller = pages.stream().filter(PortDayCycle::isController).findFirst().orElse(null); + if (controller == null) return NATIVE; + int mode = controller.getPath().equals("celestial/sun") ? SUN + : controller.getPath().equals("celestial/moon") ? MOON : PAIRED; + if (mode != PAIRED && !hasBodyModifiers(pages)) return randomUnmodified(seed, ordinal, nativeTicks, mode); double period = 1; Integer phase = null; boolean clockwise = true; @@ -160,7 +238,59 @@ public record PortDayCycle(boolean authored, double period, int stoppedTime, int stopped = period == 0 ? phase != null ? phase : new Random(seed ^ 0x4441594359434C45L).nextInt(24000) : 0; return new PortDayCycle(true, period, stopped, phase != null ? nativeTicks : 0, - phase == null ? 0 : phase, clockwise, bearing, size); + phase == null ? 0 : phase, clockwise, bearing, size, mode); + } + + private static boolean hasBodyModifiers(List pages) { + boolean color = false, controls = false; + for (var page : pages) { + if (isController(page)) return controls || color; + if (PortAgeColors.isColor(page)) color = true; + else if (PortSkyStyle.forPage(page) != null || page.equals(PortAgeColors.AMBIENT)) color = false; + if (isPeriod(page) || isPhase(page) || isDirection(page) || isAngle(page) || isSize(page)) controls = true; + } + return false; + } + + private static PortDayCycle randomUnmodified(long seed, int ordinal, long nativeTicks, int mode) { + // Independent per-controller stream: unrelated terrain/sky/weather pages + // cannot reshuffle the bodies. Use root random-Age bounds, not native defaults. + var random = new Random(seed ^ 0x43454C4553544941L ^ (ordinal + 1L) * 0x9E3779B97F4A7C15L); + double period = random.nextInt(7) == 0 ? 0D : 0.2D + random.nextDouble() * 1.8D; + int phase = random.nextInt(24000), bearing = random.nextInt(360); + float size = 0.75F + random.nextFloat(); + boolean clockwise = random.nextBoolean(); + int color = randomColor(random); + var cycle = new PortDayCycle(true, period, period == 0 ? phase : 0, nativeTicks, + phase, clockwise, bearing, size, mode); + return new PortDayCycle(true, period, cycle.stoppedTime, nativeTicks, phase, clockwise, bearing, size, + mode, List.of(PortCelestialBody.of(cycle, mode, color, false))); + } + + private static int randomColor(Random random) { + return PortAgeColors.randomColor(random, false); + } + + public boolean singleBody() { return authored && (bodyMode == SUN || bodyMode == MOON); } + public boolean customLight() { return singleBody() || !bodies.isEmpty(); } + + /** Linear authored orbit, as in 1.21.1 Body; zero degrees is Zenith. */ + public float bodyAngle(long nativeTicks) { + return (float) (((time(nativeTicks) - 6000D) % 24000D) * (360D / 24000D)); + } + + public float bodyLight(long nativeTicks) { + if (bodyMode == NONE) return 0; + if (!bodies.isEmpty()) { + float sun = 0, moon = 0; + for (var body : bodies) { + if (body.kind() == SUN) sun += body.light(nativeTicks) * (1F - 0.85F * body.eclipse(bodies, nativeTicks)); + else moon += body.light(nativeTicks); + } + return Math.min(1F, sun > 0 ? sun : moon); + } + float altitude = Math.max(0F, (float) Math.cos(Math.toRadians(bodyAngle(nativeTicks)))); + return altitude * (bodyMode == MOON ? 0.18F : 1F); } public long ticks(long nativeTicks) { diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortFeatureChunkGenerator.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortFeatureChunkGenerator.java index 7d01aa1..a2f4e8b 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortFeatureChunkGenerator.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortFeatureChunkGenerator.java @@ -113,7 +113,7 @@ public final class PortFeatureChunkGenerator extends ChunkGenerator { } @Override public ChunkGeneratorStructureState createState(HolderLookup sets, RandomState random, long seed) { - if (hasStructurePages()) { + if (controlsStructures()) { var lookup = PortStructurePages.filtered(sets, terrainFeatures.structures(), getBiomeSource()); var planning = PortStructurePages.planningBiomes(getBiomeSource(), sets, terrainFeatures.structures()); if (base instanceof PortFlatChunkGenerator || base instanceof net.minecraft.world.level.levelgen.FlatLevelSource) @@ -124,13 +124,13 @@ public final class PortFeatureChunkGenerator extends ChunkGenerator { return base.createState(sets, random, seed); } - private boolean hasStructurePages() { - return terrainFeatures != null && !terrainFeatures.structures().isEmpty(); + private boolean controlsStructures() { + return terrainFeatures != null && (terrainFeatures.structureControl() || !terrainFeatures.structures().isEmpty()); } @Override public void createStructures(RegistryAccess registries, ChunkGeneratorStructureState state, StructureManager structures, ChunkAccess chunk, StructureTemplateManager templates, ResourceKey dimension) { - if (hasStructurePages()) super.createStructures(registries, state, structures, chunk, templates, dimension); + if (controlsStructures()) super.createStructures(registries, state, structures, chunk, templates, dimension); else base.createStructures(registries, state, structures, chunk, templates, dimension); } @Override public void createReferences(WorldGenLevel level, StructureManager structures, ChunkAccess chunk) { diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortRandomAgeSelection.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortRandomAgeSelection.java index 246e763..531202d 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortRandomAgeSelection.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortRandomAgeSelection.java @@ -54,7 +54,8 @@ public final class PortRandomAgeSelection { return new Selection(terrain, new PortBiomePlan(distribution, shuffled.subList(0, count))); } - private static List eligibleBiomes(MinecraftServer server, PortAgeTerrain terrain) { + public static List eligibleBiomes(MinecraftServer server, PortAgeTerrain terrain) { + if (terrain == PortAgeTerrain.VOID) return List.of(Identifier.withDefaultNamespace("the_void")); if (terrain == PortAgeTerrain.CAVE) { List caves = server.registryAccess().lookupOrThrow(Registries.BIOME).listElements() .filter(PortRegistryPages::isCaveBiome) diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortRandomFeatureSelection.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortRandomFeatureSelection.java new file mode 100644 index 0000000..e718c60 --- /dev/null +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortRandomFeatureSelection.java @@ -0,0 +1,85 @@ +package net.dnorberg.rivencraft.age; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import net.dnorberg.rivencraft.writing.PortAuthoredWriting; +import net.dnorberg.rivencraft.writing.PortRegistryPages; +import net.minecraft.resources.Identifier; + +/** Frozen page-free material features and rare formations from 1.21.1. */ +public final class PortRandomFeatureSelection { + private PortRandomFeatureSelection() {} + public record Selection(PortRockPlan rocks, PortLakePlan lakes, PortTerrainFeaturePlan terrain, int dungeons) {} + + public static Selection select(net.minecraft.server.MinecraftServer server, long seed, + PortAgeTerrain terrain, PortBiomePlan biomes) { + var base = select(seed, terrain); + var structures = PortRandomStructureSelection.select(server, seed, terrain, biomes); + var plan = base.terrain(); + plan = plan == null ? new PortTerrainFeaturePlan(List.of(), false, 0, false, structures.structures(), List.of(), true) + : new PortTerrainFeaturePlan(plan.choices(), plan.skylands(), plan.denseOres(), plan.starFissures(), + structures.structures(), plan.carvers(), true); + return new Selection(base.rocks(), base.lakes(), plan, structures.dungeons()); + } + + public static Selection select(long seed, PortAgeTerrain terrain) { + var random = new Random(seed ^ 0x4D4154455249414CL); + int count = random.nextInt(3); + var terrainPage = id("terrain/" + terrain.name().toLowerCase(java.util.Locale.ROOT)); + var candidates = new ArrayList>(); + for (String name : List.of("rocks", "floating_islands", "tendrils", "spheres", "spikes", "obelisks", + "surface_lakes", "deep_lakes", "lava_lakes")) { + var page = id("feature/" + name); + if (PortAuthoredWriting.supports(List.of(terrainPage, page))) + candidates.add(new PortRankedChoice.Option<>(page, rank(name))); + } + var pages = new ArrayList(); + pages.add(terrainPage); + List solids = PortRegistryPages.solidMaterialIds(), fluids = PortRegistryPages.fluidMaterialIds(); + for (int selected = 0; selected < count && !candidates.isEmpty();) { + Identifier feature = PortRankedChoice.choose(random, candidates); + candidates.removeIf(option -> option.value().equals(feature)); + var materials = PortLakePlan.isLake(feature) ? fluids : solids; + if (materials.isEmpty()) continue; + pages.add(PortRegistryPages.blockPageId(materials.get(random.nextInt(materials.size())))); + pages.add(feature); + selected++; + } + if (terrain != PortAgeTerrain.FLAT && terrain != PortAgeTerrain.VOID + && Math.floorMod(mix(seed ^ 0x534B594C414E4453L), 8) == 0) + pages.add(PortTerrainFeaturePlan.SKYLANDS); + if (terrain != PortAgeTerrain.CAVE && terrain != PortAgeTerrain.VOID && random.nextInt(10) == 0) + pages.add(PortTerrainFeaturePlan.CRYSTAL_FORMATIONS); + if (randomStarFissure(seed)) pages.add(PortTerrainFeaturePlan.STAR_FISSURES); + return new Selection(PortAuthoredWriting.rockPlan(pages, seed), PortAuthoredWriting.lakePlan(pages, seed), + PortAuthoredWriting.terrainFeaturePlan(pages, seed), 0); + } + + private static int rank(String name) { + return switch (name) { + case "surface_lakes", "deep_lakes" -> 1; + case "lava_lakes" -> 2; + case "spheres", "spikes", "obelisks" -> 3; + default -> 4; + }; + } + + private static boolean randomStarFissure(long seed) { + var random = new Random(mix(seed ^ 0x535441524752414DL)); + for (int step = 0; step < 27; step++) { + int branch = random.nextInt(5); + if (branch == 0) return false; + if (random.nextInt(9) == 0) return true; + if (branch == 1) return false; + } + return false; + } + + private static Identifier id(String path) { return Identifier.fromNamespaceAndPath("rivencraft", path); } + private static long mix(long value) { + value = (value ^ value >>> 30) * 0xBF58476D1CE4E5B9L; + value = (value ^ value >>> 27) * 0x94D049BB133111EBL; + return value ^ value >>> 31; + } +} diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortRandomStructureSelection.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortRandomStructureSelection.java new file mode 100644 index 0000000..9247126 --- /dev/null +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortRandomStructureSelection.java @@ -0,0 +1,69 @@ +package net.dnorberg.rivencraft.age; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.Set; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.Identifier; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.level.dimension.LevelStem; + +/** Creation-only structure completion, adapted from 1.21.1 AgeStructureSelection. */ +public final class PortRandomStructureSelection { + private static final Identifier DUNGEONS = page("dungeons"); + private PortRandomStructureSelection() {} + public record Selection(int dungeons, List structures) { + public Selection { structures = List.copyOf(structures); } + } + + public static Selection select(MinecraftServer server, long seed, PortAgeTerrain terrain, PortBiomePlan plan) { + Set biomes = actualBiomes(server, terrain, plan); + var eligible = new ArrayList>(); + for (String name : List.of("dungeons", "mineshafts", "nether_fortresses", "strongholds", "villages", + "trial_chambers", "bastions", "buried_treasure", "shipwrecks", "ocean_ruins", "pillager_outposts", + "ruined_portals", "nether_fossils", "ancient_cities", "trail_ruins", "abandoned_camps")) { + Identifier feature = page(name); + boolean allowed = feature.equals(DUNGEONS) + ? net.dnorberg.rivencraft.writing.PortAuthoredWriting.supports(List.of( + Identifier.fromNamespaceAndPath("rivencraft", "terrain/" + terrain.name().toLowerCase(java.util.Locale.ROOT)), feature)) + && server.registryAccess().lookupOrThrow(Registries.PLACED_FEATURE) + .get(ResourceKey.create(Registries.PLACED_FEATURE, + Identifier.fromNamespaceAndPath("rivencraft", "dungeons"))).isPresent() + : PortStructurePages.randomEligible(feature, terrain, biomes, server.registryAccess()); + if (allowed) eligible.add(new PortRankedChoice.Option<>(feature, rank(name))); + } + var random = new Random(seed ^ 0x5354525543545552L); + int count = random.nextInt(3), dungeons = 0; + var structures = new ArrayList(); + for (int selected = 0; selected < count && !eligible.isEmpty(); selected++) { + var feature = PortRankedChoice.choose(random, eligible); + if (feature.equals(DUNGEONS)) dungeons++; + else structures.add(feature); + eligible.removeIf(option -> option.value().equals(feature)); + } + return new Selection(dungeons, structures); + } + + private static Set actualBiomes(MinecraftServer server, PortAgeTerrain terrain, PortBiomePlan plan) { + if (plan != null && plan.distribution() != PortBiomePlan.Distribution.NATIVE) + return Set.copyOf(plan.biomes()); + if (terrain == PortAgeTerrain.FLAT) return Set.of(Identifier.withDefaultNamespace("plains")); + if (terrain == PortAgeTerrain.VOID) return Set.of(Identifier.withDefaultNamespace("the_void")); + if (terrain == PortAgeTerrain.CAVE) return Set.of(Identifier.withDefaultNamespace("lush_caves")); + return server.registryAccess().lookupOrThrow(Registries.LEVEL_STEM).getOrThrow(LevelStem.OVERWORLD) + .value().generator().getBiomeSource().possibleBiomes().stream() + .flatMap(holder -> holder.unwrapKey().stream()).map(key -> key.identifier()) + .collect(java.util.stream.Collectors.toUnmodifiableSet()); + } + + private static int rank(String name) { + return switch (name) { + case "villages", "strongholds", "mineshafts" -> 1; + case "dungeons", "nether_fortresses" -> 2; + default -> 3; + }; + } + private static Identifier page(String name) { return Identifier.fromNamespaceAndPath("rivencraft", "feature/" + name); } +} diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortRankedChoice.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortRankedChoice.java new file mode 100644 index 0000000..29c77cc --- /dev/null +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortRankedChoice.java @@ -0,0 +1,36 @@ +package net.dnorberg.rivencraft.age; + +import java.util.HashMap; +import java.util.List; +import java.util.Random; + +/** The 1.21.1 LegacyRankChoice rule, retained for seeded grammar completion. */ +final class PortRankedChoice { + private PortRankedChoice() {} + record Option(T value, int rank) {} + + static T choose(Random random, List> options) { + if (options.isEmpty()) throw new IllegalArgumentException("No ranked choices"); + var counts = new HashMap(); + int highest = 0; + for (var option : options) { + counts.merge(option.rank(), 1, Integer::sum); + highest = Math.max(highest, option.rank()); + } + var weights = new HashMap(); + int weight = 1, previousTotal = 0; + for (int rank = highest; rank >= 0; rank--) { + int count = counts.getOrDefault(rank, 0); + if (weight != 1 && count > 0) weight = Math.max(weight, previousTotal / count + 1); + weights.put(rank, weight); + previousTotal = count * weight; + weight++; + } + int ticket = random.nextInt(options.stream().mapToInt(option -> weights.get(option.rank())).sum()); + for (var option : options) { + ticket -= weights.get(option.rank()); + if (ticket < 0) return option.value(); + } + throw new IllegalStateException("Ranked choice ticket was not consumed"); + } +} diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortSkyStyle.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortSkyStyle.java index 38f0492..01ebcc7 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortSkyStyle.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortSkyStyle.java @@ -31,11 +31,20 @@ public enum PortSkyStyle { ? OVERWORLD : random(seed)); } + /** Nether-style Ages use their fog clear color as the visible backdrop. */ + public static float fogShade(net.minecraft.world.level.Level level) { + boolean nether = level.dimensionTypeRegistration().unwrapKey().map(key -> + key.identifier().getNamespace().equals("rivencraft") + && key.identifier().getPath().endsWith("_sky_nether")).orElse(false); + var cycle = PortDayCycle.forLevel(level); + return nether && !cycle.bodies().isEmpty() + ? 1F - 0.65F * PortCelestialBody.eclipseAt(cycle.bodies(), PortDayCycle.nativeTicks(level)) : 1F; + } + private static boolean isCelestial(Identifier page) { if (!page.getNamespace().equals(Rivencraft.MOD_ID)) return false; return switch (page.getPath()) { - // Only Overworld currently draws bodies in this port. Recognize the - // Sun/Moon intentions too, without marking those pages implemented. + // Preserve the established compatible-default rule for written controllers. case "celestial/normal_time", "celestial/sun", "celestial/moon" -> true; default -> false; }; diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortStructurePages.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortStructurePages.java index 12a5e2a..18334ec 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortStructurePages.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortStructurePages.java @@ -88,6 +88,20 @@ public final class PortStructurePages { .orElseThrow(() -> new IllegalArgumentException("Missing structure set for " + page))); } + /** Random choices need at least one normally eligible biome; authored pages may override it. */ + public static boolean randomEligible(Identifier page, PortAgeTerrain terrain, Set biomes, + HolderLookup.Provider registries) { + if (!supportsTerrain(page, terrain)) return false; + var set = registries.lookupOrThrow(Registries.STRUCTURE_SET) + .get(ResourceKey.create(Registries.STRUCTURE_SET, SETS.get(page))); + if (set.isEmpty()) return false; + var compatible = set.get().value().structures().stream() + .flatMap(entry -> entry.structure().value().biomes().stream()) + .flatMap(holder -> holder.unwrapKey().stream()).map(key -> key.identifier()) + .collect(java.util.stream.Collectors.toSet()); + return compatible.isEmpty() || biomes.stream().anyMatch(compatible::contains); + } + private static Map enabled(List pages) { Map result = new HashMap<>(); for (Identifier page : pages) result.merge(SETS.get(page), 1, Integer::sum); diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortTerrainFeaturePlan.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortTerrainFeaturePlan.java index 410fb13..018c502 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortTerrainFeaturePlan.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/PortTerrainFeaturePlan.java @@ -9,7 +9,8 @@ import net.minecraft.resources.Identifier; /** Frozen terrain filters and ordered solid/surface features for an Age. */ public record PortTerrainFeaturePlan(List choices, boolean skylands, int denseOres, - boolean starFissures, List structures, List carvers) { + boolean starFissures, List structures, List carvers, + boolean structureControl) { public static final Identifier FLOATING_ISLANDS = Identifier.fromNamespaceAndPath( Rivencraft.MOD_ID, "feature/floating_islands"); public static final Identifier TENDRILS = Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, "feature/tendrils"); @@ -30,7 +31,8 @@ public record PortTerrainFeaturePlan(List choices, boolean skylands, int .forGetter(PortTerrainFeaturePlan::denseOres), Codec.BOOL.optionalFieldOf("star_fissures", false).forGetter(PortTerrainFeaturePlan::starFissures), Identifier.CODEC.listOf().optionalFieldOf("structures", List.of()).forGetter(PortTerrainFeaturePlan::structures), - Identifier.CODEC.listOf().optionalFieldOf("carvers", List.of()).forGetter(PortTerrainFeaturePlan::carvers) + Identifier.CODEC.listOf().optionalFieldOf("carvers", List.of()).forGetter(PortTerrainFeaturePlan::carvers), + Codec.BOOL.optionalFieldOf("structure_control", false).forGetter(PortTerrainFeaturePlan::structureControl) ).apply(instance, PortTerrainFeaturePlan::new)); public record Choice(Identifier page, Identifier material) { @@ -55,7 +57,7 @@ public record PortTerrainFeaturePlan(List choices, boolean skylands, int PortCarverPages.validateCounts(carvers); if (denseOres < 0 || denseOres > MAX_PER_FEATURE) throw new IllegalArgumentException("Dense Ores permits at most 32 occurrences"); - if (choices.isEmpty() && !skylands && denseOres == 0 && !starFissures && structures.isEmpty() && carvers.isEmpty()) + if (choices.isEmpty() && !skylands && denseOres == 0 && !starFissures && structures.isEmpty() && carvers.isEmpty() && !structureControl) throw new IllegalArgumentException("Terrain feature plan must not be empty"); var counts = new HashMap(); for (Choice choice : choices) { @@ -64,6 +66,11 @@ public record PortTerrainFeaturePlan(List choices, boolean skylands, int } } + public PortTerrainFeaturePlan(List choices, boolean skylands, int denseOres, + boolean starFissures, List structures, List carvers) { + this(choices, skylands, denseOres, starFissures, structures, carvers, false); + } + public PortTerrainFeaturePlan(List choices, boolean skylands, int denseOres, boolean starFissures, List structures) { this(choices, skylands, denseOres, starFissures, structures, List.of()); diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/RuntimeAgeBackend.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/RuntimeAgeBackend.java index ef07ab3..02f02f2 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/RuntimeAgeBackend.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/age/RuntimeAgeBackend.java @@ -465,7 +465,7 @@ public final class RuntimeAgeBackend { case CAVE -> dryCaveSettings(server); case FLAT, VOID -> throw new IllegalStateException("Flat terrain should use FlatLevelSource"); }; - generator = new NoiseBasedChunkGenerator(source, settings); + generator = new NoiseBasedChunkGenerator(source, PortBiomeMaterialRules.apply(server.registryAccess(), settings.value())); } if (rocks != null || vegetation != null || dungeons > 0 || lakes != null || terrainFeatures != null) generator = new PortFeatureChunkGenerator(generator, rocks, vegetation, dungeons, lakes, terrainFeatures, seed); diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/client/PortCelestialDiscs.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/client/PortCelestialDiscs.java new file mode 100644 index 0000000..6f22737 --- /dev/null +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/client/PortCelestialDiscs.java @@ -0,0 +1,85 @@ +package net.dnorberg.rivencraft.client; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.ByteBufferBuilder; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.renderpearl.api.buffers.GpuBuffer; +import com.mojang.renderpearl.api.commands.RenderPass; +import com.mojang.renderpearl.api.pipeline.BlendFunction; +import com.mojang.renderpearl.api.pipeline.ColorTargetState; +import com.mojang.renderpearl.api.pipeline.PrimitiveTopology; +import com.mojang.renderpearl.api.pipeline.RenderPipeline; +import java.util.IdentityHashMap; +import java.util.Map; +import net.dnorberg.rivencraft.Rivencraft; +import net.minecraft.client.renderer.RenderPipelines; +import net.minecraft.client.renderer.texture.TextureAtlas; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.resources.Identifier; +import net.minecraft.world.level.MoonPhase; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.RegisterRenderPipelinesEvent; +import org.joml.Matrix4f; +import org.joml.Vector4f; + +/** Legacy's opaque central disc, separate from the native transparent glow. */ +@EventBusSubscriber(modid = Rivencraft.MOD_ID, value = Dist.CLIENT) +public final class PortCelestialDiscs implements AutoCloseable { + private static final Identifier SUN = Identifier.withDefaultNamespace("sun"); + private static final RenderPipeline CORE = RenderPipelines.CELESTIAL.toBuilder() + .withLocation(Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, "pipeline/celestial_core")) + .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)).build(); + private final Map cores = new IdentityHashMap<>(); + private TextureAtlasSprite atlasGeneration; + + @SubscribeEvent public static void register(RegisterRenderPipelinesEvent event) { event.registerPipeline(CORE); } + + public void draw(RenderPass pass, TextureAtlas atlas, boolean moon, MoonPhase phase, + Matrix4f transform, int color, float alpha) { + if (alpha <= 0) return; + var generation = atlas.getSprite(SUN); + if (generation != atlasGeneration) { + close(); + atlasGeneration = generation; + } + var sprite = moon ? atlas.getSprite(Identifier.withDefaultNamespace("moon/" + phase.getSerializedName())) : generation; + var buffer = cores.computeIfAbsent(sprite, ignored -> build(sprite, moon)); + var indices = RenderSystem.getSequentialBuffer(PrimitiveTopology.QUADS); + var indexBuffer = indices.getBuffer(6); + var rgb = net.dnorberg.rivencraft.age.PortAgeColors.vector(color); + var uniforms = RenderSystem.getDynamicUniforms().writeTransform(transform, new Vector4f(rgb, alpha)); + pass.setPipeline(RenderSystem.getCompiledPipeline(CORE)); + RenderSystem.bindDefaultUniforms(pass); + pass.setUniform("DynamicTransforms", uniforms); + pass.setUniform("Sampler0", atlas.getTextureView(), atlas.getSampler()); + pass.setVertexBuffer(0, buffer.slice()); + pass.setIndexBuffer(indexBuffer, indices.type()); + pass.drawIndexed(6, 1, 0, 0, 0); + } + + private static GpuBuffer build(TextureAtlasSprite sprite, boolean moon) { + var format = DefaultVertexFormat.POSITION_TEX; + try (var bytes = ByteBufferBuilder.exactlySized(4 * format.getVertexSize())) { + var builder = new BufferBuilder(bytes, PrimitiveTopology.QUADS, format); + // Same 8/32 central area as root's ordinary-alpha second pass. + float u0 = sprite.getU(0.375F), u1 = sprite.getU(0.625F); + float v0 = sprite.getV(0.375F), v1 = sprite.getV(0.625F); + builder.addVertex(-0.25F, 0, -0.25F).setUv(moon ? u1 : u0, moon ? v1 : v0); + builder.addVertex(0.25F, 0, -0.25F).setUv(moon ? u0 : u1, moon ? v1 : v0); + builder.addVertex(0.25F, 0, 0.25F).setUv(moon ? u0 : u1, moon ? v0 : v1); + builder.addVertex(-0.25F, 0, 0.25F).setUv(moon ? u1 : u0, moon ? v0 : v1); + try (var mesh = builder.buildOrThrow()) { + return RenderSystem.getDevice().createBuffer(() -> "Rivencraft celestial core", 40, mesh.vertexBuffer()); + } + } + } + + @Override public void close() { + cores.values().forEach(GpuBuffer::close); + cores.clear(); + atlasGeneration = null; + } +} diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/client/StaticSkyState.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/client/StaticSkyState.java index a4c1116..79e73e7 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/client/StaticSkyState.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/client/StaticSkyState.java @@ -2,6 +2,11 @@ package net.dnorberg.rivencraft.client; /** Carries extracted sky presentation values without live-world reads during drawing. */ public interface StaticSkyState { + int rivencraft$bodyOverlay(); + void rivencraft$bodyOverlay(int mode); + record Body(int kind, float angle, int bearing, float size, int color, float eclipse) {} + java.util.List rivencraft$bodies(); + void rivencraft$bodies(java.util.List bodies); long rivencraft$staticFrame(); void rivencraft$staticFrame(long frame); int rivencraft$skyTint(); @@ -10,4 +15,8 @@ public interface StaticSkyState { void rivencraft$orbitBearing(int bearing); float rivencraft$sunSize(); void rivencraft$sunSize(float size); + int rivencraft$celestialTint(); + void rivencraft$celestialTint(int color); + int rivencraft$bodyMode(); + void rivencraft$bodyMode(int mode); } diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/mixin/AgeColorAttributesMixin.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/mixin/AgeColorAttributesMixin.java index a845287..84db6ac 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/mixin/AgeColorAttributesMixin.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/mixin/AgeColorAttributesMixin.java @@ -22,7 +22,9 @@ public class AgeColorAttributesMixin { }); builder.addTimeBasedLayer(EnvironmentAttributes.FOG_COLOR, (base, tick) -> { int rgb = PortAgeColors.forLevel(level).sky(); - return rgb < 0 ? base : PortAgeColors.vector(rgb); + var color = rgb < 0 ? base : PortAgeColors.vector(rgb); + float shade = net.dnorberg.rivencraft.age.PortSkyStyle.fogShade(level); + return shade == 1F ? color : new org.joml.Vector3f(color).mul(shade); }); builder.addTimeBasedLayer(EnvironmentAttributes.AMBIENT_LIGHT_COLOR, (base, tick) -> { int rgb = PortAgeColors.forLevel(level).ambient(); diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/mixin/AgeDayTimelineMixin.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/mixin/AgeDayTimelineMixin.java index 43b6081..1fe4ab3 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/mixin/AgeDayTimelineMixin.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/mixin/AgeDayTimelineMixin.java @@ -2,6 +2,7 @@ package net.dnorberg.rivencraft.mixin; import net.dnorberg.rivencraft.age.PortDayCycle; import net.minecraft.world.attribute.EnvironmentAttributeSystem; +import net.minecraft.world.attribute.EnvironmentAttributes; import net.minecraft.world.attribute.WeatherAttributes; import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; @@ -11,6 +12,30 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(EnvironmentAttributeSystem.Builder.class) public class AgeDayTimelineMixin { + @Inject(method = "addDefaultLayers", at = @At("RETURN")) + private void rivencraft$singleBody(Level level, CallbackInfoReturnable cir) { + var id = level.dimension().identifier(); + if (!id.getNamespace().equals("rivencraft") || !id.getPath().startsWith("age/")) return; + var builder = cir.getReturnValue(); + builder.addTimeBasedLayer(EnvironmentAttributes.SUN_ANGLE, (base, tick) -> { + var cycle = PortDayCycle.forLevel(level); + return cycle.singleBody() ? cycle.bodyAngle(PortDayCycle.nativeTicks(level)) : base; + }); + builder.addTimeBasedLayer(EnvironmentAttributes.MOON_ANGLE, (base, tick) -> { + var cycle = PortDayCycle.forLevel(level); + return cycle.singleBody() ? cycle.bodyAngle(PortDayCycle.nativeTicks(level)) : base; + }); + builder.addTimeBasedLayer(EnvironmentAttributes.SKY_LIGHT_LEVEL, (base, tick) -> { + var cycle = PortDayCycle.forLevel(level); + if (!cycle.customLight()) return base; + // Match root AgeSkyProfile.lightAt and LevelSkyBrightnessMixin's + // single skylight channel. Bright/Dark and no-skylight geometry remain separate. + float weather = (1F - level.getRainLevel(1F) * 5F / 16F) + * (1F - level.getThunderLevel(1F) * 5F / 16F); + return 15F - (int) ((1F - cycle.bodyLight(PortDayCycle.nativeTicks(level)) * weather) * 11F); + }); + } + @Inject(method = "addDynamicLayers", at = @At("HEAD"), cancellable = true) private void rivencraft$dayCycle(Level level, CallbackInfoReturnable cir) { var id = level.dimension().identifier(); diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/mixin/StaticSkyRendererMixin.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/mixin/StaticSkyRendererMixin.java index b8710bd..db505a0 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/mixin/StaticSkyRendererMixin.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/mixin/StaticSkyRendererMixin.java @@ -26,6 +26,24 @@ public class StaticSkyRendererMixin { @Unique private int rivencraft$endTint = -1; @Unique private int rivencraft$orbitBearing = -1; @Unique private float rivencraft$sunSize = 1F; + @Unique private int rivencraft$celestialTint = -1; + @Unique private int rivencraft$bodyMode; + @Unique private java.util.List rivencraft$bodies = java.util.List.of(); + @Unique private net.dnorberg.rivencraft.client.PortCelestialDiscs rivencraft$discs; + @Shadow @Final private net.minecraft.client.renderer.texture.TextureAtlas celestialsAtlas; + @Shadow private org.joml.Matrix4f applyCelestialBodyTransform(com.mojang.blaze3d.vertex.PoseStack pose, + float height, float size) { throw new AssertionError(); } + @Shadow private void renderSun(com.mojang.renderpearl.api.commands.RenderPass pass, float alpha, + com.mojang.blaze3d.vertex.PoseStack pose) { throw new AssertionError(); } + @Shadow private void renderMoon(com.mojang.renderpearl.api.commands.RenderPass pass, + net.minecraft.world.level.MoonPhase phase, float alpha, + com.mojang.blaze3d.vertex.PoseStack pose) { throw new AssertionError(); } + @Shadow private void renderStars(com.mojang.renderpearl.api.commands.RenderPass pass, float brightness, + com.mojang.blaze3d.vertex.PoseStack pose) { throw new AssertionError(); } + @Shadow private void renderSunMoonAndStars(com.mojang.renderpearl.api.commands.RenderPass pass, + com.mojang.blaze3d.vertex.PoseStack pose, float sunAngle, + float moonAngle, float starAngle, net.minecraft.world.level.MoonPhase phase, + float alpha, float stars) { throw new AssertionError(); } @Inject(method = "extractRenderState", at = @At("TAIL")) private void rivencraft$extract(ClientLevel level, float partialTicks, Camera camera, @@ -36,11 +54,66 @@ public class StaticSkyRendererMixin { ((StaticSkyState) state).rivencraft$staticFrame(enabled ? level.getGameTime() / 2 : Long.MIN_VALUE); ((StaticSkyState) state).rivencraft$skyTint(net.dnorberg.rivencraft.age.PortAgeColors.forLevel(level).sky()); var cycle = net.dnorberg.rivencraft.age.PortDayCycle.forLevel(level); + // 0=native Overworld/no authored overlay, 1=fog-only backdrop, + // 2=native End backdrop, 3=custom Static backdrop. + int overlay = !cycle.authored() || cycle.bodyMode() == net.dnorberg.rivencraft.age.PortDayCycle.NONE + || state.skybox == DimensionType.Skybox.OVERWORLD ? 0 + : enabled ? 3 : state.skybox == DimensionType.Skybox.NONE ? 1 : 2; + ((StaticSkyState) state).rivencraft$bodyOverlay(overlay); ((StaticSkyState) state).rivencraft$orbitBearing(cycle.authored() ? cycle.bearing() : -1); ((StaticSkyState) state).rivencraft$sunSize(cycle.authored() ? cycle.sunSize() : 1F); + ((StaticSkyState) state).rivencraft$celestialTint( + net.dnorberg.rivencraft.age.PortAgeColors.forLevel(level).celestial()); + ((StaticSkyState) state).rivencraft$bodyMode(cycle.authored() ? cycle.bodyMode() : 0); + // Root's authored Moon always samples the full-moon sprite. Preserve + // native calendar phases only for the native Normal Time pair. + if (cycle.singleBody() && cycle.bodyMode() == net.dnorberg.rivencraft.age.PortDayCycle.MOON) + state.moonPhase = net.minecraft.world.level.MoonPhase.FULL_MOON; + var authoredBodies = cycle.bodies(); + if (authoredBodies.isEmpty() && overlay != 0) { + var bodies = new java.util.ArrayList(); + int tint = net.dnorberg.rivencraft.age.PortAgeColors.forLevel(level).celestial(); + if (cycle.bodyMode() != net.dnorberg.rivencraft.age.PortDayCycle.MOON) + bodies.add(net.dnorberg.rivencraft.age.PortCelestialBody.of(cycle, 1, tint, false)); + if (cycle.bodyMode() != net.dnorberg.rivencraft.age.PortDayCycle.SUN) + bodies.add(net.dnorberg.rivencraft.age.PortCelestialBody.of(cycle, 2, tint, cycle.bodyMode() == 0)); + authoredBodies = java.util.List.copyOf(bodies); + } + if (authoredBodies.isEmpty()) ((StaticSkyState) state).rivencraft$bodies(java.util.List.of()); + else { + var clock = level.clockManager().getInstance(level.registryAccess().lookupOrThrow( + net.minecraft.core.registries.Registries.WORLD_CLOCK).getOrThrow(net.minecraft.world.clock.WorldClocks.OVERWORLD)); + double ticks = clock.totalTicks() + clock.partialTick(); + var sources = authoredBodies; + var bodies = sources.stream().map(body -> { + float eclipse = body.eclipse(sources, ticks); + return new StaticSkyState.Body(body.kind(), body.angle(ticks), body.bearing(), body.size(), + body.eclipseColor(eclipse), eclipse); + }).toList(); + ((StaticSkyState) state).rivencraft$bodies(bodies); + float eclipse = 0; + for (var body : bodies) if (body.kind() == 1 && Math.cos(Math.toRadians(body.angle())) > 0) + eclipse = Math.max(eclipse, body.eclipse()); + if (state.skybox == DimensionType.Skybox.OVERWORLD) { + state.skyColor = new org.joml.Vector3f(state.skyColor).mul(1F - 0.65F * eclipse); + } else if (eclipse > 0 && overlay >= 2) { + int tint = ((StaticSkyState) state).rivencraft$skyTint(); + if (tint < 0) tint = enabled ? 0x929292 : 0xffffff; + ((StaticSkyState) state).rivencraft$skyTint(rivencraft$shade(tint, 1F - 0.65F * eclipse)); + } + } // Only the extracted presentation uses END to schedule the sky pass. The actual // dimension has NONE, so it never acquires End flashes or End gameplay behavior. - if (enabled) state.skybox = DimensionType.Skybox.END; + if (enabled || overlay == 1) { + state.skybox = DimensionType.Skybox.END; + state.endFlashIntensity = 0; + } + if (overlay != 0) state.rainBrightness = 1F - level.getRainLevel(partialTicks); + } + + @Unique private static int rivencraft$shade(int rgb, float shade) { + return Math.round((rgb >> 16 & 255) * shade) << 16 + | Math.round((rgb >> 8 & 255) * shade) << 8 | Math.round((rgb & 255) * shade); } @Inject(method = "render", at = @At("HEAD"), cancellable = true) @@ -49,9 +122,82 @@ public class StaticSkyRendererMixin { rivencraft$endTint = ((StaticSkyState) state).rivencraft$skyTint(); rivencraft$orbitBearing = ((StaticSkyState) state).rivencraft$orbitBearing(); rivencraft$sunSize = ((StaticSkyState) state).rivencraft$sunSize(); + rivencraft$celestialTint = ((StaticSkyState) state).rivencraft$celestialTint(); + rivencraft$bodyMode = ((StaticSkyState) state).rivencraft$bodyMode(); + rivencraft$bodies = ((StaticSkyState) state).rivencraft$bodies(); + if (((StaticSkyState) state).rivencraft$bodyOverlay() == 1) { + rivencraft$overlay(fog, state); + ci.cancel(); + return; + } if (frame == Long.MIN_VALUE) return; if (rivencraft$staticSky == null) rivencraft$staticSky = new PortStaticSky(); rivencraft$staticSky.render(renderTarget, fog, frame, rivencraft$endTint); + if (((StaticSkyState) state).rivencraft$bodyOverlay() == 3) rivencraft$overlay(fog, state); + ci.cancel(); + } + + @Inject(method = "render", at = @At("RETURN")) + private void rivencraft$afterBackground(GpuBufferSlice fog, SkyRenderState state, CallbackInfo ci) { + // RETURN includes the native End branch's early return, after its pass closes. + if (((StaticSkyState) state).rivencraft$bodyOverlay() == 2) rivencraft$overlay(fog, state); + } + + @Unique private void rivencraft$overlay(GpuBufferSlice fog, SkyRenderState state) { + if (rivencraft$bodies.isEmpty()) return; + com.mojang.blaze3d.systems.RenderSystem.setShaderFog(fog); + try (var pass = com.mojang.blaze3d.systems.RenderSystem.getDevice().createCommandEncoder().createRenderPass( + () -> "Rivencraft celestial overlay", renderTarget.getColorTextureView(), java.util.Optional.empty(), + renderTarget.getDepthTextureView(), java.util.OptionalDouble.empty())) { + renderSunMoonAndStars(pass, new com.mojang.blaze3d.vertex.PoseStack(), 0, 0, 0, + net.minecraft.world.level.MoonPhase.FULL_MOON, state.rainBrightness, 0); + } + } + + @Inject(method = "renderSunMoonAndStars", at = @At("HEAD"), cancellable = true) + private void rivencraft$drawBodies(com.mojang.renderpearl.api.commands.RenderPass pass, + com.mojang.blaze3d.vertex.PoseStack pose, float sunAngle, + float moonAngle, float starAngle, net.minecraft.world.level.MoonPhase phase, + float alpha, float stars, CallbackInfo ci) { + if (rivencraft$bodies.isEmpty()) return; + int savedMode = rivencraft$bodyMode, savedTint = rivencraft$celestialTint; + float savedSize = rivencraft$sunSize; + try { + // Stars belong behind opaque discs, not on top of a dark eclipsing moon. + if (stars > 0) { + pose.pushPose(); + try { + pose.rotateDegrees(com.mojang.math.Axis.YP, -90); + pose.rotate(com.mojang.math.Axis.XP, starAngle); + renderStars(pass, stars, pose); + } finally { pose.popPose(); } + } + // Same ordering as 1.21.1: all suns, then all moons; each opaque + // central disc is drawn after its transparent glow. + for (int kind = 1; kind <= 2; kind++) for (var body : rivencraft$bodies) { + if (body.kind() != kind) continue; + rivencraft$bodyMode = kind; + rivencraft$celestialTint = body.color(); + rivencraft$sunSize = body.size(); + pose.pushPose(); + try { + pose.rotateDegrees(com.mojang.math.Axis.YP, body.bearing() < 0 ? -90 : body.bearing()); + pose.rotateDegrees(com.mojang.math.Axis.XP, body.angle()); + float glowAlpha = alpha * (kind == 1 ? 0.84F : 0.88F + 0.12F * body.eclipse()); + var bodyPhase = net.minecraft.world.level.MoonPhase.FULL_MOON; + if (kind == 1) renderSun(pass, glowAlpha, pose); else renderMoon(pass, bodyPhase, glowAlpha, pose); + if (rivencraft$discs == null) rivencraft$discs = new net.dnorberg.rivencraft.client.PortCelestialDiscs(); + // Both passes must use the same sprite. Native dark phase pixels + // become black patches under ordinary alpha, unlike the old glow-only pass. + var transform = applyCelestialBodyTransform(pose, 100F, (kind == 1 ? 30F : 20F) * body.size()); + rivencraft$discs.draw(pass, celestialsAtlas, kind == 2, bodyPhase, transform, body.color(), alpha); + } finally { pose.popPose(); } + } + } finally { + rivencraft$bodyMode = savedMode; + rivencraft$celestialTint = savedTint; + rivencraft$sunSize = savedSize; + } ci.cancel(); } @@ -68,10 +214,48 @@ public class StaticSkyRendererMixin { return nativeSize * rivencraft$sunSize; } - @Inject(method = "renderSunriseAndSunset", at = @At("HEAD")) + @ModifyArg(method = "renderMoon", at = @At(value = "INVOKE", target = + "Lnet/minecraft/client/renderer/SkyRenderer;applyCelestialBodyTransform(Lcom/mojang/blaze3d/vertex/PoseStack;FF)Lorg/joml/Matrix4f;"), index = 2) + private float rivencraft$scaleMoon(float nativeSize) { + return rivencraft$bodyMode == net.dnorberg.rivencraft.age.PortDayCycle.MOON + ? nativeSize * rivencraft$sunSize : nativeSize; + } + + @Inject(method = "renderSun", at = @At("HEAD"), cancellable = true) + private void rivencraft$hideSun(com.mojang.renderpearl.api.commands.RenderPass pass, float alpha, + com.mojang.blaze3d.vertex.PoseStack pose, CallbackInfo ci) { + if (rivencraft$bodyMode == net.dnorberg.rivencraft.age.PortDayCycle.MOON + || rivencraft$bodyMode == net.dnorberg.rivencraft.age.PortDayCycle.NONE) ci.cancel(); + } + + @Inject(method = "renderMoon", at = @At("HEAD"), cancellable = true) + private void rivencraft$hideMoon(com.mojang.renderpearl.api.commands.RenderPass pass, + net.minecraft.world.level.MoonPhase phase, float alpha, + com.mojang.blaze3d.vertex.PoseStack pose, CallbackInfo ci) { + if (rivencraft$bodyMode == net.dnorberg.rivencraft.age.PortDayCycle.SUN + || rivencraft$bodyMode == net.dnorberg.rivencraft.age.PortDayCycle.NONE) ci.cancel(); + } + + @ModifyArg(method = {"renderSun", "renderMoon"}, at = @At(value = "INVOKE", target = + "Lnet/minecraft/client/renderer/DynamicGpuData;writeTransform(Lorg/joml/Matrix4f;Lorg/joml/Vector4f;)Lcom/mojang/renderpearl/api/buffers/GpuBufferSlice;"), index = 1) + private org.joml.Vector4f rivencraft$tintCelestial(org.joml.Vector4f nativeColor) { + // Normal Time consumes one shared color group for its sun and moon in 1.21.1. + // Keep native alpha (including weather fading) and the sprite's transparent halo. + if (rivencraft$celestialTint < 0) return nativeColor; + var tint = net.dnorberg.rivencraft.age.PortAgeColors.vector(rivencraft$celestialTint); + return new org.joml.Vector4f(nativeColor.x * tint.x(), nativeColor.y * tint.y(), + nativeColor.z * tint.z(), nativeColor.w); + } + + @Inject(method = "renderSunriseAndSunset", at = @At("HEAD"), cancellable = true) private void rivencraft$rotateHorizon(com.mojang.renderpearl.api.commands.RenderPass pass, com.mojang.blaze3d.vertex.PoseStack pose, float angle, org.joml.Vector4fc color, CallbackInfo ci) { + if (rivencraft$bodyMode == net.dnorberg.rivencraft.age.PortDayCycle.MOON + || rivencraft$bodyMode == net.dnorberg.rivencraft.age.PortDayCycle.NONE) { + ci.cancel(); + return; + } if (rivencraft$orbitBearing < 0) return; pose.pushPose(); pose.rotateDegrees(com.mojang.math.Axis.YP, rivencraft$orbitBearing + 90); @@ -81,7 +265,9 @@ public class StaticSkyRendererMixin { private void rivencraft$restoreHorizon(com.mojang.renderpearl.api.commands.RenderPass pass, com.mojang.blaze3d.vertex.PoseStack pose, float angle, org.joml.Vector4fc color, CallbackInfo ci) { - if (rivencraft$orbitBearing >= 0) pose.popPose(); + if (rivencraft$bodyMode != net.dnorberg.rivencraft.age.PortDayCycle.MOON + && rivencraft$bodyMode != net.dnorberg.rivencraft.age.PortDayCycle.NONE + && rivencraft$orbitBearing >= 0) pose.popPose(); } @Redirect(method = "renderEndSky", at = @At(value = "INVOKE", target = @@ -94,6 +280,10 @@ public class StaticSkyRendererMixin { @Inject(method = "close", at = @At("HEAD")) private void rivencraft$close(CallbackInfo ci) { + if (rivencraft$discs != null) { + rivencraft$discs.close(); + rivencraft$discs = null; + } if (rivencraft$staticSky != null) { rivencraft$staticSky.close(); rivencraft$staticSky = null; diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/mixin/StaticSkyStateMixin.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/mixin/StaticSkyStateMixin.java index 0bec028..202b714 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/mixin/StaticSkyStateMixin.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/mixin/StaticSkyStateMixin.java @@ -14,6 +14,14 @@ public class StaticSkyStateMixin implements StaticSkyState { @Unique private int rivencraft$tint = -1; @Unique private int rivencraft$bearing = -1; @Unique private float rivencraft$sunSize = 1F; + @Unique private int rivencraft$celestialTint = -1; + @Unique private int rivencraft$bodyMode; + @Unique private int rivencraft$bodyOverlay; + public int rivencraft$bodyOverlay() { return rivencraft$bodyOverlay; } + public void rivencraft$bodyOverlay(int mode) { rivencraft$bodyOverlay = mode; } + @Unique private java.util.List rivencraft$bodies = java.util.List.of(); + public java.util.List rivencraft$bodies() { return rivencraft$bodies; } + public void rivencraft$bodies(java.util.List bodies) { rivencraft$bodies = java.util.List.copyOf(bodies); } public long rivencraft$staticFrame() { return rivencraft$frame; } public void rivencraft$staticFrame(long frame) { rivencraft$frame = frame; } public int rivencraft$skyTint() { return rivencraft$tint; } @@ -22,6 +30,10 @@ public class StaticSkyStateMixin implements StaticSkyState { public void rivencraft$orbitBearing(int bearing) { rivencraft$bearing = bearing; } public float rivencraft$sunSize() { return rivencraft$sunSize; } public void rivencraft$sunSize(float size) { rivencraft$sunSize = size; } + public int rivencraft$celestialTint() { return rivencraft$celestialTint; } + public void rivencraft$celestialTint(int color) { rivencraft$celestialTint = color; } + public int rivencraft$bodyMode() { return rivencraft$bodyMode; } + public void rivencraft$bodyMode(int mode) { rivencraft$bodyMode = mode; } @Inject(method = "reset", at = @At("TAIL")) private void rivencraft$reset(CallbackInfo ci) { @@ -29,5 +41,9 @@ public class StaticSkyStateMixin implements StaticSkyState { rivencraft$tint = -1; rivencraft$bearing = -1; rivencraft$sunSize = 1F; + rivencraft$celestialTint = -1; + rivencraft$bodyMode = 0; + rivencraft$bodyOverlay = 0; + rivencraft$bodies = java.util.List.of(); } } diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/network/PortBookNetworking.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/network/PortBookNetworking.java index 0cdd178..3a1962a 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/network/PortBookNetworking.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/network/PortBookNetworking.java @@ -108,9 +108,10 @@ public final class PortBookNetworking { public static Identifier createAge(ServerPlayer player, String title, List pages) { if (title == null || title.isBlank() || title.length() > MAX_BOOK_TITLE_LENGTH) return null; + long seed = player.getRandom().nextLong(); net.dnorberg.rivencraft.age.PortBiomePlan biomePlan; try { - biomePlan = PortAuthoredWriting.biomePlan(pages, player.registryAccess()); + biomePlan = PortAuthoredWriting.biomePlan(pages, player.level().getServer(), seed); } catch (IllegalArgumentException exception) { player.sendOverlayMessage(Component.literal("Age writing unavailable: " + exception.getMessage())); return null; @@ -127,7 +128,6 @@ public final class PortBookNetworking { id = Identifier.fromNamespaceAndPath(Rivencraft.MOD_ID, "age/" + name); } try { - long seed = player.getRandom().nextLong(); PortAgeTerrain terrain = PortAuthoredWriting.terrain(pages); if (pages.isEmpty()) { PortRandomAgeSelection.Selection random = PortRandomAgeSelection.select(server, seed); @@ -135,15 +135,17 @@ public final class PortBookNetworking { biomePlan = random.biomes(); } var environment = net.dnorberg.rivencraft.age.PortEnvironmentSelection.resolve(pages, seed, terrain); + var randomFeatures = pages.isEmpty() + ? net.dnorberg.rivencraft.age.PortRandomFeatureSelection.select(server, seed, terrain, biomePlan) : null; RuntimeAgeBackend.create(server, id, seed, biomePlan, terrain, - PortAuthoredWriting.rockPlan(pages, seed), + randomFeatures == null ? PortAuthoredWriting.rockPlan(pages, seed) : randomFeatures.rocks(), PortAuthoredWriting.vegetationPlan(pages), - PortAuthoredWriting.dungeonCount(pages), - PortAuthoredWriting.lakePlan(pages, seed), - PortAuthoredWriting.terrainFeaturePlan(pages, seed), + randomFeatures == null ? PortAuthoredWriting.dungeonCount(pages) : randomFeatures.dungeons(), + randomFeatures == null ? PortAuthoredWriting.lakePlan(pages, seed) : randomFeatures.lakes(), + randomFeatures == null ? PortAuthoredWriting.terrainFeaturePlan(pages, seed) : randomFeatures.terrain(), environment.weather(), environment.lighting(), environment.sky(), - net.dnorberg.rivencraft.age.PortAgeColors.compile(pages, seed), - net.dnorberg.rivencraft.age.PortDayCycle.compile(pages, seed, + net.dnorberg.rivencraft.age.PortAgeColors.resolve(pages, seed), + net.dnorberg.rivencraft.age.PortDayCycle.resolve(pages, seed, net.dnorberg.rivencraft.age.PortDayCycle.nativeTicks(server.overworld()))); } catch (IllegalArgumentException | IllegalStateException exception) { player.sendOverlayMessage(Component.literal("Age creation failed: " + exception.getMessage())); diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/writing/PortAuthoredWriting.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/writing/PortAuthoredWriting.java index ff6d4f3..ca0987b 100644 --- a/ports/mc263/src/main/java/net/dnorberg/rivencraft/writing/PortAuthoredWriting.java +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/writing/PortAuthoredWriting.java @@ -72,6 +72,12 @@ public final class PortAuthoredWriting { /** A page never disappears into an Age unless this port can apply its effect. */ public static boolean supports(List pages) { + try { + return supportsExplicit(PortMaterialCompletion.complete(pages, 0)); + } catch (IllegalArgumentException exception) { return false; } + } + + private static boolean supportsExplicit(List pages) { if (!net.dnorberg.rivencraft.age.PortAgeColors.validNumbers(pages)) return false; if (!net.dnorberg.rivencraft.age.PortDayCycle.validWriting(pages)) return false; boolean terrain = false; @@ -97,7 +103,7 @@ public final class PortAuthoredWriting { || pendingMaterial.equals("rivencraft:fluid") && PortLakePlan.isLake(page))) return false; if (net.dnorberg.rivencraft.age.PortAgeColors.isModifier(page) || net.dnorberg.rivencraft.age.PortDayCycle.supports(page)) { - // Shared color groups can precede a sky/ambient target or tint the sky at the end. + // Shared colors target Sky, Ambient Light Color or Normal Time; trailing colors tint the sky. } else if (isTerrain(page) && !terrain) { terrain = true; } else if (PortSkyStyle.forPage(page) != null && sky++ == 0) { @@ -107,7 +113,7 @@ public final class PortAuthoredWriting { } else if (PortWeatherMode.forPage(page) != null && weather++ == 0) { // A single independent weather policy for this Age. } else if (controller(page) != null && controllers++ == 0) { - // An explicit controller needs an authored pool. + // Missing biome slots are seed-completed when the Age is created. } else if (isBlockPage(page) && pendingMaterial == null && PortSymbolPages.find(page) != null && (PortSymbolPages.find(page).category().equals("rivencraft:block") @@ -152,7 +158,8 @@ public final class PortAuthoredWriting { } if (pendingMaterial != null || (rocks > 0 || pages.stream().anyMatch(PortVegetationPlan::requiresSurface)) && (pages.contains(CAVE_TERRAIN) || pages.contains(VOID_TERRAIN))) return false; - if ((dungeons > 0 || lakes > 0) && (pages.contains(FLAT_TERRAIN) || pages.contains(VOID_TERRAIN) + if (dungeons > 0 && (pages.contains(FLAT_TERRAIN) || pages.contains(VOID_TERRAIN))) return false; + if (lakes > 0 && (pages.contains(FLAT_TERRAIN) || pages.contains(VOID_TERRAIN) || pages.contains(CAVE_TERRAIN))) return false; if (denseOres > 0 && (pages.contains(FLAT_TERRAIN) || pages.contains(VOID_TERRAIN))) return false; if (!carvers.isEmpty() && (pages.contains(FLAT_TERRAIN) || pages.contains(VOID_TERRAIN))) return false; @@ -169,8 +176,8 @@ public final class PortAuthoredWriting { .filter(value -> value != null).findFirst().orElseThrow(); boolean valid = switch (distribution) { case NATIVE -> biomes == 0; - case SINGLE -> biomes == 1; - default -> biomes >= 2; + case SINGLE -> biomes <= 1; + default -> true; }; return valid; } @@ -214,13 +221,14 @@ public final class PortAuthoredWriting { } public static PortRockPlan rockPlan(List pages, long seed) { - if (!supports(pages)) throw new IllegalArgumentException("Unsupported authored Age pages"); + pages = completedMaterials(pages, seed); List materials = solidMaterials(pages, seed, ROCKS); return materials.isEmpty() ? null : new PortRockPlan(materials); } public static PortTerrainFeaturePlan terrainFeaturePlan(List pages, long seed) { - if (!supports(pages)) throw new IllegalArgumentException("Unsupported authored Age pages"); + pages = completedMaterials(pages, seed); + final List completed = pages; Map> materials = new HashMap<>(); Map occurrences = new HashMap<>(); List choices = new ArrayList<>(); @@ -230,7 +238,7 @@ public final class PortAuthoredWriting { choices.add(new PortTerrainFeaturePlan.Choice(page, PortTerrainFeaturePlan.CRYSTAL_MATERIAL)); continue; } - List selected = materials.computeIfAbsent(page, feature -> solidMaterials(pages, seed, feature)); + List selected = materials.computeIfAbsent(page, feature -> solidMaterials(completed, seed, feature)); int occurrence = occurrences.merge(page, 1, Integer::sum) - 1; choices.add(new PortTerrainFeaturePlan.Choice(page, selected.get(occurrence))); } @@ -262,7 +270,7 @@ public final class PortAuthoredWriting { } public static PortLakePlan lakePlan(List pages, long seed) { - if (!supports(pages)) throw new IllegalArgumentException("Unsupported authored Age pages"); + pages = completedMaterials(pages, seed); if (pages.stream().noneMatch(PortLakePlan::isLake)) return null; List fluidPool = PortRegistryPages.fluidMaterialIds(); if (fluidPool.isEmpty()) throw new IllegalStateException("No source-fluid materials are registered"); @@ -288,6 +296,12 @@ public final class PortAuthoredWriting { return new PortLakePlan(choices); } + private static List completedMaterials(List pages, long seed) { + var completed = PortMaterialCompletion.complete(pages, seed); + if (!supportsExplicit(completed)) throw new IllegalArgumentException("Unsupported authored Age pages"); + return completed; + } + public static PortVegetationPlan vegetationPlan(List pages) { if (!supports(pages)) throw new IllegalArgumentException("Unsupported authored Age pages"); List vegetation = pages.stream().filter(PortVegetationPlan::isVegetation).toList(); @@ -307,6 +321,17 @@ public final class PortAuthoredWriting { /** Resolves all authored biomes from the active registry before creating a level. */ public static PortBiomePlan biomePlan(List pages, HolderLookup.Provider registries) { + return biomePlan(pages, registries, 0, null); + } + + /** Creation-only completion; the saved plan never rerolls on load or reseed. */ + public static PortBiomePlan biomePlan(List pages, net.minecraft.server.MinecraftServer server, long seed) { + return biomePlan(pages, server.registryAccess(), seed, + net.dnorberg.rivencraft.age.PortRandomAgeSelection.eligibleBiomes(server, terrain(pages))); + } + + private static PortBiomePlan biomePlan(List pages, HolderLookup.Provider registries, + long seed, List available) { if (!supports(pages)) throw new IllegalArgumentException( "Unsupported terrain or biome-page combination in this port slice"); List biomes = new ArrayList<>(); @@ -341,6 +366,25 @@ public final class PortAuthoredWriting { throw new IllegalArgumentException("Dense Ores needs at least one biome with registered ore placements"); if (distribution == PortBiomePlan.Distribution.NATIVE) return new PortBiomePlan(distribution, List.of()); + if (distribution != null && available != null) { + int minimum = distribution == PortBiomePlan.Distribution.SINGLE ? 1 : 2; + int target = minimum; + if (biomes.isEmpty() && distribution != PortBiomePlan.Distribution.SINGLE) { + var random = new Random(seed ^ 0x42494F4D45434F55L); + while (target < available.size() && random.nextInt(3) != 0) target++; + } + var distinct = new java.util.HashSet<>(biomes); + // Void may retain authored weather/season biomes, but must not gain + // an unrequested The Void biome just to fill a multi-biome controller. + var filler = new ArrayList<>(pages.contains(VOID_TERRAIN) && !biomes.isEmpty() ? List.of() : available); + Collections.shuffle(filler, new Random(seed ^ 0x42494F4D45504F4FL)); + for (Identifier biome : filler) { + if (distinct.size() >= target) break; + if (distinct.add(biome)) biomes.add(biome); + } + if (distinct.size() < minimum) throw new IllegalArgumentException( + distribution + " requires " + minimum + " distinct biomes; supply more biome pages for this terrain"); + } if (biomes.isEmpty()) return null; if (distribution == null) distribution = biomes.size() == 1 ? PortBiomePlan.Distribution.SINGLE : biomes.size() == 2 diff --git a/ports/mc263/src/main/java/net/dnorberg/rivencraft/writing/PortMaterialCompletion.java b/ports/mc263/src/main/java/net/dnorberg/rivencraft/writing/PortMaterialCompletion.java new file mode 100644 index 0000000..a5a717a --- /dev/null +++ b/ports/mc263/src/main/java/net/dnorberg/rivencraft/writing/PortMaterialCompletion.java @@ -0,0 +1,68 @@ +package net.dnorberg.rivencraft.writing; + +import java.util.ArrayList; +import java.util.List; +import net.dnorberg.rivencraft.age.PortCarverPages; +import net.dnorberg.rivencraft.age.PortLakePlan; +import net.dnorberg.rivencraft.age.PortStructurePages; +import net.dnorberg.rivencraft.age.PortTerrainFeaturePlan; +import net.dnorberg.rivencraft.age.PortVegetationPlan; +import net.minecraft.resources.Identifier; + +/** Creation-time implied features, adapted from 1.21.1 AgeFeatureSelection. */ +public final class PortMaterialCompletion { + private PortMaterialCompletion() {} + + public static List complete(List pages, long seed) { + var result = new ArrayList(); + for (int index = 0; index < pages.size(); index++) { + Identifier page = pages.get(index); + result.add(page); + var entry = PortSymbolPages.find(page); + if (entry == null || !(entry.category().equals("rivencraft:block") + || entry.category().equals("rivencraft:fluid"))) continue; + if (index + 1 < pages.size() && isFeature(pages.get(index + 1))) continue; + Identifier material = PortRegistryPages.blockId(page); + var candidates = candidates(pages, entry.category().equals("rivencraft:fluid")); + if (candidates.isEmpty()) throw new IllegalArgumentException( + "No compatible feature for material " + material + " on this terrain"); + long mixed = mix(seed ^ (long) material.hashCode() * 0x9E3779B97F4A7C15L ^ index); + result.add(candidates.get(Math.floorMod(mixed, candidates.size()))); + } + return List.copyOf(result); + } + + private static List candidates(List pages, boolean fluid) { + boolean cave = pages.contains(id("terrain/cave")); + boolean empty = pages.contains(id("terrain/void")); + boolean flat = pages.contains(id("terrain/flat")); + if (fluid) return cave || empty || flat ? List.of() + : List.of(id("feature/surface_lakes"), id("feature/deep_lakes"), id("feature/lava_lakes")); + var choices = new ArrayList(); + if (!cave && !empty && !flat) choices.add(id("feature/rocks")); + if (!cave) choices.add(PortTerrainFeaturePlan.FLOATING_ISLANDS); + choices.add(PortTerrainFeaturePlan.TENDRILS); + choices.add(PortTerrainFeaturePlan.SPHERES); + if (!cave && !empty) { + choices.add(PortTerrainFeaturePlan.SPIKES); + choices.add(PortTerrainFeaturePlan.OBELISKS); + } + return choices; + } + + private static boolean isFeature(Identifier page) { + return PortTerrainFeaturePlan.isSupported(page) || PortLakePlan.isLake(page) + || PortVegetationPlan.isVegetation(page) || PortStructurePages.supports(page) + || PortCarverPages.supports(page) || page.equals(id("feature/rocks")) + || page.equals(id("feature/dungeons")) || page.equals(PortTerrainFeaturePlan.SKYLANDS) + || page.equals(PortTerrainFeaturePlan.DENSE_ORES) || page.equals(PortTerrainFeaturePlan.STAR_FISSURES); + } + + private static Identifier id(String path) { return Identifier.fromNamespaceAndPath("rivencraft", path); } + + private static long mix(long value) { + value = (value ^ value >>> 30) * 0xBF58476D1CE4E5B9L; + value = (value ^ value >>> 27) * 0x94D049BB133111EBL; + return value ^ value >>> 31; + } +}