Skip to content

Structure Editor v2.0.0 (Minecraft 26.3)

Latest

Choose a tag to compare

@FinnSetchell FinnSetchell released this 18 Sep 12:51

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 from Screen. They would have thrown the moment you opened a jigsaw block. Replaced with Fabric's ScreenEvents, leaving only compile-validated @Accessor mixins.
  • get_structure_palette returned empty for everything. 26.3 writes palette entries as {id, properties}; the reader still asked for Name. Now accepts both.
  • download_structure 404'd on every structure. The generated folder went singular (generated/<ns>/structure/). Falls back to the plural form for older worlds.
  • Stale @Inject strings after the mappings migration, including getPauseWhenEmptySeconds — 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

ResourceLocationIdentifier (Mojang adopted Yarn's name), ChunkPos became a record (unpack/pack, accessor components), displayClientMessage split into overlay/system, StateHolder.getValues() removed, PayloadTypeRegistry.playS2CclientboundPlay. 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_bounds and set_selection_to_structure return sbs_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.