Port lectern stands, book GUIs and progression to 26.3 beta
Build / build (push) Waiting to run

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

+148
View File
@@ -2021,3 +2021,151 @@ passed again after the 26.3 registry slice.
On 2026-11-01, the default 1.21.1 GameTest server was rerun and all 93
required tests passed, including the desk test. Issue #97 was then closed;
remaining 26.3 parity work stays under #98–#104.
## Progression advancement port
`1.0.1.107-beta.1` reuses seven root progression JSON files and existing
translations. The Open Portal node remains excluded because its Receptacle icon
and action are not yet ported. Added server-owned post-commit hooks for Mixer
normal/shift output, Desk normal/shift copies, Binder assembly and successful
handheld travel whose destination is a saved runtime Age. Inventory and root
criteria remain vanilla. Existing saves retain vanilla player advancement data;
no action history is reconstructed and no protocol/schema change is required.
The build and disposable-server fixtures passed loaded data, preview/empty Mixer
rejection, both Panel pickup paths, actual Desk copy and Binder assembly awards,
and registered-Age entry eligibility. NeoForge FakePlayer uses a no-op advancement
tracker; the fixture player overrides it with vanilla PlayerAdvancements rather
than changing production awards to accommodate a test double. No client joined;
GUI tree/toasts, inventory triggers, actual travel and reconnect persistence are
the user validation. The test server was stopped and its world removed.
## Recipe discovery and advancement background
`1.0.1.109-beta.1` uses the existing Crystal Block texture for the root
advancement background via the modern asset ID. The .108 stone-path correction
passed the player's in-game test. Added adapted 1.21.1 discovery advancements
for Ink Vial, Ink Mixer, Book Binder and Crystal Block, retaining all original
materials, OR requirements and recipe rewards. The 26.3 recipe-unlocked trigger
requires `conditions.recipes`, a list. Root 1.21.1 data remains unchanged.
The build and disposable-server `recipe_discovery_probe` passed loaded
recipe/advancement availability, wrong-material negatives, actual matching-material
inventory triggers, per-player isolation and direct recipe grants for all six
crafting unlocks (including Notebook and Writing Desk). No client joined this
fixture. The test server was stopped and its world removed; crystal background
and client recipe-book presentation remain manual checks.
## Lectern book stands
`1.0.1.110-beta.1` adapts the root stand block/entity/conversion and final
renderer transforms to 26.3 extraction/submission. It uses the shared lectern
blockstate and lectern-drop loot table; no new art or stand item. Storage sync
and persistence use ValueInput/ValueOutput. preRemoveSideEffects receives the
old state and handles one stored-item drop; emptying before conversion back to
vanilla prevents duplicate recovery.
The existing book screens accept a stand source. A separate validated packet
checks dimension, eight-block distance, loaded chunk, stand identity and exact
book components before travel. Descriptive travel now shares the same helper
for handheld/stand routes; only handheld books are detached/dropped. Linking
travel uses the existing item service. Stand travel retains effects, Return Link
configuration and Age-entry awards. Live views and exploration remain unported;
unbound books require removal for handheld binding in this slice.
Build and isolated server checks passed all facing/hand/book/page combinations,
occupied/unrelated-item rejection, ownership on retrieval/break, stale/distant/
wrong-dimension requests, serialization and full restart persistence. The test
server was stopped and world removed. GUI/rendering/actual stand travel and
modifier effects require the player's in-game check. Root 1.21.1 is unchanged.
## Descriptive Book authored-page GUI
`1.0.1.111-beta.1` adapts the root Legacy cover/front/full-right-page composition
and page-index rules to GuiGraphicsExtractor. Glyphs use the existing glyph-only
special item model in a later stratum at 128×128, avoiding the dynamic-blit and
nested item-outline issues previously fixed in the Binder. Navigation uses SDL
mouse constants and current KeyEvent helpers, corner hotspots and page-turn sound.
The destination packet remains confined to the front spread; stand source
validation is unchanged. Naming widgets stay hidden off the front spread even
after resize. Screens do not pause the world.
Added the root `book_author` component with persistent string and network codec.
Binder and handheld descriptive binding assign the authenticated player's profile
name; the client never supplies author text. Existing books without it use the
unknown-author translation. Existing book_symbols retain written order, duplicates
and omitted-controller choices exactly; no Age data or generation behavior changes.
Random-Age glyph descriptions/live destination rendering remain unported.
Build and disposable server checks passed real assembly, authorship, first/last
symbol mapping, repeated-symbol and legacy-empty fallbacks, navigation bounds and
full-restart book author/page persistence. Shared full-page texture was verified
in the JAR. The temporary server was stopped and world removed. Client visuals,
turning/input/sound, lectern opening and panel-click travel remain manual checks.
## Animated link-panel fallback
`1.0.1.112-beta.1` reuses the root LegacyDestinationPreviewRenderer spiral/noise
algorithm in a shared 26.3 GUI extractor helper, removing placeholder labels from
both book panels. Shared dimensions/hit-testing retain the existing 132×83 panel
and validated hand/stand travel routes. GUI strata enforce cover -> animation ->
Legacy frame ordering. Descriptive symbol pages do not expose an active panel.
No world/network changes, dependencies, remote audio or chunk loads are introduced.
Default teal is retained until destination metadata/tint is ported; this is a
fallback, not live destination rendering. Build passed; client visual/click,
lectern, scale and page-turn checks remain manual. No server run was required.
## Linking Book spreads and artwork consolidation
`1.0.1.113-beta.1` adapts LinkingBookScreen's two spreads, counter, wrapped
left-page details, Return Link title suppression and input/page-turn behavior.
The front retains validated hand/stand travel and the animated fallback; the
final spread has no active destination panel. Vanilla dimension names translate;
Age display-name metadata remains pending and other dimensions fall back to IDs.
Block coordinates use floor-based BlockPos conversion, including negative values.
Both screens use PortLegacyBookArtwork adapted directly from the root helper,
with shared text/counter/corner routines. The descriptive screen retains its
accepted glyph/author behavior. No networking, persistence or server changes.
Build and diff checks passed; GUI presentation, controls, long names, lecterns
and descriptive-page regression are manual checks. No server was started.
## Saved destination names
`1.0.1.114-beta.1` adds optional server-owned Age display metadata and the root
persistent/networked `link_destination_name` item component. Successful book-driven
Age creation saves the entered title; Linking Book binding snapshots its source
Age's title, and automatic Return Links snapshot the departure label. Item tooltip
and GUI use the same component/vanilla/ID fallback. Negative tooltip coordinates
now floor correctly rather than truncating toward zero.
The index name map defaults empty for old saves and does not participate in seed,
folder or dimension identity selection. Names are visible only for active IDs;
retirement retains metadata for identity/rollback without exposing it as an active
Age. No catalog packet change, remote chunk load, automatic old-label migration
or terrain change is introduced.
Build and isolated server checks passed actual Binder name assignment, metadata
with case/punctuation, named Linking/automatic Return Link components, legacy
vanilla fallback, unload/reload and full-restart index/book persistence. Temporary
config restored; server stopped and world removed. Client GUI/tooltip/lectern
presentation remains manual. New names require a newly created Age and newly
bound book; old Ages retain their existing fallback label.
## Ordinary dropped books
`1.0.1.115-beta.1` implements the 26.3 half of #114. A server-only queued join
conversion creates the custom entity before discarding an ordinary book drop,
preserving toss state and item data through native restoreFrom. It gives the
replacement a new UUID (the original is still registered), adopts open-book
lifetime/decay rules and skips already-custom entities. Canceled replacements
preserve the ordinary source. No force-loading, world scanning or per-tick retry.
Loaded ordinary book entities are also eligible.
Build and isolated source/state checks passed, including cancellation recovery.
The no-player fixture required one loaded entity chunk for inspection. The user
requested to perform further checks; no additional automated restart test was run.
Server stopped and temporary world removed. Manual checks: Q/inventory toss,
death/Disarm, broken stand, full-inventory delivery/retrieval, open-book visual
orientation, motion, ownership/pickup, component preservation and restart. Root
1.21.1 remains unchanged and #114 stays open until both tracks are complete.