diff --git a/src/main/kotlin/club/mcscrims/speedhg/kit/listener/KitEventDispatcher.kt b/src/main/kotlin/club/mcscrims/speedhg/kit/listener/KitEventDispatcher.kt index 2cfe086..e5d4180 100644 --- a/src/main/kotlin/club/mcscrims/speedhg/kit/listener/KitEventDispatcher.kt +++ b/src/main/kotlin/club/mcscrims/speedhg/kit/listener/KitEventDispatcher.kt @@ -34,6 +34,7 @@ import org.bukkit.event.entity.EntityExplodeEvent import org.bukkit.event.entity.PlayerDeathEvent import org.bukkit.event.entity.ProjectileHitEvent import org.bukkit.event.entity.ProjectileLaunchEvent +import org.bukkit.event.player.PlayerFishEvent import org.bukkit.event.player.PlayerInteractEvent import org.bukkit.event.player.PlayerItemBreakEvent import org.bukkit.event.player.PlayerMoveEvent @@ -172,7 +173,10 @@ class KitEventDispatcher( if ( itemInHand.type != active.triggerMaterial ) return - event.isCancelled = true // prevent vanilla block interaction on ability item + // Cancel immediately — before any further logic — so that items with + // a vanilla right-click action (e.g. FISHING_ROD casting a bobber) + // are suppressed on the same tick and no animation reaches other clients. + event.isCancelled = true val chargeData = kitManager.getChargeData( player ) ?: return @@ -278,6 +282,26 @@ class KitEventDispatcher( event.isCancelled = true } + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = false) + fun onFishingRodCast( + event: PlayerFishEvent + ) { + if ( !isIngame() ) return + if ( event.state != PlayerFishEvent.State.IN_GROUND && + event.state != PlayerFishEvent.State.FISHING ) return + + val player = event.player + val kit = kitManager.getSelectedKit( player ) ?: return + val playstyle = kitManager.getSelectedPlaystyle( player ) + val active = kit.getActiveAbility( playstyle ) + + if ( active.triggerMaterial != Material.FISHING_ROD ) return + + // Angel ist Ability-Trigger → Bobber-Wurf unterdrücken + event.isCancelled = true + event.hook.remove() + } + @EventHandler fun onSnowballHit( event: ProjectileHitEvent