Public Access
Port libraries, crystal portals and instability decay to 26.3 beta
Build / build (push) Waiting to run
Build / build (push) Waiting to run
This commit is contained in:
1 parent
35980338e1
commit
d2904eaa8d
47 files changed
+3438
-71
No files matched your search
+254
-3
@@ -8,9 +8,10 @@ author Standard, Amplified, Island, Flat, Void, or Cave terrain with supported
|
||||
biome-distribution pages, selected material/vegetation/structure features, and
|
||||
independent Age weather and lighting, multiple authored or seeded celestial
|
||||
bodies and eclipses, biome/material completion, and random features/structures.
|
||||
Instability, crystal portals, remaining discovery/stations, writing recovery and optional
|
||||
integration parity remain unfinished. The latest published beta is
|
||||
[1.0.1.115-beta.1](RELEASE_NOTES_1.0.1.115-beta.1.md).
|
||||
Crystal portals and libraries are ported. Instability scoring/provider selection,
|
||||
status effects and colored decay are partially ported; remaining hazards, live material profiling,
|
||||
remaining discovery/stations, writing recovery and optional integrations remain unfinished. The latest published beta is
|
||||
[1.0.1.120-beta.1](RELEASE_NOTES_1.0.1.120-beta.1.md).
|
||||
Use a test world and keep a backup; do not
|
||||
substitute this JAR for the 1.21.1 mod or import 1.21.1 saves.
|
||||
|
||||
@@ -1891,3 +1892,253 @@ offered to perform the remaining validation, so no further automated restart run
|
||||
was started. Server stopped and world removed. Shared issue #114 remains open:
|
||||
1.21.1 implementation and manual client validation are pending. Nothing committed
|
||||
or published.
|
||||
|
||||
### Configurable handheld Link Panel ink cost
|
||||
|
||||
The local `1.0.1.116-beta.1` slice ports root WritingInkService and its
|
||||
`writing.link_panel_ink_cost` option in `config/rivencraft-local.toml`.
|
||||
The allowed range is 1–16, default 2. Preparing a baseline Link Panel by hand
|
||||
consumes one Paper and that many ink units; insufficient ink changes neither
|
||||
input. A drained vial returns a vanilla Glass Bottle. Stacked inputs and
|
||||
inventory-full give/drop behavior retain the root transaction rules. The
|
||||
Ink Mixer still consumes exactly one ink unit and one Paper per panel, separately
|
||||
from this setting. Writing Desk symbol-copy cost uses the shared service getter.
|
||||
|
||||
Handheld client prediction checks only eligible item types and a valid nonempty
|
||||
vial; the server uses its own configured cost to accept/refuse and consume inputs.
|
||||
This avoids relying on unsynchronized LOCAL config for client affordability.
|
||||
No new recipe, packet, Page variant or progression award is introduced.
|
||||
|
||||
The build passed. Following the player's offer to do testing, no test server
|
||||
or new fixtures were started for this small resource-policy port. In game, check
|
||||
two ink per panel by default; then set `link_panel_ink_cost = 4` under `[writing]`
|
||||
and restart to check four ink per panel, insufficient-ink refusal, last-use bottle,
|
||||
both hands and stacked/full-inventory cases. Confirm the Mixer still costs one
|
||||
ink. On a dedicated server, change the server's value; the client need not match.
|
||||
Nothing committed, pushed or published.
|
||||
|
||||
### Age library discovery
|
||||
|
||||
The local `1.0.1.117-beta.1` slice ports the 1.21.1 library discovery system:
|
||||
the existing 11×11×11 schematic, five stocked lecterns, chest loot, deterministic
|
||||
32-chunk-region spread and the terrain/obstruction checks. Libraries generate
|
||||
at the end of decoration in newly generated, non-Cave Age chunks. The footprint
|
||||
stays inside its candidate chunk. Trees/foliage can be cleared, while fluids,
|
||||
block entities, solid obstructions, excessive slopes and absent sturdy footing
|
||||
reject placement. Vanilla Overworld generation is unchanged. Old chunks are
|
||||
not revisited; existing Ages gain libraries only in eligible new chunks.
|
||||
|
||||
`[libraries] loot_mode` in `config/rivencraft-local.toml` defaults to `LEGACY`:
|
||||
writing supplies and possible Sealed Notebooks in chests, with random symbol
|
||||
Pages on five lecterns. `AGE_ONLY` limits new library chest/lectern Pages to
|
||||
known symbols written into that Age, using distinct IDs. Page-free Ages then
|
||||
have no symbol loot and the stands display ordinary Books, matching root.
|
||||
The original written list is saved independently and copied into the generator
|
||||
before generation, then restored on reload. It does not change the book's writing,
|
||||
seed, folder or other trait completion. Older Ages without this saved list have
|
||||
an empty Age-only pool. The broader random-page eligibility policy remains a
|
||||
separate unported system. The Legacy pool may include currently unsupported red
|
||||
pages, like the existing Sealed Notebook pool.
|
||||
|
||||
Operator tools under `/rivencraft_port library`:
|
||||
- `test_place`: place a raised library in clear space ahead, without overwriting
|
||||
existing blocks/entities. A console source may supply position via `execute`.
|
||||
- `nearest_loaded`: teleport into the nearest marked library aisle in loaded
|
||||
chunks within 16 chunks. It checks footing/fluids/collision and does not scan
|
||||
or generate remote chunks.
|
||||
- `test_spacing 1` through `32`: session-only increased candidate density in an
|
||||
Age, for new chunks only. `32` restores normal spacing; restart clears overrides.
|
||||
- `candidate`: report the closest deterministic candidate without loading it;
|
||||
eligibility is still required and a library is not guaranteed.
|
||||
- `probe`: identify a marked library or explain current-chunk placement rejection.
|
||||
- `inspect_loot`: materialize the current chunk's library chest as opening it would,
|
||||
then print contents and the number of stands in that chunk.
|
||||
|
||||
Build passed and the schematic/loot resources were verified in the JAR. A local
|
||||
dedicated server started with the data; at the player's request it was stopped
|
||||
before generation/loot tests. Its world was deleted. The player will check actual
|
||||
natural placement, five lectern pages and orientation/retrieval, chest loot/Sealed
|
||||
Notebook opening, both loot modes, locator/test tools and persistence after restart.
|
||||
No new GameTest fixtures were added. No commit, push or publication was made.
|
||||
|
||||
|
||||
## Beta .118 — crystal portals and Book Receptacles
|
||||
|
||||
The player confirmed natural library generation in .117; the earlier missing-library
|
||||
report was withdrawn. .118 adapts the complete fallback crystal network from 1.21.1:
|
||||
|
||||
- Book Receptacles mount on any of the six faces of Crystal Blocks, with the final
|
||||
1.21.1 model/book orientations. Eight Crystal Blocks surrounding an empty crafting
|
||||
square craft one receptacle; its recipe unlocks on obtaining a Crystal Block.
|
||||
- Insert a bound Linking or Descriptive Book into a valid connected crystal frame.
|
||||
The Legacy tension/flood algorithm accepts supported irregular openings, using
|
||||
the same 16-block radius, 2,048-crystal and 1,024-surface limits. Placement respects
|
||||
NeoForge protection events and rolls back rejected activation.
|
||||
- Empty-hand interaction removes the book and closes the portal. Breaking its
|
||||
support or holder closes it and drops the book as the recoverable open-book entity.
|
||||
- Player travel delegates to the existing book transport, catalog acknowledgement,
|
||||
safe landing, Link Panel effects and configured Return Link handling. Descriptive
|
||||
Books share the exact same landing resolver with portals. Linking Books retain
|
||||
their exact coordinates, facing and same-dimension Intra-Linking requirement.
|
||||
- Non-player transport uses the same target rules, collision checks and momentum
|
||||
rotation. Disarm refuses loose items and leaves container contents/eligible mob
|
||||
equipment behind. The shared Disarm helper also replaces the player-only loop.
|
||||
- Queued collision travel waits until the entering movement packet is complete.
|
||||
A 40-tick session-only cooldown prevents repeated traversal. Portal owner pointers,
|
||||
the one stored book, and destination sky tint persist and synchronize to clients.
|
||||
Startup waits for required frame chunks before repair. Loaded networks receive a
|
||||
staggered bounded maintenance pass every 200 ticks, without generating chunks.
|
||||
- The animated fallback only renders its two facing surfaces. Its tint follows the
|
||||
destination sky, including authored colors and the 1.21.1 Nether/End palette.
|
||||
Optional live destination views remain part of the integration port; installing
|
||||
another portal mod alone does not hide this fallback.
|
||||
- Successful activation awards the restored Open Portal advancement.
|
||||
|
||||
Validation: build and dedicated-server startup passed. A small command-seeded
|
||||
crystal ring verified persisted book/owner data, entity collision travel to exact
|
||||
saved coordinates before and after a full server restart, and removal/drop cleanup
|
||||
when the support was broken. This was not a substitute for player-driven activation:
|
||||
the player should test book insertion/removal, the six model orientations, both book
|
||||
types and their Link Panel effects, survival/creative item handling, frame edits,
|
||||
reopening after restart, and travel with destination chunks initially unloaded.
|
||||
The temporary server was stopped and its world deleted. No new permanent GameTests,
|
||||
commit, push or publication.
|
||||
|
||||
|
||||
## Beta .119 — saved instability and status-effect providers
|
||||
|
||||
The player passed .118 crystal portal testing. This slice begins the major instability
|
||||
port using the 1.21.1 scoring rules, complete Legacy card catalog, deterministic deck
|
||||
selection, bounded scheduler and potion-provider implementation.
|
||||
|
||||
New Ages save creation-time contributions and selected provider IDs/levels in separate
|
||||
Overworld SavedData (`rivencraft/instability`), alongside an independent enabled flag.
|
||||
Creation saves this with the Age identity before catalog publication. Reload and
|
||||
configuration changes do not reroll the frozen plan. Older Ages remain neutral rather
|
||||
than being rescored. No score or provider detail is added to player books or Binder UI.
|
||||
|
||||
The first scoring set includes Bright Lighting (+500, also when seed-completed),
|
||||
Accelerated (+1,000 each), Corrupted Medium (+1,000), Small (+2,000) and Large (+0),
|
||||
Cave-ineffective weather/celestial modifiers (+100 each), structure occurrences after
|
||||
the first three (+100 each), authored structures forced into non-native biomes (+100
|
||||
per occurrence), and growing costs for the third and later suns (+1,000, +2,000, ...).
|
||||
The same structure policy includes the new 26.3 Abandoned Camps page. Corrupted Pages
|
||||
are now implemented in authoring/creative availability; they retain animated redacted
|
||||
text and supply instability rather than a terrain decoration.
|
||||
|
||||
All five Legacy decks and card costs/copy counts are retained. Scoring rounds down to
|
||||
500 before selecting/shuffling from the Age seed. Unported hazard cards remain selected
|
||||
and are reported as unavailable; no replacement reroll biases the deck toward potions.
|
||||
Writing-recovery penalties, live valuable-material profiling, decay, lightning,
|
||||
explosions, meteors, burning and erosion remain later slices. This is not yet full
|
||||
instability parity, and the existing authoring validation rules still apply.
|
||||
|
||||
Implemented providers: local/global Blindness, Mining Fatigue, Hunger, Nausea, Poison,
|
||||
Slowness, Weakness and Wither, plus global hostile Regeneration and Resistance. Local
|
||||
variants require visible sky; global variants work under cover. Harmful general effects
|
||||
can affect Survival/Adventure players and non-player living entities; Creative and
|
||||
Spectator are exempt. Hostile buffs target monsters. Duration follows the 1.21.1 values:
|
||||
60 ticks Blindness/Nausea, 80 Fatigue/Hunger/Poison/Slowness/Weakness, 30 Wither, and 200
|
||||
hostile buffs. Provider level raises amplifier, not duration; default effective cap is 3.
|
||||
|
||||
The scheduler runs only in occupied runtime Ages, selecting already-loaded nearby
|
||||
chunks. Defaults match 1.21.1: 20-tick interval, four Ages, two providers and one action
|
||||
per run, at most 16 chunks. Status leases cap at 32 per Age, eight candidates per attempt,
|
||||
and 200 ticks per effect. A failed handler is quarantined temporarily. Owned effects
|
||||
are revoked on departure/logout/disable/shutdown without deleting replacements or
|
||||
stronger/extended effects from another source. Config entries are under `[instability]`
|
||||
and `[instability_status_effects]` in the server's `rivencraft-local.toml`; provider
|
||||
exclusions accept `poison` or `rivencraft:poison`.
|
||||
|
||||
Operator commands, used inside a runtime Age:
|
||||
|
||||
- `/rivencraft_port instability status`: frozen score/contributions, saved or test
|
||||
provider levels, enabled/availability information.
|
||||
- `/rivencraft_port instability enabled false` (or `true`): persistently pause/resume
|
||||
this Age; pausing immediately clears owned effects without changing its saved plan.
|
||||
- `/rivencraft_port instability test_score 5000`: session-only deterministic provider
|
||||
selection at a test score, leaving creation-time contributions unchanged.
|
||||
- `/rivencraft_port instability clear_test_score`: restore saved selection. Restart
|
||||
also clears the test override.
|
||||
- `/rivencraft_port instability pulse poison_global`: attempt one implemented level-1
|
||||
effect on an eligible living entity in the current already-loaded chunk. The command
|
||||
respects config, enabled state, target policy and effect ownership; it reports when
|
||||
no effect was applied. Existing effects are not replaced. Other catalog providers
|
||||
are suggested too, with unavailable handlers explicitly reported.
|
||||
|
||||
Validation: build and fresh dedicated-server startup passed. A small temporary Age
|
||||
confirmed neutral scoring, deterministic test deck selection, exact Poison duration,
|
||||
owned-effect cleanup on disable, retention of a stronger command-supplied Weakness,
|
||||
local shelter versus global effects, saved enabled state after restart and session
|
||||
score reset. The server was stopped and its world deleted. No permanent test fixtures
|
||||
were added. Player authoring/scoring, automatic occupied-Age scheduling, Survival versus
|
||||
Creative behavior, departure cleanup, hostile buffs and multiplayer fairness remain
|
||||
manual checks. No commit, push or publication.
|
||||
|
||||
|
||||
## Beta .120 — colored decay
|
||||
|
||||
The player passed .119. This slice ports the four active 1.21.1 colored decay cards,
|
||||
the block and all four existing 16x16 textures, per-Age frontier persistence, surface
|
||||
seeding and six-neighbor conversion. Decay is selected by the existing saved Legacy
|
||||
decks; older saved provider selections are not rerolled.
|
||||
|
||||
Blue, Red and Purple use the same hardness-dependent conversion odds as 1.21.1.
|
||||
White converts eligible solid blocks without a hardness roll. Air conversion remains
|
||||
rarer (Blue/Red 1-in-20, Purple 1-in-8, White 1-in-50). Other decay colors can be
|
||||
converted; White wins that conversion immediately and others use a 1-in-5 roll.
|
||||
White also deals one point of magic damage on stepping contact, using the modern
|
||||
server damage API. All decay variants are solid, hardness 5/resistance 10, have no
|
||||
item form or drops, and do not spread through autonomous/random block ticks.
|
||||
|
||||
A provider call samples at most four six-neighbor targets by default and changes at
|
||||
most one block, sharing the existing scheduler's Age/provider/action budgets. It only
|
||||
examines supplied already-loaded player-nearby chunks. Per-Age SavedData retains a
|
||||
monotonic attempt sequence and at most 1,024 frontier coordinates per color; no chunk
|
||||
or entity references are persisted. Destroyed/recolored stale sources are discarded.
|
||||
|
||||
Protection matches 1.21.1: fluids, unbreakable/critical blocks, block entities,
|
||||
portals and Rivencraft infrastructure resist conversion. Data packs can add entries
|
||||
to `rivencraft:decay_protected`. A positioned fake player supplies modern NeoForge
|
||||
BreakBlockEvent and placement events, with rollback for cancelled placement.
|
||||
|
||||
The first resolved Descriptive Book landing is saved as a protected spawn without
|
||||
changing scoring or provider selection. It protects +/-4 blocks horizontally and
|
||||
Y-2 through Y+4. Portals and hand-held books share that resolver. For an Age entered
|
||||
before .120, re-enter it once to record this point; OP status reports whether it is
|
||||
recorded. Cloud Platforms and Rivencraft infrastructure remain protected independently.
|
||||
|
||||
`[instability] world_mutation` and `[instability_decay] enabled` default to true,
|
||||
matching 1.21.1. `max_attempts_per_call` defaults to 4 (range 1–6). Per-Age enable,
|
||||
global enable and provider exclusions also gate seeding/spread. Disabling does not
|
||||
remove existing decay. As in 1.21.1, existing White block contact damage follows the
|
||||
decay/world-mutation toggles rather than the Age provider scheduler toggle.
|
||||
|
||||
Operator testing, inside an Age and preferably away from its protected arrival:
|
||||
|
||||
- `/rivencraft_port instability decay blue 32` makes up to 32 bounded provider
|
||||
attempts in your current loaded chunk. Use `purple`, `red` or `white` too. It prints
|
||||
the number of actual changes and up to four nearby tracked coordinates, without
|
||||
changing score/selection. A failed roll or protected location can yield no change.
|
||||
- The existing `/rivencraft_port instability pulse decayblue` (and other colors)
|
||||
attempts one call. Its output now describes successful actions for either blocks
|
||||
or living entities.
|
||||
- `/rivencraft_port instability test_score 50000` allows natural deck selection for
|
||||
observation; inspect `status` for the selected colors, then use `clear_test_score`
|
||||
to restore the saved plan. Merely placing decay does not register an active card.
|
||||
|
||||
Validation: build and fresh dedicated-server startup passed. Bounded pulses seeded
|
||||
and spread all four colors. On restart, the saved attempt sequence advanced from
|
||||
32 to 40 and the original frontiers persisted, with further Red growth. Bedrock and
|
||||
water seeding produced no conversions/frontier entries; disabling the Age blocked
|
||||
further changes. All packaged textures are 16x16. The temporary server was stopped
|
||||
and world deleted. Manual checks remain for visual variants, White stepping damage,
|
||||
protected arrival, normal occupied-Age spreading, claim-mod cancellation and controls.
|
||||
No permanent test fixtures, commit, push or publication.
|
||||
|
||||
|
||||
## .116–.120 release validation
|
||||
|
||||
The player passed every slice, including .120 colored decay, and authorized commit,
|
||||
push and publication as 1.0.1.120-beta.1. Both Minecraft targets build successfully.
|
||||
See the consolidated release notes for the published scope and remaining parity gaps.
|
||||
Reference in new issue
Block a user