GlymeraTameFly

Tame, ride, and fly a huge amount of animals in Hytale with 50 new tameable creatures.

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:
    1. Server stop/restart while flying: shutdown() only cleared the state map without removing the blocks. Barriers stayed in the world permanently.
    2. 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.
    3. 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 breakBlock at world-A coordinates inside world B — the real barriers in world A were orphaned.

Technical Details

  • FlyState now carries a worldName field. The cleanup branch in processFlyingMounts skips states whose home world does not match the currently ticking world.getName(), so only the actual flying world performs cleanup.
  • New helper cleanupStateInHomeWorld tears down the old platform on a world switch (e.g. /bw tp) via world.execute() on the source world's thread.
  • removeAllBlocks is now retry-safe: positions are only removed from placedBlocks once getBlock confirms the block is air after the breakBlock call. Unloaded chunks are silently skipped and retried on the next tick.
  • FlyState stays in the flyingPlayers map 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.json in the plugin data directory: shutdown() serializes all open states (UUID → worldName + placedBlocks). start() loads them back into flyingPlayers. The normal flight tick then notices the missing mount and clears the platform on the world thread once the chunks are available. Synchronous cleanup inside shutdown() does not work because world.breakBlock queues tasks on the world thread, and the queue is no longer processed during shutdown.
  • FlyCommand (/fly toggle) 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.