File Details
GlymeraTameFly-6.0.0.jar
- R
- Apr 19, 2026
- 152.80 KB
- 376
- Early Access
File Name
GlymeraTameFly-6.0.0.jar
Supported Versions
- Early Access
GlymeraTameFly - Changelog
v6.0.0 (2026-04-19)
Bug Fixes
- Flight platform barriers left behind: Barrier blocks (the temporary 3x3 platform the flight tick places under a flying mount) were not being removed under certain conditions. Three scenarios were affected:
- Server stop/restart while flying:
shutdown()only cleared the state map without removing the blocks. Barriers stayed in the world permanently. - Player changes world while flying (e.g. via
/bw tp): the old world never removed its barriers; the player got a fresh state in the new world with no link to the blocks left behind in the old one. - Multi-world tick race: the 50ms flight tick ran per world but shared a single global state map. World B's tick saw a player flying in world A as "not mounted", wiped the state, and called
breakBlockat world-A coordinates inside world B — the real barriers in world A were orphaned.
- Server stop/restart while flying:
Technical Details
FlyStatenow carries aworldNamefield. The cleanup branch inprocessFlyingMountsskips states whose home world does not match the currently tickingworld.getName(), so only the actual flying world performs cleanup.- New helper
cleanupStateInHomeWorldtears down the old platform on a world switch (e.g./bw tp) viaworld.execute()on the source world's thread. removeAllBlocksis now retry-safe: positions are only removed fromplacedBlocksoncegetBlockconfirms the block is air after thebreakBlockcall. Unloaded chunks are silently skipped and retried on the next tick.FlyStatestays in theflyingPlayersmap until every block is verifiably cleared (previously the state was removed immediately on dismount, so failing chunk loads lost the positions forever).- Persistence via
flystate.jsonin the plugin data directory:shutdown()serializes all open states (UUID → worldName + placedBlocks).start()loads them back intoflyingPlayers. The normal flight tick then notices the missing mount and clears the platform on the world thread once the chunks are available. Synchronous cleanup insideshutdown()does not work becauseworld.breakBlockqueues tasks on the world thread, and the queue is no longer processed during shutdown. FlyCommand(/flytoggle) now also passes the current world name when creating a new state.
Known Limitations
- Barriers that were already orphaned in the world under v5.0.0 or earlier cannot be cleaned up retroactively by v6.0.0 — they are not tracked anywhere. A one-time manual removal (breaking or blasting them) is required. Any state created from v6.0.0 onwards cleans up correctly.