Add Link Panel modifiers and legacy Ink Mixer presentation (#36)
Build / build (push) Canceled after 0s

This commit is contained in:
dnorberg committed 2026-10-03 07:36:46 -04:00
1 parent 6c3b4f1885
commit b86e855907
29 files changed
+696 -66

No files matched your search

+41
View File
@@ -47,6 +47,47 @@ automated check, and hand its exact scenario to the player for in-game
verification. Do not keep retrying a stalled test or leave its process running.
Keep the narrower non-stalling plan, persistence, and runtime checks automated.
## Manual Ink Mixer modifier check (Milestone 5, issue #36)
With optional JEI installed, search for the Ink Mixer category. It should show
the base paper/ink/vial operation and separate entries for Gunpowder, Mushroom
Stew, Experience Bottle, Ender Pearl, Feather, and Fire Charge,
with their property chances. Black Dye and Clay Ball should not appear: the
former had no working Legacy effect, while Generate Platform is redundant
with default Age arrival. Without JEI, Rivencraft should still
start and the mixer should work normally.
Put paper and an Ink Vial in the mixer. Hold Gunpowder on the cursor and
right-click the ink basin once; one Gunpowder should be consumed, and hovering
the basin should show a 20% Disarm chance. Black Dye, Clay Balls, and an
unrelated item such as Stone should remain untouched.
Closing and reopening the mixer should retain the chance. Taking a Link Panel
should consume one paper and the configured ink cost, clear the current
mixture, and possibly give a panel with Disarm on its tooltip. Repeat until
a property-bearing panel appears, craft it with leather, and confirm the
unwritten Linking Book preserves the property tooltip. After binding it,
link to another dimension; inventory items should drop at the departure point.
With twenty Ender Pearls added to a fresh mixture, both Disarm and Intra
Linking should show about 96.1%, and the basin should animate both property
colors. Taking a panel should reset all three percentages and clear the color
effect; a near-certain modifier should show the brighter outer animation.
Also bind a Descriptive Book with a Disarm panel and check the same drop behavior.
Bind a Descriptive Book with both Intra Linking and Maintain Momentum on its
panel: the assembled book should retain Maintain Momentum but omit Intra
Linking. For Linking Books, try an unmodified book whose destination is the
current dimension: it should refuse travel. A Linking Book with Intra Linking
should work in the same dimension. A Descriptive Book does not require or use
Intra Linking, even if an older book retained that flag.
Automatic Return Links should still appear according to the existing setting
and work from an Age back to the Overworld. A full player inventory or blocked glass-bottle slot
must not duplicate or consume materials for an output that cannot be taken.
Link Panels should not enter Notebooks (folders) or Writing Desk tabs, whether
clicked, shift-clicked, or dragged onto the page surface. An old Notebook or
Desk already holding a Link Panel should still let the player take it out,
but the Desk must not offer a copy of it. The Desk should continue to copy
ordinary symbol Pages; JEI should show that example instead of Link Panel copying.
## Manual Age unload/reload check
The automated suite does not unload a freshly generated Age. Minecraft can
+30
View File
@@ -0,0 +1,30 @@
# Ink Mixer and Link Panel modifiers (Milestone 5, issue #36)
Legacy source: [`InkEffects`](https://github.com/Mystcraft/Mystcraft-Legacy/blob/9bc8ddc061845df0cd5ea47f4fdef773cff786ae/src/main/java/com/xcompwiz/mystcraft/data/InkEffects.java), [`TileEntityInkMixer`](https://github.com/Mystcraft/Mystcraft-Legacy/blob/9bc8ddc061845df0cd5ea47f4fdef773cff786ae/src/main/java/com/xcompwiz/mystcraft/tileentity/TileEntityInkMixer.java), and [`LinkPropertyAPI`](https://github.com/Mystcraft/Mystcraft-Legacy/blob/9bc8ddc061845df0cd5ea47f4fdef773cff786ae/src/api/java/com/xcompwiz/mystcraft/api/hook/LinkPropertyAPI.java).
Legacy does **not** use a conventional ingredient slot: the player clicks the ink basin with a carried item. Each accepted item is consumed immediately, changing the basin's property probabilities. A Link Panel is a virtual result; taking it consumes paper and ink, rolls each property independently using a saved next-seed, writes the selected flags to the Page, then resets that basin's mixture. The Link Panel passes those flags to a Linking Book made with leather. The preview must not roll or consume anything.
| Ingredient | Property | Chance per item |
| --- | --- | ---: |
| Gunpowder | Disarm | 20% |
| Mushroom Stew | Disarm | 5% |
| Clay Ball | Generate Platform | 25% |
| Experience Bottle | Intra Linking | 15% |
| Ender Pearl | Intra Linking + Disarm | 15% each |
| Feather | Maintain Momentum | 15% |
| Fire Charge | Disarm | 25% |
| Black dye | Empty effect key; ignored by Legacy's mixer | None in practice |
Legacy also has optional ore-dictionary dusts: brass, bronze, tin, iron, lead, silver, diamond, and gold. Their effect combinations are in `InkEffects.init()`. Forge's ore dictionary does not exist in NeoForge 1.21.1, so these should be mapped through item tags only when a suitable tag and item exist; none should become a hard dependency. The `Relative` and `Intra Linking Only` properties are registered but have no built-in ingredient. `Natural`, `External`, `Offensive`, `Op-TP`, and `Following` are internal link flags, not mixer ingredients.
For each additive, Legacy scales each existing probability by `1 - sum(additive chances)` and then adds the additive's probabilities. Properties are rolled independently on the final Page. The Legacy link effects are: Disarm drops carried inventory before travel; Generate Platform places a single arrival block if a drop exists; Maintain Momentum retains velocity; Intra Linking permits a same-dimension link.
Rivencraft deliberately diverges from Legacy's shared-probability dilution here: each supported modifier accumulates independently as `new = 1 - (1 - old) × (1 - item chance)^item count`. Twenty Ender Pearls therefore produce about 96.1% each for Disarm and Intra Linking, and a panel can receive both. Taking the panel resets every probability to zero. The GUI uses Legacy's empty-basin atlas sprite, fills the basin dark when ink is present, and projects its colored rotating D'ni effect over the ink (red Disarm, blue Momentum, green Intra); the effect intensifies as a modifier approaches certainty and disappears after output is taken.
Implementation requirements: keep the mixer server-authoritative; persist mixture probabilities and next-seed; show a deterministic virtual result; consume exact inputs once; prevent duplicate output on shift-click; preserve inputs when output cannot be taken; copy the Page's link properties into a Linking Book; apply supported properties only after destination validation; retain unmodified books' current safe-link behavior; and expose both base and modifier sequences to optional JEI. Tests should cover persistence, multiple additives, invalid items, full inventory/bottle output, and panel-to-book transfer.
## Rivencraft 0.4.7.x implementation scope
The built-in vanilla-item rows above are supported except black dye and clay balls. Legacy ignores black dye's empty effect key, so Rivencraft does not consume or advertise it in JEI. Clay Balls are omitted because Age arrival already builds a safe platform by default and a separate Generate Platform link modifier would be redundant. Right-clicking the Ink Mixer basin with a carried item adds one; left-clicking adds the carried stack. The mixture is persistent and its next panel is deterministic. The visual basin tooltip shows current probabilities. Only taking the virtual Link Panel consumes paper/ink and clears the mixture. The Link Panel's property component is copied to a Linking Book by the leather recipe or a Descriptive Book by the Binder. JEI's optional Ink Mixer category lists the base panel and each supported additive interaction with its per-property chance; Rivencraft does not require JEI to run.
Disarm and Maintain Momentum are applied by the server after confirming a safe destination. Disarm spawns each inventory stack as an item entity at the departure point, including for Descriptive Books. Intra Linking is required only for a Linking Book whose destination is in the player's current dimension; ordinary cross-dimensional Linking Books still work. The Binder treats an Intra Linking panel as an ordinary Link Panel and omits that flag from the resulting Descriptive Book, while retaining Disarm and Maintain Momentum. Automatic Return Links remain enabled under the existing configuration, as requested. The old Generate Platform bit remains readable on pre-0.4.7.1 test items but is neither rolled nor applied. Optional dust-tag mappings remain outside this built-in subset until their cross-mod tags and gameplay meaning are agreed.