Port lectern stands, book GUIs and progression to 26.3 beta
Build / build (push) Canceled after 0s

This commit is contained in:
dnorberg committed 2026-11-09 18:20:40 -05:00
1 parent be8440ddb5
commit 35980338e1
43 files changed
+1850 -90

No files matched your search

+226 -2
View File
@@ -2,7 +2,7 @@
This is an **experimental beta port** for issues #97–#104, not gameplay parity
with the Minecraft 1.21.1 release. The 26.3 backend persists separate Ages and
their seeds. Books, the Book Binder, Ink Mixer, Writing Desk and page collections
their seeds. Books, lectern book stands, the Book Binder, Ink Mixer, Writing Desk and page collections
are ported, and the Binder can
author Standard, Amplified, Island, Flat, Void, or Cave terrain with supported
biome-distribution pages, selected material/vegetation/structure features, and
@@ -10,7 +10,7 @@ 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.106-beta.1](RELEASE_NOTES_1.0.1.106-beta.1.md).
[1.0.1.115-beta.1](RELEASE_NOTES_1.0.1.115-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.
@@ -1646,6 +1646,34 @@ Recipe/advancement data loaded; shared models and atlases were verified in
the JAR. No client joined these fixtures: visuals, mouse and live catalog
updates remain the in-game check. The server was stopped and world removed.
### Progression advancements
The local `1.0.1.107-beta.1` slice reuses the 1.21.1 progression tree and
translations. The root, Page and Linking Book inventory milestones load along
with action milestones for taking a Link Panel from the Ink Mixer, copying a
Page at the Writing Desk, binding an Age in the Book Binder and successfully
travelling by book into a registered Age. Both normal and shift output pickup
paths award after the server consumes the inputs. Opening a menu, viewing a
preview or rejected travel does not earn an action milestone. Awards remain
per-player and use vanilla advancement persistence. No retroactive action
awards are inferred from existing books. The portal advancement is deferred
until the Receptacle/portal feature and its icon item are ported.
The build and disposable-server checks passed advancement decoding, empty and
preview Mixer negative checks, normal/shift Panel pickup, actual Desk copying,
Binder assembly and registered-Age entry eligibility. Fixtures use vanilla
PlayerAdvancements because NeoForge FakePlayer deliberately discards awards.
The temporary server was stopped and its world deleted. Client tree layout,
toasts, inventory milestones and actual book-travel awards remain manual checks.
For the in-game check, open Advancements and find the Rivencraft tree. Obtain a
Page and Linking Book; then take a Panel from the Mixer, copy a Page at the Desk,
bind a Descriptive Book and enter its Age. Check that previews alone do not award
progress, then reconnect/restart to confirm earned progress remains. If these
milestones were already earned, revoke the Rivencraft tree with the vanilla
operator advancement command before retesting. Include shift-click output pickup.
Nothing has been committed, pushed or published for this slice.
From the repository root:
```sh
@@ -1667,3 +1695,199 @@ The dedicated development server uses `build/run-server`, with its own world
and properties. Set a nonconflicting `server-port` there before running if
another Minecraft server is active. The prototype restores all indexed Ages
during the Overworld load, before initial chunk preparation completes.
The `1.0.1.108-beta.1` visual correction adapts the advancement root background
to 26.3's ClientAsset resource identifier (`minecraft:gui/advancements/backgrounds/stone`).
The older full texture path decoded but resolved to a missing texture. The shared
1.21.1 root keeps its original path. Check the stone background in the client.
### Crystal advancement background and recipe discovery
The local `1.0.1.109-beta.1` slice switches the progression background to the
existing blue Crystal Block texture (`rivencraft:block/crystal_block`) using
the 26.3 ClientAsset identifier format. No new artwork is generated.
The Ink Vial, Ink Mixer, Book Binder and Crystal Block now receive their 1.21.1
recipe-book discovery advancements. Black Dye unlocks the vial, a Glass Bottle
unlocks the mixer, an Iron Ingot unlocks the binder, and a Crystal Shard unlocks
the block. As with the already-ported Notebook and Writing Desk, 26.3's
`recipe_unlocked` condition uses a `recipes` list instead of the older `recipe`
field. Recipe ingredients and outputs are unchanged; no Blank Page recipe is added.
Build and disposable-server checks passed all six loaded crafting unlocks:
wrong material stays locked, obtaining the matching material unlocks the recipe,
progress remains per-player, and granting the recipe directly completes its
advancement. The test server was stopped and its temporary world removed.
The player passed the preceding progression/background correction; this crystal
background and client recipe-book discovery still need an in-game check. Use
Survival and a fresh recipe book (or revoke the relevant recipe/advancement)
when testing the four newly ported unlocks. Nothing is committed or published.
### Lectern book stands
The local `1.0.1.110-beta.1` slice ports the 1.21.1 lectern conversion and
book/page display. Place a Rivencraft book or Page on an empty vanilla lectern;
the stand keeps its facing and consumes one item in Survival (Creative retains
its held stack). Vanilla occupied lecterns are not replaced. Shift-right-click
with an empty hand retrieves the stored item and restores a vanilla lectern.
Breaking drops one lectern and its stored item. There is no separate stand item
or new crafting recipe.
The extracted renderer reuses vanilla lectern geometry, existing book textures
and the final 1.21.1 Page orientation, including east/west yaw corrections. Books
show their name above the stand; Pages have no hover label. Empty-hand use opens
the current port book GUI. Clicking the destination panel travels while leaving
the book on its stand. Disarm/Maintain Momentum, same-dimension Linking Book
restrictions, successful-Age advancements and configured Return Links use the
existing travel logic. Handheld travel still drops the active book at departure.
Unbound books can be displayed; retrieve and bind them in hand for this slice.
Live previews and exploration remain later port work.
The stand packet includes the source dimension, position and displayed ItemStack.
The server checks distance, loaded source chunk, stand identity and exact current
book contents before travel, rejecting removed/replaced books or stale screens.
No chunk is loaded just to inspect a remote stand. Book storage uses 26.3
ValueInput/ValueOutput, update tags and packets. The modern block-entity removal
hook receives the old state, so the stored item is dropped there once; retrieval
empties it first to prevent duplicate drops.
Build and disposable-server checks passed conversion/retrieval for all four
facings, both hands and all three item kinds; occupied-lectern/unrelated-item
rejection; distant/wrong-dimension/replaced/removed-source rejection; exact break
drops; component serialization; and named-book persistence across full restart.
The server was stopped and its world removed. Client checks: display/orientation
in all facings, names above books only, empty-hand GUI opening, panel-click travel
for both bound book types, retention at the departure stand, modifier effects,
Shift retrieval and break drops. Also restart with a loaded stand. Nothing has
been committed, pushed or published for this slice.
### Descriptive Book author and written pages
The local `1.0.1.111-beta.1` slice brings the authored-book layout closer to
1.21.1: Legacy gilded cover, front name/author on the left and destination panel
on the right, followed by one authored glyph page at a time on the right. It
reuses `bookui_rpage_full.png` and the existing runtime glyph item pipeline;
no new artwork or per-symbol PNGs are generated. Bottom corners and left/right
arrow keys turn pages with the vanilla page-turn sound. Only the front page's
panel activates travel, including when opened from a stand. Escape still closes
the GUI, and focused naming fields retain text input behavior.
The server records the player's profile name in the persistent/networked
`book_author` component when binding through the Binder or the temporary handheld
binding flow. Existing books retain their saved ordered `book_symbols`; older
books with no author show the shared unknown-author text. Page zero is the front
spread, followed by each saved symbol in order (including repeated IDs). Books
with no symbols retain the Legacy blank final spread. Inferred generation pages
are not inserted into authored contents. The current destination placeholder
remains; live snapshots and the pageless random-Age glyph description remain
future port work.
Build and disposable-server checks passed real Binder author assignment, ordered
symbol indexing, repeated-symbol presentation, navigation bounds, older/panel-only
fallback and book author/page persistence across full restart. The server was
stopped and temporary world deleted. Client checks: bind a new book with several
distinct pages and verify your name, cover/layout, glyph size/no extra item outline,
corner/arrow turns, sound, Escape, GUI resize and travel only from the front panel.
Repeat opening the book from a lectern. No commit, push or publication was made.
### Built-in animated link panels
The local `1.0.1.112-beta.1` slice ports the 1.21.1 Legacy fallback animation to
both book GUIs. Two noisy teal spirals expand into the panel using the shared
GUI renderer, replacing the static placeholder and instructional text. Rendering
and clicking share the same panel bounds. Separate GUI strata keep the cover,
animation and Legacy frame in order. Descriptive Books display the animation only
on their front page; clicking written pages does not travel. The animation keeps
running while the book is open and does not pause the world, load destination
chunks or render/audio-tick a remote world. Lectern books use the same animation.
This is the existing mod-independent fallback, not a live snapshot or a new shader.
It currently uses the fallback's default teal tint; destination-specific tint and
live renderer integrations remain unported. The GUI API and outline method were
adapted; the root spiral/noise math, timing and reveal are unchanged.
The build passed. No server behavior or packet schema changes were made and no
test server was needed. Check animation/reveal/frame in both books, at different
GUI scales and on lecterns; panel clicks should still travel, Escape should close,
and descriptive page turning should keep working. Nothing committed or published.
### Linking Book final spread and shared artwork
The local `1.0.1.113-beta.1` slice adapts the remaining Linking Book layout
from 1.21.1. Its front spread uses the plain Legacy cover, animated right panel,
and wrapped/shadow-free text on the left. It shows the bound title, destination
dimension and floored block coordinates. Vanilla dimensions use translated names;
other dimensions currently use their registry IDs until saved Age display-name
metadata is ported. Automatic Return Links suppress the redundant title by its
translation identity, matching root behavior.
The blank final spread, 0/1 counter, bottom-corner and arrow navigation and
page-turn sound are now present. Binding widgets hide on the final spread and
remain hidden after resizing. Escape closes even with naming focused; focused
text inputs consume inventory/hotbar keys. Only the front panel can travel,
including books opened from a stand.
Both book screens now share an extractor adaptation of root LegacyBookArtwork,
plus wrapped-text, counter and corner-hit helpers. The descriptive gilded cover,
author and symbol pages are retained. This removes duplicated atlas composition
without changing packets, saved data, Age generation or destination coordinates.
The build passed; no server run was needed for this client-only change. Check
long titles, Overworld/Nether/End destination text and negative coordinates,
front/final turning/sound, resize/Escape/naming, lectern opening and front-only
travel. Recheck descriptive glyph pages after the shared-artwork refactor.
Nothing committed, pushed or published.
### Saved Age and Linking Book destination names
The local `1.0.1.114-beta.1` slice ports the root destination-name snapshot.
New Ages save the entered title, preserving case/spaces/punctuation, separately
from their existing dimension ID, folder and seed. New Linking Books bound inside
those Ages store that title in `link_destination_name`; the front GUI and tooltip
share the same name resolution. Vanilla dimensions keep their familiar names.
Automatic Return Links capture the departure dimension's saved name when available.
The optional display-name map defaults empty for older indexes. Older books/Ages
without metadata retain translated vanilla names or raw dimension IDs; no names
are inferred from inventory books or folder names. This does not rename folders,
rewrite old book labels, change collision suffixes, or reroll any generation.
Labels on existing bound books remain snapshots as in root. Names retained with
retired identities remain unavailable through active-Age lookup and survive a
failed-retirement rollback. Tooltip coordinates now use floor-based BlockPos
conversion, matching the GUI for negative values.
Build and disposable-server checks passed real Binder creation/name assignment,
case/punctuation preservation, Linking/automatic Return Link labels, older vanilla
fallback, Age unload/reload and full-restart persistence of Age metadata and book
components. The temporary Return Link test config was restored, and the server
was stopped/world removed. Client check: create a new named Age, enter it, bind
a Linking Book there, and inspect its destination in the GUI and tooltip (including
on a stand). Recheck after restart; optional Return Links should show the departure
name when enabled. No commit, push or publication was made.
### Universal open-book drops (26.3 half of issue #114)
The local `1.0.1.115-beta.1` slice converts ordinary dropped Linking and
Descriptive Books into the existing open-book entity, including unwritten
variants. A server-only join listener queues one conversion after entity/chunk
registration; it does not scan worlds or force-load chunks. Existing custom
book entities and non-book items are skipped. The source must actually be
registered and still present before conversion, and is discarded only after
replacement succeeds. Rejected replacements leave the ordinary drop intact.
The factory uses native entity-state copying and preserves ItemStack components,
position, motion, facing, pickup delay, owner/thrower and ordinary entity metadata.
It does not apply the handheld travel constructor's Y offset or zero velocity.
The replacement receives a new UUID so both can coexist during the transaction;
its lifetime switches to the existing open-book decay/weather rules. Existing
ordinary books loaded from disk also use the join hook. No per-tick retry is used
if another mod cancels conversion; those drops are eligible on a later reload.
Build and disposable-server checks passed state/component/owner copying and
ordinary item, player, container and stand-drop conversion, custom-entity recursion
avoidance, non-book exclusion and cancellation recovery. A no-player fixture's
entity chunk became unavailable to the first query; temporarily loading that
single fixture chunk made the checks pass. No storage stall occurred. The player
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.