Public Access
Build / build (push) Canceled after 0s
Advance to 1.0.1.54-beta.1 after player validation. Port material, vegetation, lake, terrain-volume, crystal, Dense Ores and fissure features with saved plans. Update beta documentation and release notes. Refs #98, #104
375 lines
22 KiB
Markdown
375 lines
22 KiB
Markdown
# Minecraft 26.3 beta port workspace
|
||
|
||
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, and the Ink Mixer work, and the Binder can
|
||
author Standard, Amplified, Island, Flat, Void, or Cave terrain with supported
|
||
biome-distribution pages. Other terrain families, feature/material effects,
|
||
portals, and much of
|
||
the 1.21.1 gameplay remain unported. 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.
|
||
|
||
The entries below record how the port was built, including earlier alpha-only
|
||
limitations that were addressed by later slices.
|
||
|
||
The creative tab contains the two Books, Crystal Block and Crystal Shard;
|
||
the player verified these in game. Unbound Linking Books use the Legacy
|
||
sprite, and four Crystal Shards craft into a Crystal Block; both were also
|
||
verified in game. The current local iteration adds Budding Crystal and all
|
||
four blue crystal growth stages with vanilla-style harvesting. Natural crystal
|
||
formation generation is not yet ported; use Creative or commands to obtain a
|
||
Budding Crystal for this test. The player verified the growth chain in game.
|
||
The next local slice adds the Link Panel Page as a separate creative entry,
|
||
using the existing item texture. Blank Pages remain unavailable in Creative;
|
||
the player verified the Link Panel's appearance in game. Ink Vials now use
|
||
the existing crafting recipe and animated sprite. With paper in the other
|
||
hand, an Ink Vial prepares a Link Panel for two of its sixteen ink uses, as
|
||
in the current 1.21.1 default. The player verified the Ink Vial interaction
|
||
in game. Symbol writing remains unported.
|
||
A prepared Link Panel can now be combined shapelessly with leather to craft
|
||
an unwritten Linking Book, as in 1.21.1. This custom recipe rejects a blank
|
||
Page and extra ingredients. The first Book Binder slice now assembles random-Age
|
||
Descriptive Books from leather and a Link Panel. Authored pages remain later.
|
||
|
||
The next local `1.0.1.10-alpha.1` slice exposes all eight combinations of
|
||
plain, Disarm, Maintain Momentum, and Intra-Linking Link Panels in the Link
|
||
Pages creative tab. Leather crafting preserves those flags on the Linking
|
||
Book. Intra-Linking permits same-dimension travel; Maintain Momentum rotates
|
||
horizontal speed to the destination yaw; Disarm leaves the player's inventory
|
||
at the departure point after a successful teleport. These are development
|
||
variants until the Ink Mixer is ported; other Link Panel modifiers are not
|
||
implemented in 26.3. The player passed this modifier slice in game.
|
||
|
||
The local `1.0.1.11-alpha.1` slice adds a craftable Book Binder with persistent
|
||
leather, Link Panel, and output slots. Name an Age in its GUI and press Bind;
|
||
the server creates a random prototype Age and places its completed Descriptive
|
||
Book in the output. Disarm and Maintain Momentum carry from the panel into the
|
||
book; Intra-Linking has no effect on Age creation. Symbol-page authoring and
|
||
the Ink Mixer remain unported. This slice passes the build and dedicated-server
|
||
smoke test. The player passed crafting and travel in game, but found that E
|
||
closed the focused title field and the provisional layout did not match the
|
||
existing 1.21.1 Binder GUI.
|
||
|
||
The local `1.0.1.12-alpha.1` follow-up reuses the 1.21.1 Binder layout: title
|
||
bar, cover and output at opposite sides, and a central Link Panel page strip.
|
||
The title persists in the block, the missing-panel cue pulses red, and a
|
||
focused title field consumes inventory/hotbar keys. Click the output once to
|
||
bind, then click again to take the completed book. Authored symbol strips and
|
||
the full 1.21.1 Binder grammar remain unported. This same slice also ports the
|
||
1.21.1 Ink Mixer block, menu, animation, modifier additives, 16-ink-per-panel
|
||
cost, and automatic vial exchange. The creative tab includes it and its
|
||
vanilla-shaped recipe is available. This slice needs an in-game Binder visual/
|
||
keyboard check and Ink Mixer interaction check.
|
||
|
||
The local `1.0.1.13-alpha.1` iteration makes Binder assembly place the new
|
||
Descriptive Book directly on the cursor with one click. It also renders the
|
||
five-page strip from the 1.21.1 GUI and refreshes the Mixer's virtual result
|
||
in the same server click that changes paper or ink. The Mixer now consumes
|
||
one ink unit and one paper per Link Panel (16 panels per full vial); additive
|
||
chances reset when a panel is taken. In-game retest of the first-update
|
||
behavior and Binder visual/click flow is pending.
|
||
|
||
The local `1.0.1.14-alpha.1` follow-up compares the current 26.3 Binder against
|
||
the new dev-image sequence. The Binder no longer paints five permanently empty
|
||
pages: the first strip page appears when a Link Panel is inserted or carried,
|
||
and the missing-panel cue remains above it. Clicking that page inserts/removes
|
||
the Link Panel using the same server-owned cursor flow as 1.21.1. Its tooltip
|
||
also shows the stored panel. Multi-page symbol writing and strip scrolling
|
||
cannot be exercised yet because symbol pages are still unported to 26.3.
|
||
|
||
The local `1.0.1.15-alpha.1` Binder polish uses the Link Panel's actual 16×16
|
||
item icon for the missing-panel cue instead of a full-size page sprite. The
|
||
red pulse and tooltip remain confined to that icon.
|
||
|
||
The local `1.0.1.16-alpha.1` slice adds the bundled 1.21.1 symbol-page
|
||
identities to the 26.3 creative menu, grouped by category. Their names and
|
||
descriptions are reused from the 1.21.1 translations, and the Page item now
|
||
persists each symbol ID. These pages currently use the generic symbol-page
|
||
artwork; the Legacy-style runtime glyph compositor has not been ported.
|
||
They cannot yet be inserted into the Binder or change Age generation. This is
|
||
the page-data foundation for the next authored-writing slice.
|
||
|
||
The local `1.0.1.17-alpha.1` follow-up derives biome pages from the active
|
||
26.3 biome registry instead of only the older bundled list. It excludes the
|
||
TerraBlender staging placeholder and separates cave/Nether biomes. Full-block
|
||
materials and true source-fluid blocks also receive registry-derived pages,
|
||
covering eligible new and modded blocks. Five 26.3 feature symbols cover
|
||
poplar trees, fallen poplars, shelf mushrooms, red shrubs, and abandoned
|
||
camps. These feature pages are identities only until their Age-generation
|
||
handlers are ported. Biome, material, and feature pages still use generic
|
||
artwork and cannot yet be placed in the Binder.
|
||
|
||
The local `1.0.1.18-alpha.1` follow-up restores the 1.21.1 animated redaction
|
||
for Corrupted Page names and descriptions. It does not yet port the dynamic
|
||
glyph artwork used for other symbol pages.
|
||
|
||
The local `1.0.1.19-alpha.1` slice ports the runtime glyph compositor for
|
||
symbol Page items. It uses the shared Legacy component sheet and page
|
||
parchment with a bounded 256-texture client cache; generated textures are
|
||
released on resource reload. Registry-derived biome and material pages use
|
||
the same deterministic four-word poem pattern as 1.21.1. No per-symbol PNGs
|
||
are generated in the source tree. Binder insertion and authored Age generation
|
||
are still unported.
|
||
|
||
The local `1.0.1.20-alpha.1` visual follow-up enlarges symbol artwork on Page
|
||
items, slightly thickens the component strokes, and centers number glyphs at a
|
||
larger size so they remain readable in inventory and creative-menu icons.
|
||
|
||
The local `1.0.1.21-alpha.1` slice ports the Binder's ordered, scrollable
|
||
symbol-page strip. Pages persist in its block inventory and can be inserted,
|
||
removed, and moved via the cursor or shift-click. A Binder with symbol pages
|
||
cannot yet produce a book: authored Age compilation is the next port step, and
|
||
silently producing a random Age would consume the player's writing incorrectly.
|
||
|
||
The local `1.0.1.22-alpha.1` visual follow-up gives large Binder pages the
|
||
transparent, full-size Legacy glyph composition. Item icons retain their
|
||
separate parchment-backed, reduced-size artwork.
|
||
|
||
The local `1.0.1.23-alpha.1` follow-up places Binder glyph overlays in a later
|
||
26.3 GUI stratum than the page atlas, preventing texture batching from drawing
|
||
the opaque page backgrounds over the dynamic artwork.
|
||
|
||
The local `1.0.1.24-alpha.1` follow-up renders Binder page glyphs through
|
||
their working special item model, scaled to the page thumbnail. Direct GUI
|
||
blitting of the generated texture remained blank in the 26.3 client.
|
||
|
||
The local `1.0.1.25-alpha.1` follow-up marks temporary Binder preview stacks
|
||
for glyph-only special-model rendering. The full-size transparent artwork now
|
||
uses the working item pipeline without drawing a second, smaller page outline.
|
||
|
||
The local `1.0.1.26-alpha.1` corrects the temporary preview component's codec
|
||
registration, which NeoForge 26.3 requires during bootstrap.
|
||
|
||
The local `1.0.1.27-alpha.1` slice applies the first authored Age subset:
|
||
Standard terrain plus at most one Biome page. The selected biome is persisted
|
||
with the Age and used by a fixed-biome Overworld noise generator on creation
|
||
and reload. Ordered page IDs are stored on the finished book. Other page
|
||
combinations remain in the Binder and cannot yet be assembled, preventing
|
||
silent loss of unsupported writing. Multi-biome distribution, other terrain
|
||
profiles, and feature/material pages still need their 26.3 generation ports.
|
||
|
||
The `1.0.1.28`–`1.0.1.32` slices add Tiled, Grid, Native, and five scaled
|
||
biome distributions; multiple authored Biome pages; Amplified and Island
|
||
terrain; and saved terrain/biome plans across reload. A Binder or Ink Mixer
|
||
beside another block no longer hides that block's faces. Unsupported authoring
|
||
still stays in the Binder rather than silently producing an incorrect Age.
|
||
|
||
The local `1.0.1.33-beta.1` slice adds Flat and Void terrain to Binder
|
||
authoring. Flat uses vanilla's superflat layers; Void has no generated floor
|
||
and uses the selected Biome for its environmental rules. Each accepts zero or
|
||
one authored Biome page. Unsupported multi-biome Flat/Void books remain in the
|
||
Binder until their custom generator is ported. The operator probe can create
|
||
test Ages with `rivencraft_port age create <name> <seed> flat|void`.
|
||
|
||
The local `1.0.1.34-beta.1` follow-up starts Flat's solid layers at Y=0
|
||
(bedrock at 0, dirt at 1–2, grass at 3) and lands players at the ground surface
|
||
instead of creating an elevated fallback platform. This affects newly
|
||
generated Flat chunks; previously generated Age chunks are not rewritten.
|
||
|
||
The local `1.0.1.35-beta.1` follow-up enables biome decoration on newly
|
||
generated Flat chunks, allowing the selected biome's trees, vegetation, and
|
||
other placed features to appear on the Flat surface. Void remains undecorated.
|
||
|
||
The local `1.0.1.36-beta.1` slice accepts multiple Biome pages with Flat and
|
||
Void terrain. It ports the 1.21.1 authored-biome Flat generator to 26.3, so
|
||
Tiled, Grid, and scaled regions affect climate in both terrain types and
|
||
surface decoration in Flat. Void continues to generate no floor or biome
|
||
decoration. The operator-only `age create_multi` probe creates two-biome test
|
||
Ages for the dedicated-server smoke test.
|
||
|
||
The local `1.0.1.37-beta.1` slice adds the Cave terrain page to Binder
|
||
authoring. It uses Minecraft's caves noise settings, accepts Cave and Nether
|
||
biome pages (including multi-biome distribution), and searches below Y=64 for
|
||
a safe arrival instead of landing on the roof. The 26.3 vanilla Cave preset
|
||
defaults to water below Y=32, so this port derives a dry Cave setting with
|
||
air as its default fluid and the sea level below the world floor. This applies
|
||
to newly generated Cave chunks; it does not drain existing chunks. Cave-specific Nether surface
|
||
materials from 1.21.1 are not ported yet. The dedicated-server smoke now
|
||
creates and reloads Cave Ages alongside the other terrain families.
|
||
|
||
The dry-Cave follow-up is packaged as `1.0.1.38-beta.1`; no 26.3 release is
|
||
published until the in-game check passes and publication is explicitly requested.
|
||
|
||
The local `1.0.1.39-beta.1` follow-up rejects fluid at both feet and head
|
||
height during safe-landing searches. It also refuses to carve the fallback
|
||
platform into submerged space if no dry footing can be found.
|
||
|
||
The `1.0.1.40-beta.1` port slice seeds terrain and biome selection for
|
||
Descriptive Books with no authored symbol pages. It uses the same terrain and
|
||
biome-controller rank weights as the 1.21.1 line, freezes the resulting plan
|
||
in the Age index, and accepts the result after restart. The operator-only
|
||
`age create_random <name> <seed>` probe exercises this path. Random feature,
|
||
sky, weather, and instability choices are not yet ported; this slice covers
|
||
terrain and biomes only.
|
||
|
||
The `1.0.1.41-beta.1` slice establishes an Age-scoped decoration wrapper
|
||
for 26.3 and accepts one Block material page immediately before a Rocks feature
|
||
page. Newly generated surface chunks place small rock clusters made from that
|
||
block without modifying the shared biome registry. The selected block and
|
||
generator survive a restart. Cave and Void terrain remain unsupported for this
|
||
first surface-feature path; unsupported combinations stay in the Binder.
|
||
Random feature selection, unpaired materials, duplicate feature pages, and
|
||
instability scoring remain future port steps.
|
||
|
||
The local `1.0.1.42-beta.1` follow-up lets a Rocks page choose a deterministic
|
||
full-block material when no Block page precedes it. Repeated Rocks pages now
|
||
add independent placement attempts (up to 32) instead of being rejected. The
|
||
ordered material choices are frozen in the Age index and restored after a
|
||
restart; old single-material beta Ages still load. An explicit Block page
|
||
must still directly precede the Rocks page it modifies. Most other feature
|
||
pages and material-feature pairings remain unported.
|
||
|
||
The local `1.0.1.43-beta.1` slice replaces the temporary 3×3 Rocks piles
|
||
with Minecraft 26.3's forest-rock block-blob feature and its placement rules,
|
||
matching the 1.21.1 Age feature path more closely. The selected material and
|
||
repeat count still come from the frozen Age plan. Only newly generated chunks
|
||
use the new rock shape; previously generated chunks remain unchanged.
|
||
|
||
The local `1.0.1.44-beta.1` slice ports ordered Flowers, Trees, and Huge
|
||
Trees pages to surface Ages. Their 26.3 vanilla placed features run after
|
||
biome decoration, with the Age's own seed; repeated pages make independent
|
||
placement attempts. Cave/Void terrain and cave/Nether/End biome pools are
|
||
not treated as surface vegetation. The feature plan survives server restart;
|
||
already generated chunks do not gain new decoration.
|
||
|
||
The local `1.0.1.45-beta.1` slice ports the Dungeons page for Standard,
|
||
Amplified, and Island noise terrain. It uses the 1.21.1 placement definition
|
||
(eight monster-room attempts per page per chunk across the build height),
|
||
stores repeat count with the Age, and rejects Dungeons pages on Flat, Void,
|
||
or Cave terrain. New chunks only; existing chunks are not regenerated.
|
||
|
||
The local `1.0.1.46-beta.1` slice adds Surface Lakes, Deep Lakes, and Small
|
||
Lakes on surface noise terrain. A Fluid page immediately before a lake page
|
||
selects its fluid. Unmodified pages choose a seeded fluid from the same source-
|
||
fluid pool exposed in Creative, with repeated choices and their order saved
|
||
with the Age. Surface/Small Lakes retain the 1.21.1 one-in-twelve attempt rule;
|
||
Deep Lakes retain vanilla underground placement. These pages currently require
|
||
Standard, Amplified, or Island terrain. Existing chunks do not redecorate.
|
||
|
||
The local `1.0.1.47-beta.1` slice adds authored Floating Islands alongside
|
||
Standard, Amplified, Island, Flat, and Void terrain. A preceding Block page
|
||
sets the island core material; otherwise each occurrence resolves a seeded
|
||
material from the full-block pool. The 1.21.1 shape, high altitude, rarity,
|
||
and biome-dependent grass/dirt cap are retained. Repeated pages use independent
|
||
island seeds. Cave terrain remains unsupported for this feature.
|
||
|
||
26.3 combines base noise, surface, and cave carving in one terrain operation.
|
||
Floating Islands run after that operation and before decoration, so the added
|
||
islands are not cut by the base terrain's carvers. The saved feature plan is
|
||
used again after restart and for new chunks; existing chunks keep their blocks.
|
||
|
||
The local `1.0.1.48-beta.1` slice adds authored Tendrils on every terrain
|
||
type, including Cave and Void. A preceding Block page selects the material;
|
||
unmodified occurrences resolve seeded materials from the full-block pool.
|
||
Repeated pages use independent paths, with up to 32 occurrences per feature.
|
||
Mixed Floating Islands/Tendrils retain their authored order in the saved plan.
|
||
|
||
Tendrils retain the 1.21.1 branching path algorithm, source rates, and vertical
|
||
distribution concentrated below Y=128. They can replace existing terrain while
|
||
preserving bedrock. As with Floating Islands, they run after 26.3's combined
|
||
terrain operation and before decoration. Build checks are automated; in-game
|
||
generation, appearance, and restart validation are handed to the player.
|
||
|
||
The local `1.0.1.49-beta.1` slice adds the Skylands feature page. Its seeded
|
||
seven-octave filter removes base terrain at/below a varying cutoff near Y=76
|
||
and removes liquid above it, preserving the upper solid terrain. It accepts
|
||
all terrain types and no Block modifier. On low Flat terrain this removes
|
||
the base layers; on Void it leaves the empty base unchanged.
|
||
|
||
The filter runs once before authored Floating Islands and Tendrils, matching
|
||
1.21.1; duplicate Skylands pages do not compound the filter. Its flag is saved
|
||
with the terrain-feature plan. Existing chunks are unchanged. Try Amplified
|
||
terrain for a clear visual check; generation and restart validation are manual.
|
||
|
||
The local `1.0.1.50-beta.1` slice ports Spheres and Spikes using the 1.21.1
|
||
generation algorithms. Spheres add solid nodes on all terrain types, including
|
||
Cave and Void, while preserving bedrock. Spikes require solid surface terrain:
|
||
Standard, Amplified, Island, or Flat. Their circular footprint stays in one
|
||
chunk and must have solid ground beneath every column.
|
||
|
||
Each page accepts a preceding Block material or resolves a seeded random
|
||
material when unmodified. Repeated pages have independent placement seeds,
|
||
up to 32 per feature. Spheres run during terrain construction, after Skylands;
|
||
Spikes run after biome decoration. Both use the existing saved solid-feature
|
||
plan. New chunks only; in-game appearance and restart checks remain manual.
|
||
|
||
The local `1.0.1.51-beta.1` slice ports Obelisks. It preserves the 1.21.1
|
||
one-in-128 candidate chance per chunk/occurrence, 4×4 plinth, and 2×2 shaft
|
||
extending 12 blocks above it. Placement requires dry, sturdy ground across
|
||
the base, at most two blocks of surface variation, and clear/replaceable
|
||
space for the complete structure. The footprint stays within its chunk.
|
||
|
||
Obelisks support Standard, Amplified, Island, and Flat terrain. A preceding
|
||
Block page sets their material; otherwise a seeded full-block material is
|
||
selected. Repeated pages make independent attempts, up to 32 occurrences.
|
||
Spikes and Obelisks share surface-stage classification and preserve their
|
||
authored order within that stage. World and restart validation are manual.
|
||
|
||
The local `1.0.1.52-beta.1` slice ports Crystal Formations using the 1.21.1
|
||
surface-mound algorithm and the existing blue crystal blocks. Each occurrence
|
||
has a one-in-fifteen candidate chance per chunk; suitable dry, nearly level
|
||
ground produces a 3×3 mound with budding crystal and occasional small buds.
|
||
The existing budding blocks continue growing crystals through random ticks.
|
||
|
||
Crystal Formations accepts Standard, Amplified, Island, and Flat terrain,
|
||
but not Cave/Void terrain or Block/Fluid modifiers. Up to 32 repeated pages
|
||
make independent attempts. The ordered feature plan survives restart, and
|
||
only newly generated chunks receive formations. For a quick manual test,
|
||
bind a Flat/Plains Age with several Crystal Formations pages, inspect the
|
||
blue mounds and bud growth, then revisit after restarting the world.
|
||
|
||
The local `1.0.1.53-beta.1` slice ports Dense Ores. Each page replays eligible
|
||
ore placements from the Age's actual biomes, preserving their height ranges,
|
||
replacement rules, and biome filters. Vanilla and modded ore features are
|
||
recognized by their ore targets; custom placements can opt in through the
|
||
`rivencraft:dense_ores` placed-feature tag, just as in 1.21.1.
|
||
|
||
Up to 32 pages add independent passes on Standard, Amplified, Island, or Cave
|
||
terrain. Flat/Void and Block/Fluid modifiers are unsupported; an explicitly
|
||
authored biome pool must contain at least one ore-producing biome. The count
|
||
survives restart. Only new chunks gain extra ore, and this slice does not yet
|
||
port the later instability system or random-Age feature selection.
|
||
|
||
For manual validation, create a Standard/Plains Age with several Dense Ores
|
||
pages and inspect underground ore abundance, then restart and explore more
|
||
chunks. A Cave Age with a Nether biome can check Nether ore placements too.
|
||
|
||
The local `1.0.1.54-beta.1` slice ports the Star Fissures page. On first book/
|
||
operator arrival, it carves the 1.21.1 Legacy-shaped rift near the arrival chunk
|
||
and places a starfield portal at the dimension's minimum Y. Cave terrain keeps
|
||
its bedrock roof. All terrain types are supported; repeated pages still create
|
||
one fissure, and Block/Fluid modifiers are not accepted.
|
||
|
||
The first arrival and completed generation are saved per Age, so revisits and
|
||
restarts do not recarve the rift. Touching its bottom returns entities to a safe
|
||
location near the shared Overworld spawn, not a bed, with the original fissure
|
||
sound. The portal is unobtainable and inert in the Overworld. Random-Age feature
|
||
selection remains later work; author a Star Fissures page to test this slice.
|
||
|
||
For manual validation, create a Flat/Plains Age with Star Fissures. Look near
|
||
the arrival point (generally east/south), descend through the rift, and touch
|
||
the starfield to return. Re-enter after restarting; check that the same fissure
|
||
and its portal still work. A Cave Age checks that carving leaves the roof intact.
|
||
|
||
From the repository root:
|
||
|
||
```sh
|
||
./gradlew -p ports/mc263 build
|
||
```
|
||
|
||
This standalone Gradle build uses Minecraft 26.3, NeoForge 26.3.0.99,
|
||
ModDevGradle 2.0.148, and Java 25. The repository root remains the independent
|
||
Minecraft 1.21.1/Java 21 build:
|
||
|
||
```sh
|
||
./gradlew build
|
||
```
|
||
|
||
The beta JAR is under `ports/mc263/build/libs`. Continue the port and its
|
||
full dual-version validation in issues #98–#104 before calling 26.3 stable.
|
||
|
||
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.
|