Skip to content

Structure Editor v1.4.7

Choose a tag to compare

@FinnSetchell FinnSetchell released this 10 Sep 13:02
· 7 commits to main since this release

The actual fix for cold-chunk saves losing entities. Root cause found with the 1.4.6 diagnostics on Bisect and reproduced/verified locally.

Root cause: the server was still pausing. The v1.3.4 pause fix injected into MinecraftServer.getPauseWhenEmptySeconds, but MinecraftDedicatedServer overrides that getter (reading server.properties directly) and the pause check calls it virtually — so on every dedicated server the injection never ran. Bisect's log: Server empty for 60 seconds, pausing.

While paused, the task queue still drains, so mst's requests appear to work and chunk tickets still load block chunks — but world ticks stop, and entityManager.tick → processPendingLoads is what collects finished entity-file reads. Every chunk sits at PENDING forever (and can never unload), vanilla's saveStructure iterates an empty entity store, and the template is written with zero entities and success: true. A nearby player unpauses the server (why it always worked with someone standing there); the first save after a restart lands inside the grace window (why v1.4.3 "worked once").

Fix: MinecraftDedicatedServerMixin applies the same injection to the override. Both mixins are required. Gated by keep_server_ticking (default on).

Verified on a local Fabric 1.21.10 dedicated server with pause-when-empty-seconds=5 and StructureBlockSaver installed:

  • fix on: 3/3 cold saves of a persistent named wither skeleton captured, no pausing line in 61 s of empty uptime
  • fix off (negative control): server paused at 5 s, same save sat PENDING for 8 s and wrote 0 entities — Bisect's exact fingerprint

Deploy: replace the mst jar (exactly one copy in mods/) and restart. After startup, read_server_log(grep: "pausing") must return nothing; get_chunk_state on a cold chunk after a save must show entity_load: LOADED. Belt-and-braces alternative if you ever run without this mod: pause-when-empty-seconds=0 in server.properties.