Skip to content

feat(compat): continue Bedrock compatibility improvements - #15

Draft
AlexProgrammerDE wants to merge 18 commits into
mainfrom
t3/bedrock-compatibility-next
Draft

AlexProgrammerDE wants to merge 18 commits into
mainfrom
t3/bedrock-compatibility-next

Conversation

@AlexProgrammerDE

@AlexProgrammerDE AlexProgrammerDE commented Oct 24, 2026 •

Copy link
Copy Markdown
Member

Construct native item definitions before assigning runtime IDs. Preserve constructor order, typed component readers, retained receivers and late Block registration. Network, named, definition-pointer and saved-NBT callers retain their selected definition identity. Copies, recipe descriptors and inventory snapshots preserve that identity.

Saved tags use separate ItemInstance and ItemStack tails. Typed fields, legacy upgrades, owned userdata, restrictions, pickup state and durable-item migration keep their measured lifetimes. Occupied-slot merges use the native source-first predicate, while full stack and stale-state queries retain separate contracts.

Provider permissions distinguish source removal, incoming placement and discard. Typed byte lock mode one blocks ordinary player removal; generic storage rejects incoming nonzero locks. The count-one planner permits locked menu-to-player transfers in both authority adapters. Armor removal applies raw-mode and Curse of Binding rules before prediction.

Armor placement validates the selected definition, matching equipment slot and actual transfer count. Six carved pumpkins place one item in the head slot and retain five. Whole-stack swaps and bundle extraction cannot place multiple armor items. Shift-click uses provider admission and drag uses capacity one. Component wearable readers retain omitted, mistyped or unknown slot fields. Definition-owned Block associations identify head items, replacing the Java name-suffix shortcut. Recipe callers pass their calculated counts through the shared API.

Offhand placement follows the selected constructed Item definition and eight measured builtin flags. Typed common properties, installed allow-offhand components and wearable finalization retain their native update rules. Empty offhand destinations enforce capacity. Ordinary player quick move keeps full armor and offhand ranges before inventory destinations, while existing global merge and empty passes remain unchanged. The legacy survival adapter checks the same incoming and removal permissions before reserving pending ownership; refused clicks leave cursor and equipment unchanged. Admitted actions still wait for server contents.

Inventory slot throws and cursor drops now require source permission and typed lock mode zero. Direct creative packets require the cached raw creative mode; only Default inherits the level mode. Incoming creative stacks use destination admission before temporary opening. Replacement and clearing recheck discard permission against the refreshed source after opening. Creative catalog drops reject nonzero typed locks. Refused operations create no request or predicted inventory change.

A private Java 26.3 client now exercises real E-key openings and physical inventory actions through the preceding discard-milestone ViaProxy build and Bedrock 1.26.51.1. Sixteen controls cover lock refusals, cursor drops, creative catalog placement and one-item head placement. Three opening tokens and the final close are acknowledged. The client retains Java's ordinary player screens with visible backgrounds. Shift-click equips one pumpkin and routes two to inventory slot nine; native full-action destination ordering remains unverified.

A separate live control now uses the offhand build artifacts. Twenty-four physical Java inventory checks produce 21 matching successful Bedrock responses. Arrows enter and merge in offhand, shift-click routes ten arrows there, and totems complete placement, removal and return. Apple placement and typed slot-locked pickup/removal make no request; inventory-locked transfers succeed. Installed client and all 1,521 embedded core classes match the built artifacts. The final E-key close is acknowledged, the driver exits normally, and all processes started by the run retire. This is a server-authoritative ViaProxy path at 854 by 480 and GUI scale two with only ViaFabricPlus and the Bedrock add-on mod JARs. It does not verify native controller construction/order, direct joins, the legacy authority adapter, delayed rejection recovery or the affected WildFFA configuration.

Changes are folded into their owning patches. The legacy adapter guard belongs to its existing confirmation patch. Food, creative catalog, merchant, loom and cartography patch changes in this milestone only refresh replay context.

Validation:

  • All 105 ViaBedrock patches replay. Repository offline validation, Checkstyle and patch metadata checks pass.
  • The four-project build passes 2,921 tests with 161 optional skips and no failures or errors. ViaBedrock passes 1,790 tests with 84 optional skips.
  • Prior protocol-2193 registry, constructor, component, recipe, saved-NBT, merge, lock and armor-source controls remain enabled. The armor-source reference retains 103,200 original decisions across 129 typed stacks and 40 actor states.
  • Three armor-placement controls compare 94,104 destination decisions and 37,872 installed incoming callbacks. They cover builtin factories, DataDriven updates, invalid strings, definition collisions, custom head associations, counts and typed locks.
  • The discard control executes 56,760 source/discard pairs, or 113,520 original calls, across 129 typed stacks and ten collection roles. All recorded discard decisions equal source admission combined with typed lock mode zero. Forty original actor getter observations also check the shared creative-mode helper.
  • All 78 repository permission, action, bundle and authority-adapter checks pass against the packaged core. A private 40-mode comparison brings the packaged total to 79. Forty-five deliberate source, discard, creative, offhand, placement, capacity, identity, routing and reader regressions fail value assertions. Implementation origins are verified against the packaged JAR.
  • All 1,521 core classes match embedded client/proxy copies. Packaged classes match test-compiled classes with four declared build-identity replacements. All 1,191 client classes match the tested add-on. Among 198 core assets, only eight measured offhand flags are added to factory metadata; the other 197 assets and prior factory fields remain unchanged. Block auxiliary data stays byte-identical. No production class is added; 1,499 existing classes remain byte-identical to the discard milestone. Eleven changed nested classes retain matching declarations and instruction disassembly.
  • Four offhand controls compare 64,872 full destination decisions and 64,872 installed callbacks across 4,086 stack inputs and 2,106 definition observations. They cover typed component values, retained updates, wearable capacity, saved locks and all six three-component declaration orders. Earlier mixed-case conflict rows establish raw-name admission only; the lowercase control establishes component precedence. Original cleanup completes in all four controls. Read-only storage supplies empty hand destinations; full controller execution and occupied outcomes remain outside these controls.
  • The earlier live E-key capture completes normally with 16 physical controls, 13 recorded requests and 13 successful responses. It includes an additional accepted creative replacement beyond the explicitly asserted create request. Installed client, running proxy and all 1,521 embedded core classes match that preceding build. It does not verify the new offhand changes. End-to-end refusals do not independently attribute each refusal to client or core. This is a server-authoritative ViaProxy control at 854 by 480, not the affected WildFFA session or a complete native-controller comparison. See the live control boundaries.

The native target is 1.26.51.1, build 51061372, protocol 2193, with default Experiments and base-game version 1.26.50. Recorded controls complete original backing, input, registry, TLS, static and CRT cleanup without remaining allocations or held locks. The discard control executes the original weak-view factory and view destruction. A supplied pinned collection-root ABI exposes role, backing and start offset zero; its pins return to baseline. Complete collection-root construction and retirement are outside that control. Storage and sparse actor-mode services remain declared interfaces. No permission, Item lookup or Block lookup answer is supplied.

Gameplay drops outside inventory, specialized recipe Consume/output producers, complete creative catalog production and output ownership still need caller controls. Native Actor mode delivery, controller ordering, physical controller input, full client/level setup, arbitrary versioned/custom Block loading, nonzero runtime palettes, registry retirement and broader live authority verification remain unfinished. The broader and focused Block controls retain 12 and 107 differences; auxiliary data stays unchanged while caller context is investigated. Non-compound enchantment-list children receive no native boolean claim.

See the live offhand controls, offhand admission and routing reference, discard and creative reference, armor destination reference, armor source reference, provider permissions and saved-item reference.

All five movement, inventory action, native screen, camera and rendering goal areas remain active. The E-key inventory background/scale, pearl/wind-charge rollback, endless eating and missing locator reports remain unresolved.

Record populated registry controls that retain colliding named definitions while numeric ItemStack initialization selects a separate owner. The packaged Java reproduction loses the earlier name, so the current bidirectional map cannot supply a complete native registry context.

Keep constructor classes, invalid-ID construction, alias fallback, spare lifetimes and observation phases explicit before changing the shared registry and its wire-ID consumers. This records verified evidence and remaining implementation work.
@coderabbitai

coderabbitai Bot commented Oct 24, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Move the verified name parser, alias data, metadata callbacks and tests into the patch that owns ItemRegistry. The registry constructor needs these operations before the deferred recipe consumer can apply. Preserve the full generated implementation while correcting the priority-map contract.

Record original staging keys, secondary name maps and final numeric ordering from complete native captures. These reveal requirements for the pending ownership correction, including the later block producer and raw keys that differ from canonical names. Full replay, four builds and retained packaged comparisons pass.
Preserve the native counterexamples needed by the pending ownership correction. Raw and namespaced element inputs select different staged lifetimes, and replacing a named lookup does not retire the earlier owned definition. Air and late block controls also separate advertised flags from the constructed receiver.
Construct retained item definitions before projecting network IDs. Native collisions preserve both names, and ordinary map traversal selects the numeric owner. A bidirectional name map discarded definitions that the native registry still exposes.

Fold the constructor phases, raw staging keys, block producer inputs and ownership tests into the shared registry foundation. Migrate dependent inventory consumers in their existing patches and keep packet receipt separate from builtin availability.

Verify all four builds, 36,310 original construction comparisons, nine packaged comparison suites and embedded class/resource identity. Keep custom-block contexts, complete component branches and live screen acceptance as explicit verification limits.
Verify nonempty component readers through complete native registry construction and late block registration. Retained updates, exact raw keys and staged replacement determine which receiver owns the compiled properties.

Two native controls cover 22 declarations and twelve property receivers, matching 8,540 packaged comparisons with complete native cleanup. Keep the optional regression in the inventory consumer patch because it also verifies cooking properties.

The complete ViaBedrock suite passes. Runtime sources, resources and build configuration remain identical to the previous verified four-project build. Full component types, other registry contexts and class-specific ItemStack construction remain open.
Separate historical limitations from the current implementation so completed registry behavior and remaining recipe boundaries are clear.
Resolve named ingredients through their selected definitions and receiver-owned block associations. Keep alias representative lookup, direct membership and numeric block fallback distinct, including when network IDs collide.

Fold the adapter and shared descriptor foundation into the existing inventory patch and retain caller-specific source admission. Replay all 105 patches and validate the four-project build, packaged suites and original native recipe controls. Keep the separate stack-construction and block-converter differences documented as open work.
Canonical construction can select a named definition while another definition owns its numeric ID. Preserve that selection through copies, property lookup, merge and query admission, and container snapshots instead of resolving every stack back to the numeric owner.

Fold construction and consumer changes into their existing patches. Replay all 105 patches and validate the four-project build, final package equivalence, 1920 baseline constructors, 672 collision constructors and native identity/property controls. Keep named/NBT construction, legacy encoded-field comparisons, block-converter context and registry retirement limits explicit.
Separate named strings, definition pointers and network construction while retaining the original Item for Block association before numeric owner selection. Preserve wide count and auxiliary branching, including wildcard and raw zero-ID headers.

Use definition-based construction for cooking defaults and output registration. Fold the changes into the owning patches and replay their consumers. All 8,280 named and definition outputs match original native controls; the four-project build passes 2,866 tests. NBT outer-loader admission and the original user reports remain open.
Load saved NBT through typed field admission, legacy ID upgrades and
numeric-owner selection. Preserve the distinct ItemInstance assignment
and ItemStack reconstruction tails, including owned userdata, restrictions,
durability migration and pickup state. Route merchant offers through the
shared loader instead of restoring Block state after invalidation.

Fold exact group selection and empty alias-result handling into their
registry owners. Match 4,508 native saved-constructor outputs, retain prior
construction controls and pass all four builds and offline validation.
Keep the live player-screen and gameplay reports open.
Route pickup, quick move, drag distribution and pickup-all through the
source-first native merge predicate. Raw encoded equality can merge
different definitions or restrictions and reject compatible metadata
variants. Preserve occupied destination fields and rejected predictions.

Keep merge admission separate from stale-state queries. Fold this into
the inventory owner and verify all four Java action paths against 756
native predicate cases, with packaged origin checks and four mutations.
All four builds and offline validation pass; live reports remain open.
Separate removal permission from incoming placement. Player storage rejects
byte lock mode one on removal, while ordinary menus reject every nonzero
byte mode on incoming placement. Preserve unsigned byte admission and ignore
other NBT types. Check permissions before ordinary action prediction.

Remove the blanket refusal from menu-to-player count-one transfers, where
native providers omit those filters. Preserve tags and identities in both
authority adapters, and retain tracked slots when a legacy send fails.
Fold each change into its owning patch and record the native control scope.
Reject the typed slot lock before the creative bypass, then apply the native
Curse of Binding rule. Only Default inherits Creative from the level;
Undefined does not. Keep the general Java display-mode conversion and the
existing typed enchantment reader unchanged.

Fold the policy into the inventory owner. Compare the registered native
callback and full source method against typed items and actor-mode inputs,
and cover request routing and rejected removal after mode changes.
Validate the selected Item definition, native equipment slot and actual
transfer count before predicting armor writes. Keep capacity at one for
stackable head items and preserve wearable slots across omitted, mistyped
or unrecognized component updates.

Fold the policy and its regressions into the inventory patch, adapt recipe
callers in their owning patch, and refresh dependent replay context.
Native controls cover 94,104 destination decisions and 37,872 installed
callbacks. Controller delivery and live server acceptance remain separate.
Separate transfer-source permission from discard permission so locked
menu and cursor items cannot bypass native Drop and Destroy checks.
Validate direct creative writes against raw player mode, destination
policy and the refreshed source before allocating or predicting requests.

Fold the rules into the owning inventory and creative patches. Original
native source/discard calls establish 56,760 decision pairs across ten
collection roles; declared collection-root and actor interfaces remain
explicit verification boundaries. Preserve the broader controller,
world-drop and live-server work as unfinished.
Record sixteen physical input checks through the current ViaProxy and
Bedrock server, with thirteen successful request responses and verified
installed artifacts. Preserve the distinction between accepted actions,
end-to-end refusals and native controller parity.

Keep the failed harness timing and unsupported shift-click remainder
assumption explicit. The original rendering report is unreproduced, and
full native destination ordering still needs its caller control.
Retain offhand permission on the constructed Item definition, including
builtin flags, typed component updates and wearable finalization. Apply
empty-slot capacity and share the same incoming and source policies with
legacy survival transfers before reserving pending ownership.

Keep full armor and offhand ranges in ordinary player quick move so valid
items can reach equipment slots and occupied offhand stacks can merge.
Fold the shared rules and legacy adapter guards into their owning patches.
Document the original native controls and the remaining controller, wire
and live verification boundaries.
Exercise the built offhand implementation through real Java inventory
input and Bedrock responses. Record accepted arrow merges, shift-click,
totem transfers and typed lock behavior, plus invalid-item refusals.

Keep this server-authoritative ViaProxy evidence separate from native
controller ordering and the earlier E-key capture. Verify installed
artifact continuity, final close acknowledgment and process cleanup.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant