diff --git a/src/main/java/io/github/townyadvanced/townycombat/listeners/TownyCombatBukkitEventListener.java b/src/main/java/io/github/townyadvanced/townycombat/listeners/TownyCombatBukkitEventListener.java index 21950d7..be441aa 100644 --- a/src/main/java/io/github/townyadvanced/townycombat/listeners/TownyCombatBukkitEventListener.java +++ b/src/main/java/io/github/townyadvanced/townycombat/listeners/TownyCombatBukkitEventListener.java @@ -20,6 +20,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.event.inventory.PrepareItemCraftEvent; @@ -132,7 +133,8 @@ public void on (PlayerJoinEvent event) { public void on (EntityDamageEvent event) { if (!TownyCombatSettings.isTownyCombatEnabled()) return; - if (event.getEntity() instanceof AbstractHorse) { + // When it is a horse and it is not being hurt by a bush/cactus, try to prevent the rearing. + if (event.getEntity() instanceof AbstractHorse && !instantHorseDeathCause(event.getCause())) { //No rearing when horse is damaged. Do this by cancelling the event, then applying the same damage in a simple set operation. if(TownyCombatSettings.isHorseRearingPreventionEnabled() && event.getEntity().getPassengers().size() > 0 @@ -145,6 +147,14 @@ public void on (EntityDamageEvent event) { } } + /** + * @param cause DamageCause + * @return true if this is a DamageCause that shreds horse health. + */ + private boolean instantHorseDeathCause(DamageCause cause) { + return cause.equals(DamageCause.CONTACT) || cause.equals(DamageCause.FIRE); + } + @EventHandler (ignoreCancelled = true) public void on (EntityDamageByEntityEvent event) { if (!TownyCombatSettings.isTownyCombatEnabled())