Two issues were causing the bug:
1. GuiDialogInteract.close() called stopAllSounds() unconditionally,
which stopped Bard music even when the dialog had no sound or
when a different Bard was playing nearby.
2. MusicController.stopMusic() didn't set playDelay, allowing Bards
to immediately restart their music after dialog close.
Changes:
- MusicController.stopMusic() now sets playDelay=20 and clears entity
reference to prevent immediate music restart
- Added MusicController.stopSound(key) to stop specific sounds
- Dialog GUIs now track their dialog sound and only stop that on close,
preserving Bard music and other sounds
- Player logout: Dismount from NPC mount before logout to prevent
orphaned mount state (ServerTickHandler)
- Teleportation: Dismount before cross-dimension teleport to prevent
mount being left behind in old dimension (NoppesUtilPlayer)
- Dead rider: Validate rider is alive, dismount dead/invalid riders
to prevent stuck mount state (NPCMountUtil)
- Role disable: Dismount rider when mount role is disabled to prevent
mounted player on non-mount NPC (RoleMount)
- Remove all velocityChanged=true flags from mount movement code
(NPCMountUtil, EntityNPCInterface, EntityNPCFlying)
- Make performMountedMovement physics server-side only like vanilla horse
- Remove syncMountedRiderVelocity method that forced rider velocity packets
- Fix ground movement to not reset motionY every tick
- Let Minecraft's entity tracker handle position sync naturally
The jitter was caused by S12PacketEntityVelocity being sent every tick,
which constantly reset client interpolation. Vanilla horses/boats never
set velocityChanged and rely on the entity tracker for smooth sync.
- Fix category search logic for Quest/Dialog/Transport tabs that was
incorrectly checking selectedCategory.isEmpty() before filtering,
which cleared the category list instead of filtering it
- Add resetScroll() calls to all search methods so scroll position
resets when search results change
- Remove server-side check for setAIMoveSpeed to fix client prediction desync on ground mounts
- Increase air strafe factor for flying mounts to match ground speed feel