The canQuestBeAccepted() method was missing cases for MCCUSTOM and
RLCUSTOM repeat types, causing quests with custom cooldowns to become
permanently inaccessible after first completion. Added the missing
checks using quest.customCooldown for both MC ticks and real-life
milliseconds.
- 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