Minecraft 26.3 support. This build runs only on 26.3 — for a 1.21.10 server use the 1.21.10 branch, which still has the last 1.4.x build.
Not a version bump: 26.1 was the first unobfuscated Minecraft release and Fabric discontinued Yarn, so the mod was migrated to Mojang mappings and the non-remapping net.fabricmc.fabric-loom. Gradle 9.5.1, Java 25, fabric-loader 0.19.5, fabric-api 0.160.7+26.3.
Verified
Against a real 26.3 dedicated server with no players online:
- 33/33 endpoint checks — scans, containers, block-entity NBT, jigsaw/structure edits,
set_blocks/replace_blocks/undo, selections, save/palette/download, file write, and the three SBS-backed lookups. - 3/3 cold-chunk entity saves — a persistent named mob in an unloaded chunk is captured every time (
FRESH → LOADED, ~60 ms), confirmed in the written NBT. The empty-server pause fix carries over intact. - Dev client starts clean with no mixin failures.
Bugs found and fixed during the port
Each of these compiled fine and would have failed only at runtime:
- Screen guards targeted an inherited method. The jigsaw/structure GUI guards injected into
tick(), which neither screen declares — it comes fromScreen. They would have thrown the moment you opened a jigsaw block. Replaced with Fabric'sScreenEvents, leaving only compile-validated@Accessormixins. get_structure_palettereturned empty for everything. 26.3 writes palette entries as{id, properties}; the reader still asked forName. Now accepts both.download_structure404'd on every structure. The generated folder went singular (generated/<ns>/structure/). Falls back to the plural form for older worlds.- Stale
@Injectstrings after the mappings migration, includinggetPauseWhenEmptySeconds— left alone, that would have silently reverted the empty-server pause fix and reintroduced the entity-loss bug from v1.4.7.
Notable API changes handled
ResourceLocation → Identifier (Mojang adopted Yarn's name), ChunkPos became a record (unpack/pack, accessor components), displayClientMessage split into overlay/system, StateHolder.getValues() removed, PayloadTypeRegistry.playS2C → clientboundPlay. Client rendering moved to vanilla's new gizmo system, since GuiGraphics and MultiBufferSource no longer exist.
Notes
- StructureBlockSaver needs its own 26.3 port. Without it on the world,
list_structure_blocks,find_structure_boundsandset_selection_to_structurereturnsbs_tracker_missing. The reader itself is verified working on 26.3 against a tracker file. - The in-world selection-box rendering is not visually verified — a dedicated-server harness can't draw. It compiles and initialises cleanly; worth a look in-game.
- The MCP server half is version-agnostic (it only speaks HTTP to the mod), so it does not need rebuilding when switching Minecraft versions.