Skip to content

Update the loot tables to the 26.3 format - #1743

Merged
rubensworks merged 1 commit into
master-26from
claude/minecraft-26-3-update-xr1cny
Sep 20, 2026
Merged

rubensworks merged 1 commit into
master-26from
claude/minecraft-26-3-update-xr1cny

Conversation

@rubensworks

Copy link
Copy Markdown
Member

Follow-up to #1738. The 26.3 port compiled and all game tests passed, but the loot tables were left in the pre-26.3 format, which 26.3 accepts without complaint and then ignores.

26.3 replaced the "functions" / "conditions" lists on tables, pools and entries with a single "modifier" / "condition" holder, and renamed the inline "function" / "condition" type keys to "type". Unknown keys are dropped silently, so every loot function and condition in these 16 tables had become a no-op: proxy ids, energy battery contents and machine tanks were no longer copied onto drops, and survives_explosion, match_tool and match_wrench never applied.

The symptom is visible on the current master-26: running the game test server logs

Found loot table element validation problem in {integrateddynamics:blocks/menril_leaves@minecraft:loot_table}.pools[0].entries[0]: Unreachable entry!
Found loot table element validation problem in {integrateddynamics:blocks/menril_log_filled@minecraft:loot_table}.pools[0].entries[0]: Unreachable entry!

The conditions were dropped, so the first entry became unconditional and the alternatives behind it unreachable. Both warnings are gone after this change.

Converting the tables also surfaced two renames that had been hidden behind the silent skip, and that now fail to parse:

  • minecraft:block_state_property is minecraft:match_block, with block/properties renamed to blocks/state (the 6 slab and door tables).
  • Number providers need an explicit type, so a bare {"min": x, "max": y} has to say minecraft:uniform.

I found this while porting EvilCraft, where the same problem made a Dark Tank drop lose its 144000 capacity. Other repos are affected too and will get their own follow-ups.

Validation

  • ./gradlew build passes.
  • ./gradlew runGameTestServer: all 1001 required tests pass, and the two Unreachable entry! warnings are gone.
  • Checked in a dev client with clientdevbridge: breaking a Proxy whose id is 4242 with a Wrench now yields an item carrying proxy_id=4242, where before the change it came out empty. Exactly one drop is produced, so the inverted wrench condition on the second pool correctly suppresses it.

🤖 Generated with Claude Code

https://claude.ai/code/session_01V35MFZ7JSgoLe79J4d1uxf


Generated by Claude Code

26.3 replaced the "functions"/"conditions" lists on tables, pools and
entries with a single "modifier"/"condition" holder, and the inline
"function"/"condition" type keys with "type". The old format parses
without any error and is then ignored, so every loot function and
condition in these tables had silently become a no-op: block entity
data was no longer copied onto drops, and survives_explosion,
match_tool and match_wrench never applied.

Converting them surfaced two more renames that were hidden until now:
block_state_property became match_block, and number providers need an
explicit type instead of a bare min/max pair.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V35MFZ7JSgoLe79J4d1uxf
@coveralls

coveralls commented Sep 20, 2026

Copy link
Copy Markdown

Coverage Status

coverage: 57.032% (+0.09%) from 56.943% — claude/minecraft-26-3-update-xr1cny into master-26

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