Skip to content

Structure Editor v1.4.4

Choose a tag to compare

@FinnSetchell FinnSetchell released this 10 Sep 09:40
· 13 commits to main since this release

Follow-up to v1.4.3, which was tested against the 1x4x1 fortress_guard repro with nobody online: the first cold save captured the mob, but the next two saves on the same chunks (tickets released, area reading cold again) captured zero. So it was not a timing race a sleep could paper over — once a chunk has been loaded and released, re-adding a FORCED ticket does not reliably get its entity sections re-read.

What changed

The wait between the ticket phase and the save phase is now a poll on the actual condition instead of a fixed 1 s sleep. Two new mixins expose ServerWorld.entityManager and ServerEntityManager.isLoaded(long) / readIfFresh(long). Every 50 ms the poll hops to the server thread, checks isLoaded for every chunk any target needs, and calls readIfFresh on any that isn't — that schedules the entity-file read only when the section is still FRESH, so it is a no-op on an already-loaded chunk and cannot duplicate entities. Bounded at 8 s.

Diagnostics in the response

Top level: entity_sections_loaded (bool), entity_wait_ms.
Per structure block: entities_captured, chunks, chunks_entity_sections_loaded, chunks_ticking_ready.

A zero entities_captured now arrives with the chunk state that explains it, instead of a silent success: true.

Caveat: the mixin target names come straight from the 1.21.10 yarn mapping, but @Accessor/@Invoker targets are only fully validated when the mixin applies at server start. If the server refuses to start on this build, it's a target-name mismatch and a one-line fix — report the startup log line.