Skip to content

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

Merged
AlexProgrammerDE merged 12 commits into
mainfrom
t3/bedrock-improvements-next
Oct 24, 2026
Merged

AlexProgrammerDE merged 12 commits into
mainfrom
t3/bedrock-improvements-next

Conversation

@AlexProgrammerDE

@AlexProgrammerDE AlexProgrammerDE commented Oct 24, 2026 •

Copy link
Copy Markdown
Member

Continue general Bedrock compatibility work after PR #13 and StackAnvil 0.3.56.

The player catalog now follows native creative-content registration. Categories one through five register in packet order. The first named group within each category keeps its icon; anonymous groups stay distinct with empty icons. Item group indices address the registered vector directly. Keep exact entry identities, variants, duplicates and source order in separate immutable palette, search and category lists.

Creative membership rewrites a shared item-definition category in entry order. Search reads the final category for all variants, and later catalogs retain categories for definitions that receive no new membership. This fixes a reproduced control where the previous catalog admitted two hidden search rows; the corrected packaged core and native reference admit zero.

Retain all 1,949 built-in category defaults and their construction/update lifetimes. Component property reads distinguish omitted blocks from empty or mistyped values. Explicit construction, ordered updates, invalid-ID updates and final runtime-ID replacement select the surviving definition. The existing ItemRewriter supplies its connection registry whenever it receives a creative catalog.

The shared recipe collection also provides the current disabled-row query. Flat collections disable evaluator states two and three. Grouped collections disable state two, except when a header matches a retained representative by icon and count. Member rows receive no header exemption. Queries use fresh availability without replacing or reordering the snapshot.

All four projects build: 2,862 tests pass with 163 optional skips and no failures or errors. Checkstyle passes after full replay. All 1,498 core classes and the factory table match their embedded add-on and proxy copies; all 1,191 client classes match the tested add-on.

The packaged core matches 186 complete original-executable creative-content controls, including registry construction, content replacement, group/member assignment, category writes, search rebuilding and registry destruction. All native allocations are released. Descriptor conversion, typed item backing, item copy/destruction, diagnostics and ordinary allocator/CRT calls remain supplied boundaries. Retain all 3,418 factory/category/search comparisons, 3,584 eligibility cases and 4,144 collection/history comparisons, with production origins verified. Empty-vector registration establishes constructor defaults rather than a server packet baseline.

The catalog now supplies owned collection rows with retained first-match catalog references and original native group icons. Bind these rows to the shared collection model using the connection's native identity matcher. Require at least two members and a defined icon for a header. Zero-quantity icons retain identity; header expansion compares native icon and quantity rather than the Java fallback. Availability remains an explicit evaluator input.

The packaged comparison runs complete original creative registration, native item equality, source assignment, four-bucket ordering, header construction and projection together in 300 cases. Three retained-state flows also exercise native toggles and refreshes. Compare stored catalog references, eligible counts, ordering, visible rows and expansion history. Parsed descriptors, stable ordinary definitions, descriptor conversion, item copy/destruction, availability results, change notifications and allocator/CRT calls remain supplied boundaries. These controls cover 309 case/flow steps.

The connection catalog now creates a progressive player collection model. Search and the four categories share one budget. Retain source capacities, group/member/destination cursors and initially invalid rows. Completion reports on the next tick after the final writes and dirties the active tab; inactive tabs and header expansion retain their state. Keep population order separate from the native left-tab mapping. The original guard leaves combined sources below eight pending, and the model preserves it.

The packaged model matches 508 complete original-executable controls across 9,438 frames, including phases, cursors, stored catalog references, dirty masks, visible rows and eligible counts. The reference executes creative setup, five collection constructors/destructors, progressive population, controller ticking, refresh dispatch and collection ordering/projection. Parsed descriptors, stable ordinary definitions, descriptor conversion, item copies/destruction, labels/name/receiver interfaces, injected availability, unrelated base ticking and allocator/CRT remain supplied boundaries. Gesture, focus and delayed-action flags stay inactive. Native cleanup leaves no allocations.

Three separate weak-owner flows execute 68 reference-only frames. Installed-screen tick delivery, opening/retirement ownership and actual unlock/craftability evaluator integration remain unfinished. These controls do not establish full screen construction, real raw item construction, physical input or pixel parity.

The shared search API now provides explicit cooking, player substring and player word-prefix policies. Player search removes formatting from both name sources. Its word policy requires the complete literal query plus a prefix match between any query token and any name token. Preserve ASCII-space token boundaries, native empty-token behavior, Unicode normalization and lazy name producers. The cooking policy keeps its existing primary-name behavior.

The packaged core matches 1,136 complete native player searches, 1,220 normalized word controls and 304 retained cooking compositions. Four deliberate semantic regressions fail. The reference executes original player search, word matching, formatting, normalization, validity, vector allocation and cleanup. Name/unlock providers, raw/fallback game types, stable definitions and standard byte/stream interfaces remain supplied boundaries. Native invalid-stack and creative-flag controls describe caller dependencies. The shared matcher does not own item admission, game mode or recipe unlocking. Actual name producers, concrete recipe matching/context inputs, evaluator installation and screen callbacks remain unfinished.

The authoritative tracker now queries native output unlocking from current connection rules, accepted recipes and unlock IDs. Index only the first fixed result using the reconstructed count-one Item key. Select an exact definition/auxiliary bucket before full stack matching. Within each bucket, a later recipe with the same ID replaces the earlier pointer across station tags. Apply context, stack and unlock filtering after replacement. Cache the private index against catalog revisions and connection rewriters, while each query reads current rules and unlock membership.

The packaged tracker and real Item rewriter match 553 native controls over 1,659 unlock-state comparisons, plus 12 retained catalog update/clear steps. Six deliberate regressions fail. The native reference executes the original output-registration region, key constructor, hash replacement/rehash, complete output queries, full stack identity, rule/component checks and unlock membership. Typed static recipes, result getters, recipe-context/Level/actor backing, definition lookup, item copies/destruction, empty userdata/derived refresh, clocks and allocator/CRT remain supplied boundaries. Thirty-six missing-component controls are reference-only. Complete wire registration, concrete recipe-class admission, actual context/component construction, concrete ingredient matching and installed-screen integration remain unfinished. Nonordinary block construction retains its earlier evidence and real constructor composition tests.

The ingredient counter now uses the native descriptor-hash groups, first-stack matching policy and cardinality/descending-quantity sort. Retain repeated allocation rounds, every contributing collection/slot reference and the final partial round. The shared pinned STL sort preserves comparator-equivalent ordering for cooking priorities and ingredient groups. Empty recipes require concrete admission because the original counter does not terminate for them within the execution bounds.

The current-owner producer snapshots crafting grid, hotbar, inventory and optional cursor collections in native order. Preserve four-input player grids, nine-input table grids, collection-relative slots and copied stack data. Exclude armor, offhand and preview cells. The real connection rewriter supplies descriptor conversion and hashing; network IDs do not gate counts. This remains separate from placement and request admission.

The packaged core matches 755 complete native ingredient controls, 7,282 allocation rounds and 55,549 matcher calls, including 50 large-sort controls. Six deliberate regressions fail value comparisons. Native descriptor construction, hashing, STL sorting, source-reference construction/copying and nested cleanup execute. Immutable source backing, ordinary definitions, definition lookup and concrete recipe matching remain supplied interfaces. Six focused regressions also compose real player/table snapshots and the connection rewriter. Actual actor/provider capture, concrete recipe admission/matching, full availability evaluation, installed-screen delivery, actions and pixels remain unfinished.

Resolved ordinary ingredients now use the native Recipe source matcher through the actual current-owner inventory counter. Share typed source guards with cooking: an enchantment ListTag or nonzero item-lock ByteTag rejects before the matcher's source conversion. Preserve absent versus empty userdata for empty descriptors, wildcard auxiliaries and canonical associated block ownership. Empty positions remain in the resolved input vector. The first nonzero stack still controls eligibility for every later source with its descriptor hash, including later enchanted or locked stacks. Keep grid matching on its separate native path.

The packaged core matches 1,443 direct ingredient cases and 260 complete counter controls, including 496 rounds and 3,305 matcher calls. Three focused regressions verify lazy conversion after guards, actual current-owner snapshots, empty positions and associated block ownership. Six deliberately incorrect variants fail value comparisons. Both original shaped and shapeless factories install the same matcher and descriptor comparator; 39 shapeless controls agree. The fixture executes original ordinary Item construction, CompoundTag lookups, descriptor conversion/comparison and the full counter. Typed tag trees/metatype getters, ordinary definitions, registry lookup, source backing and allocator/CRT remain supplied interfaces.

The rich descriptor model now resolves deferred names against explicit native registry interfaces. Narrow auxiliary values before wildcard alias selection, retain ordinary lookup rewrites, validate associated block state before clamping and use BlockLegacy fallback only for an absent Item. Each owned deferred position retains its first resolution, including failure. Alias representatives remain separate from live members, air-based emptiness and wildcard matching. An air-only alias can be empty while still matching an air definition.

The current-owner counter accepts this model with a complete registry context. It queries emptiness during each minimum and consumption phase after source matching. Default descriptor double dispatch preserves candidate-first block lookup. The registry interface supplies no placeholder tables or missing-data defaults.

The packaged core matches 1,904 native resolution/emptiness controls, 4,032 descriptor comparisons and 220 complete mixed counter controls across 514 rounds and 1,179 registry calls. Three focused regressions compose lazy resolution, live alias membership and real owner snapshots. Nine deliberate changes fail value or lookup-order comparisons. The reference executes original resolution, owned descriptor cloning, alias enumeration/matching, the global air-name initializer, wrapper emptiness, default comparisons, full counter rounds and cleanup. Registry name/alias/member interfaces, BlockLegacy/state interfaces, stable definitions, typed source backing and allocator/CRT/TLS remain supplied boundaries. All retained packaged comparisons pass.

Complete registry construction and live definition ownership, tag/Molang payload resolution, complete wire admission, recipe contexts, installed evaluators and screen lifecycle remain unfinished. The mixed counter corpus excludes associated blocks; separate resolver and prior canonical-block controls retain that evidence. Binary NBT loading, complete source Item retirement, native actor/provider capture, physical input, actions and pixels remain outside these captures.

The connection ItemRegistry now exposes native exact alias admission and ordered member names from 89 redirects and 60 complex aliases with 561 members. Apply one redirect before complex lookup, without namespace qualification, legacy parsing or redirect chaining. Require the pinned protocol asset. A genuinely unregistered name retains the native empty-vector result.

Complete original ItemRegistry initialization follows actual native block/state construction under the recorded 1.26.50 BaseGameVersion and owned default Experiments. The empty parsed network vector establishes pre-packet constructor data. All native input, registry, TLS, static and CRT cleanup finishes with no remaining allocations or held locks. The packaged registry matches 2,127 original getter controls across every constructed factory key and both names in each redirect, including 86 registered results and 767 member-name comparisons. Three deliberate changes fail value comparisons. The alias asset matches its source and both embedded copies.

Item aliases differ from block aliases and restriction groups in registration, ordering and destinations. Ordered member names do not define auxiliary callbacks or live Item ownership. Component-priority definition lookup, member/representative resolution, block fallback, complete Java registry construction and installed availability remain unfinished.

The connection registry now supplies native legacy-name parsing and metadata fallback rewriting. Preserve ASCII case folding, colon/C-string suffix behavior, tile-prefix removal and numeric auxiliary acceptance. After one redirect and target parsing, apply the target's complex callback and clear its auxiliary. Keep component-definition precedence and deferred wildcard alias admission on their separate paths.

The pinned data requires all 60 callbacks: 38 member-indexed definitions and 22 explicit mappings with 439 values. Preserve signed-short arguments, native default targets, byte guards and signed remainder behavior. The packaged core matches 2,501 original parser controls and 22,917 complete registry rewrites. Nine deliberate changes fail value comparisons. Forty-six unsupported metadata combinations that index outside native callback storage have explicit Java guards; they do not establish a normal native lookup result or complete input admission.

The reference executes original game parsing, conversion dispatch/range checks, redirects, callbacks and owned string retirement after actual block/state and ItemRegistry construction. Read-only UTF-8 caller backing, allocation and ordinary Windows CRT imports remain supplied boundaries. All native input, registry, TLS, static and CRT cleanup finishes with no allocations or held locks. Complete live definition ownership, component/ordinary/block lookup, Item construction, caller admission and installed availability remain unfinished. All retained packaged comparisons pass.

All five goal areas remain active. The original inventory background/scale, pearl/wind-charge rollback, endless eating and missing locator reports remain unresolved.

Remaining implementation

Area Remaining work
Movement Finish native input phases, configured history providers, ordinary player sources, complete component admission, exact collision/pose phases and remote interpolation, native shape sources, chunk readiness and near-unloaded consumers, and complete mount lifetime and seat ownership. Verify native trajectories and extend verified standing/boat active use to remaining mounts and authority modes, then reproduce the reported public-server rollback.
Inventory actions Complete physical mode-two delivery, active-device integration, remaining carried-item branches, broader cross-input prediction and authoritative model watchers, cooking recipes/quantities, unchanged authored-screen acceptance, and client-authoritative storage acceptance.
Native screens Supported authored cooking scenes can install and route recipe, tab, filter, and direct layout pointers. Deliver ticks from the installed screen with correct opening/retirement ownership, then bind the verified search/output-unlock APIs, connect the verified name/callback APIs and complete live definition ownership, resolve tag/Molang ingredients, connect the verified descriptor model and complete availability evaluation, full player inventory, recipes, tabs, search, live authority, controller/touch delivery, native query/text callbacks, help, focus, carried-item, tertiary, remaining device mappings, layout selection history, workstation screens, lifecycle verification, and the reported background/scale issue.
Camera Complete target tracking, splines, attachments, aim assistance, follow-camera execution, and runtime verification.
Rendering Complete attachable bindings and particle contexts/child effects, geometry/tessellation UV transport, emissive material integration and complete native pixel comparisons, native fluid occlusion/heights and simulation, and unresolved legacy visuals.

See the player inventory reference for evidence and fixture boundaries. Raw captures, original executables, screenshots and private verifiers remain excluded from the repository.

Evaluate current row availability without replacing the retained collection snapshot. Preserve the native flat/grouped thresholds and representative-header exemption, and fold the query into the shared UI patch.

The full build passes 2,826 tests with 163 optional skips. Packaged production classes match 3,584 original eligibility cases and retain all 4,144 collection/history checks. Record native registry, profile and refresh references for the remaining player-controller work.
@coderabbitai

coderabbitai Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Caution

Review failed

The pull request is closed.

Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • 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.

Build the player search source from the complete server creative catalog
and the constructed definition's native category. Preserve entry identity,
variants, duplicates and ordering independently of group metadata and Java
fallback items. Keep constructor defaults and ordered component updates
consistent across runtime-ID replacement.

Fold the category model and data into the registry patch, and source
acquisition into the creative catalog patch. Update the add-on fixtures
for the explicit connection registry constructor.

All four projects build with 2,830 tests passed and 163 optional skips.
The packaged core matches 3,418 new native catalog comparisons and retains
7,728 eligibility and collection/history comparisons. Embedded core
classes and factory data match in the add-on and proxy. Full player UI,
availability evaluation, physical input and the reported bugs remain open.
Creative membership rewrites a shared definition category before search
reads it. Keep the final category across catalog replacement, including
variants that receive no new membership, so hidden entries cannot return
to search through their initial registry defaults.

Fold native group registration and ordered category membership into the
owning catalog patch. Retain exact entry identities and separate palette,
search and category sources for later player collection integration.

All four projects build with 2,833 tests passed and 163 optional skips.
The packaged core matches 186 complete native content controls and retains
11,146 category, search, eligibility and collection comparisons. Native row
population, availability evaluation and the full player screen remain open.
Native player rows select their group through the first matching creative
entry, which can differ from the original source group for duplicate or
wildcard metadata. Populate owned stack snapshots with retained catalog
references before availability evaluation so later refreshes keep identity.

Retain original group icons beside their Java presentation. Admit headers
through native member counts and definitions, including zero-quantity
icons, and compare native icon identity and quantity for expansion history.
Keep availability evaluation explicit until its native implementation and
player controller are integrated.

Fold the changes into their owning patches and replay both affected stacks.
All four projects build with 2,838 tests passed and 163 optional skips. The
packaged core matches 300 native collection cases and three retained flows,
covering 309 steps, and retains all 11,332 prior native comparisons. Full
frame delivery, availability evaluation and player screen parity remain open.
Native collection construction reserves source rows before the progressive
provider fills them. Share one budget across search and the four categories,
retain group/member/destination cursors, and preserve the native guard for
combined totals below eight rather than forcing a minimum budget.

Report completion on the following tick and dirty only the active tab.
Keep inactive dirty tabs and expanded headers, and separate left-tab mapping
from population order. Require an explicit per-view availability evaluator;
installed-screen delivery and opening ownership remain separate integration.

Fold the model into the owning creative catalog patch and replay the stack.
All four projects build with 2,841 tests passed and 163 optional skips. The
packaged model matches 508 complete native controls across 9,438 frames and
retains all 11,641 previous comparisons. Actual availability policy, full
screen construction, input and pixel parity remain unverified.
Player search strips formatting from both name sources and can require a word-prefix match in addition to the complete literal query. Generalize the cooking matcher in its owning UI patch so the policies share normalization and lazy name acquisition without changing cooking behavior.

Record complete native search comparisons and their supplied interfaces. Recipe unlocking, ingredient counts, authoritative name producers and installed-screen integration remain separate work.
Resolve output unlocking from current connection rules and accepted recipes. Preserve reconstructed count-one keys, exact metadata buckets and replacement by recipe ID before context or stack filtering, so a replaced recipe cannot remain visible through an older entry.

Keep the private index tied to catalog revisions and connection rewriters, while unlock membership remains current. Record original executable comparisons, retained-state regressions and full packaged validation. Ingredient counting, context acquisition and player-screen integration remain unfinished.
Keep craftability inputs separate from Java placement capacity and item request
eligibility. Preserve native descriptor grouping, first-stack matching, sort tie
order, shared allocations and final partial rounds. Bind the counter to copied
current-owner grid, hotbar, inventory and optional cursor collections through the
real connection descriptor converter.

Share the pinned STL sort with cooking and retain its license. Refresh merchant
patch context for the new imports without changing its additions or removals.

All four builds pass with 2850 tests and 163 optional skips. Packaged execution
matches 755 original counter controls and rejects six deliberate regressions.
Concrete recipe matching/admission, full availability evaluation and installed
screen integration remain unfinished; the original reports remain unresolved.
Compose resolved ordinary descriptors with the actual current-owner inventory
counter. Preserve typed enchantment/lock guards, empty-descriptor userdata rules,
wildcard auxiliaries, associated Block ownership and first-stack hash caching.
Share source eligibility with cooking while keeping grid matching separate.
Remove the catalog patch's superseded List import from its owning patch.

Original Item construction and concrete shaped/shapeless matching provide 1443
direct matches and 260 complete counter controls. Packaged comparisons pass and
reject six deliberate semantic changes. All four builds pass with 2854 tests
and 163 optional skips, with matching embedded classes.

Deferred names can resolve through alternate alias descriptors or block fallback.
Keep that loader/admission boundary explicit instead of treating wire names as
ordinary keys. Complete availability, installed screens and original reports
remain unfinished.
Preserve native wildcard alias selection, auxiliary rewriting, block fallback and cached per-position resolution. Keep live alias membership independent of representatives and air-based emptiness, and query emptiness in the counter phases where native lookup occurs.

Fold the model and current-owner bridge into the owning crafting patch. Verify packaged behavior against original resolver and mixed-counter controls while keeping actual registry acquisition, wire admission and installed availability explicit integration work.
Expose exact alias admission and ordered member names from the connection registry using the pinned native ItemRegistry tables. Block aliases and restriction groups differ in registration, redirect targets and member order, so they cannot supply these queries.

Fold the data and queries into the owning crafting patch. Verify complete native initialization and cleanup, 2,127 original getter controls, deliberate regressions and the packaged build. Keep metadata callbacks, live definition ownership and installed availability as explicit remaining integration work.
Parse legacy spellings and preserve the constructor-owned metadata callbacks separately from ordered alias members. Resolve a redirect target through its callback, clear auxiliary data at the native phase and retain exact signed-word and byte-guard behavior.

Fold the implementation and callback data into the crafting patch. Verify packaged results against complete original parser and registry rewrite controls, with explicit guards for unsupported native vector indexing. Component-priority definition ownership, Item construction and installed availability remain unfinished.
@AlexProgrammerDE
AlexProgrammerDE marked this pull request as ready for review October 24, 2026 14:42
@AlexProgrammerDE
AlexProgrammerDE merged commit 21a2993 into main Oct 24, 2026
6 of 7 checks passed
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