Skip to content

[Java] Fill data gaps from vanilla sources: 26.2, 1.13.1 palettes, 1.14.2, windows, commands, 1.9.1 - #1287

Open
milutinke wants to merge 1 commit into
PrismarineJS:masterfrom
milutinke:umpk-contributions
Open

milutinke wants to merge 1 commit into
PrismarineJS:masterfrom
milutinke:umpk-contributions

Conversation

@milutinke

@milutinke milutinke commented Sep 10, 2026 •

Copy link
Copy Markdown

Hey,

I kept tripping over holes in this dataset while building a .NET client (UMPK) against it, so instead of working around them I figured I'd send the fixes back. Everything below comes from vanilla itself: jars, data generator reports, decompiled sources, and live packet captures where it mattered.

What was wrong:

The 1.13.1 entry reuses all of 1.13's blocks, items, and other. Real 1.13.1 has 598 blocks and 789 items. Five dead coral blocks and items showed up, live corals and the conduit got waterlogged, TNT got unstable, and that shifts every state id from TNT onward and every item id from 443 onward. Anyone decoding 1.13.1 with this data was reading garbage past those points. I replaced those files with the real palettes from the 1.13.1 data generator reports. The pre-releases had to move too since the dead corals postdate them.

What was missing:

Protocol 776 (26.2) had nothing at all, not even a dataPaths entry. I added 19 files. Language is byte-exact against Mojang's en_us (8123 entries), blocks and items check out against the report palettes (1196 blocks, 1537 items), and protocol.json follows the usual generated process with each of the 8 wire changes diffed against the 26.2 sources.

Protocol 485 (1.14.2) was also completely absent. Full entry now, 676 blocks and 876 items, all matching. One detail: the trade list packet on 485 has no canRestock field (that arrives at 490), so I left it out.

Protocol 108 (1.9.1) was only a pre2 stub. I completed the entry, confirmed the 1.9 final data stands for it, and the language table is byte-exact (2855 entries). Side note: the "1.9" language file looks like it's actually the 1.9.4 table minus two keys. Left it alone as out of scope.

windows.json: everything from 1.16.2 up still points at the 1.16.1 file, so no crafter or anything newer. I added a 1.20.3 windows file with the crafter (checked against the decompiled CrafterMenu in four vanilla versions; it's the only menu added since 1.16.1) and repointed 15 versions. Caveat: the crafter property names are my own labels for verified container indices.

commands.json: everything newer than 1.20.3 pointed at the 1.20.3 tree. I converted the actual vanilla command reports for 1.20.5, 1.21.5, 1.21.6, 26.1, and 26.2, node for node (1763 to 2091 nodes each). Versions in between borrow the nearest older exact tree.

Two drive-by fixes in the new files: trial_spawner_detected_player is actually trial_spawner_detection, and zomie should be zombie.

Sources, all vanilla: Mojang server jars and their data generator reports (blocks, items, registries, commands), the vanilla en_us language files, decompiled sources (Blocks, CrafterMenu, packet classes), and live packet captures for wire layouts.

Validation: full mocha suite passes, 1917 tests, zero failures, including schema checks on everything new. Every file was cross-checked against the UMPK dataset, which is extracted straight from vanilla.

Knowingly left alone: 1.13.1 recipes still borrow from 1.13, effects/enchantments/instruments on 26.2 are borrowed (those registries didn't change, verified), and two stale packet names (0x40 spectate, block_place) that predate this PR.

Happy to split this up if smaller pieces are easier to review.

…mmands refresh, 1.9.1

1.13.1 (401): real 598-block/789-item palettes (were 1.13 fallbacks).
UMPK 401 reports identical to 404 block-for-block/item-for-item; new
data/pc/1.13.1/{blocks,items,blockCollisionShapes,materials}.json from
1.13.2 content; 1.13.1 + 1.13.2-pre1/pre2 repointed (audit forces pres
forward: dead corals added in 1.13.1, kept in 1.13.2).

1.14.2 (485): new version. UMPK 480==485 everywhere; 485 packet ids ==
490; trade_list without canRestock (UMPK MerchantOffersWire: 477-485
one trailing bool, canRestock arrives at 490). Own version.json,
protocol.json/proto.yml/commands.json copied from 1.14.1.

1.9.1 (108): new version. UMPK 107==108 except lang (3 renamed keys +
1 subtitle). Own version.json, protocol.json/proto.yml from pre2 (same
protocol 108), exact language.json (== vanilla 108 table); 1.9.2 points
at it (UMPK 108==109 lang); new exact 1.9.4 language (== vanilla 110).
16w20a/1.10-pre1 language forward-pointed to 1.9.4 (regression audit).

windows: new data/pc/1.20.3/windows.json adds minecraft:crafter_3x3
(9 grid + result@45, 10 container-data props), slot indices verified in
vanilla CrafterMenu (1.20.4/1.20.6/1.21/1.21.11/26.1 decompiled, stable);
UMPK menus 765==776 prove it is the only addition since 1.16.1.
1.20.3+ repointed (crafter menu exists from protocol 765).

commands: real vanilla-report trees for 1.20.5 (766), 1.21.5 (770),
1.21.6 (771), 26.1 (775), 26.2 (776); examples carried from 1.20.3
where (parser,modifier) matches else []. Intermediate versions borrow
nearest older exact tree. UMPK parser drift table in review.

26.2 (776): scaffold + 19 real files from Mojang 26.2 jars (sha1-pinned,
/tmp only): language == en_us byte-exact (8123); blocks/items full
palette (1196/1537, report-verified; new-block physics from vanilla
Blocks.java); shapes geometry-matched; entities +sulfur_cube (0.49,
MONSTER, from_bucket+max_fuse); sounds/particles positional registries;
attributes (Attributes.java order+values); biomes +sulfur_caves@53
(alpha order per vanilla TreeMap loading); tints grass/water overrides;
loot from datapack tables; 26 crafting recipes; loginPacket +onlineMode
+sulfur_caves NBT; protocol.json GENERATED from latest/proto.yml
(sessionId, onlineMode, team reorder+optional color, spectator_action
optional, particle/component registries, geyser options) - every layout
diffed against 26.2-decompiled. Also fixes pre-existing
trial_spawner_detected_player naming and zomie typo in the new files.

Validation: per-item cross-check scripts (/tmp, not committed), JSON
schemas, dataPaths/versions/regression audits, mocha 1917 passing.
Residuals: 1.13.1 recipes left at 1.13 (no evidence); 16w20a/1.10-pre1
language approximated to 1.9.4 table; md 26.1 keeps stale 0x40 spectate
+ block_place names (not touched); command trees for 767-769/772-774
borrow nearest older (tree-only drift unverified).
@milutinke milutinke changed the title Fill data gaps from vanilla sources: 26.2, 1.13.1 palettes, 1.14.2, windows, commands, 1.9.1 [Java] Fill data gaps from vanilla sources: 26.2, 1.13.1 palettes, 1.14.2, windows, commands, 1.9.1 Sep 12, 2026
@extremeheat

Copy link
Copy Markdown
Member

Cool, but there are alot of separate changes in here mixed in that make it hard to review. Can you please break into separate PRs individually fixing the relevant issues?

If you used LLM you can ask it to break up the diff into multiple PRs

@DallasCarraher

Copy link
Copy Markdown

To help get 26.2 support landed sooner, I split the 26.2-specific slice of this PR out into #1298 — just the data/pc/26.2/* files, the new 1.20.3/windows.json, and the latest/proto.yml bump, without the unrelated 1.13.1/1.14.2/1.9.1/commands-refresh changes bundled in here. Full test suite passes there. Figured a smaller, single-purpose PR might be easier to review independently of the rest of this changeset — happy to fold it back in if you'd rather keep it all together.

DallasCarraher added a commit to DallasCarraher/minecraft-data that referenced this pull request Sep 14, 2026
Registers protocol 776 (26.2) with real generated data: blocks, items,
entities, recipes, language, commands, protocol.json (regenerated from
proto.yml), loot tables, and the rest of the per-version files. Also
adds a 1.20.3 windows.json with the crafter menu (missing since 1.20.3)
so 26.2's windows entry is accurate.

Extracted from the 26.2 portion of PrismarineJS#1287,
which additionally carries unrelated fixes for 1.13.1, 1.14.2, 1.9.1
and a broader commands.json refresh across older versions. This commit
isolates just the 26.2 data so it can be reviewed and merged
independently of that larger changeset.

effects/enchantments/instruments are borrowed from 26.1 since those
registries are unchanged in 26.2.

Full mocha suite passes (1887 passing, 1 pending, 0 failing).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
extremeheat pushed a commit that referenced this pull request Sep 19, 2026
* Add Minecraft PC 26.2 data

Registers protocol 776 (26.2) with real generated data: blocks, items,
entities, recipes, language, commands, protocol.json (regenerated from
proto.yml), loot tables, and the rest of the per-version files. Also
adds a 1.20.3 windows.json with the crafter menu (missing since 1.20.3)
so 26.2's windows entry is accurate.

Extracted from the 26.2 portion of #1287,
which additionally carries unrelated fixes for 1.13.1, 1.14.2, 1.9.1
and a broader commands.json refresh across older versions. This commit
isolates just the 26.2 data so it can be reviewed and merged
independently of that larger changeset.

effects/enchantments/instruments are borrowed from 26.1 since those
registries are unchanged in 26.2.

Full mocha suite passes (1887 passing, 1 pending, 0 failing).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Fix sulfur_cube_content type reuse; restore ItemStackTemplate regression

Addresses review feedback on this PR:

- sulfur_cube_content duplicated ItemStackTemplate's shape inline
  instead of referencing it. Verified against the real 26.2 server jar:
  net.minecraft.world.item.component.SulfurCubeContent is a record with
  a single field of type net.minecraft.world.item.ItemStackTemplate (no
  array wrapper) — Mojang's own internal type has the same name and
  shape minecraft-data already used. Now just `if sulfur_cube_content:
  ItemStackTemplate`.

- packet_spectator_action: verified this is a genuine rename, not a
  new packet alongside the old one. Decompiled the real 26.2 server
  jar: net/minecraft/network/protocol/game/ServerboundSpectatorActionPacket
  exists (a Record with one field, `OptionalInt spectateEntityId`,
  handled via `handleSpectatorAction`); no ServerboundSpectateEntityPacket
  class exists anywhere in the jar. Matches this PR's existing encoding
  (`entityId?: varint`) exactly — no data change needed for this one.

- Separately: rebasing this branch onto pc_26_2 silently regressed
  #1267's ItemStackTemplate fix throughout data/pc/latest/proto.yml —
  git's merge applied both sides' overlapping edits to this file in a
  way that dropped #1267's hunks without flagging a conflict. Restored
  all of it (intangible_projectile NBT, and ItemStackTemplate at
  use_remainder/charged_projectiles/bundle_contents/container/particle
  item/SlotDisplay item_stack/advancement icon) and regenerated
  data/pc/26.2/protocol.json from the corrected proto.yml.

Full test suite still green: 1887 passing, 1 pending, 0 failing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Address review findings: teleport regression, spectator_action encoding, cubemob metadata, bee size, knockback_resistance min

All five verified by decompiling the real 26.2 server jar
(versions/26.2/server-26.2.jar) with CFR, cross-referenced against
extremeheat/extracted_minecraft_data where cited in review.

- packet_entity_teleport: the pc_26_2 rebase also silently dropped
  #1273's 1.21.2+ layout fix (dx/dy/dz, f32 yaw/pitch,
  PositionUpdateRelatives flags) the same way it dropped #1267's
  ItemStackTemplate fix. Restored — ClientboundTeleportEntityPacket
  still uses PositionMoveRotation in 26.2, confirmed against the real
  class.

- packet_spectator_action: entityId?: varint (protodef presence-byte
  optional) doesn't match vanilla's wire format. Decompiled
  ByteBufCodecs.OPTIONAL_VAR_INT: it maps a single raw VarInt directly
  (no separate presence byte) — 0 = absent, n = entity id (n - 1).
  Changed to `entityId: optvarint`, the same sentinel-varint alias
  already used for entity metadata's optional_block_state/
  optional_unsigned_int.

- data/pc/26.2/entities.json: slime/magma_cube/sulfur_cube were
  missing the `baby`/`age_locked` metadata keys AgeableMob defines
  (confirmed via SynchedEntityData.defineId call order in
  AgeableMob/AbstractCubeMob/SulfurCube bytecode), and sulfur_cube had
  max_fuse/from_bucket swapped. Fixed all three to
  mob_flags, baby, age_locked, size, max_fuse, from_bucket.

- bee width/height: EntityTypes.BEE registers .sized(0.55f, 0.5f) in
  26.2; entities.json still had 26.1's 0.7/0.6. Fixed.

- data/pc/26.2/attributes.json: knockbackResistance's min was 0.0;
  Attributes.KNOCKBACK_RESISTANCE registers RangedAttribute(default
  0.0, min -2.0, max 1.0). Fixed.

Full test suite still green: 1887 passing, 1 pending, 0 failing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Address review: preserve trial_spawner particle naming, fix pickaxe material for 26.2

- Revert latest/proto.yml particle enum rename (trial_spawner_detection ->
  trial_spawner_detected_player) to match the naming still used by all
  other proto.yml versions, avoiding an inconsistent one-off rename scoped
  to this PR; regenerate 26.2/protocol.json to match.
- Fix 26.2/blocks.json: 108 ore/obsidian/metal blocks carried
  material: incorrect_for_wooden_tool instead of mineable/pickaxe, which
  made prismarine-block digTime() ~8x too slow for them. Apply the same
  mapping used by #1307 for 1.20.5-26.1 so 26.2 doesn't regress.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>

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.

3 participants