Prioritize tamed owners over entity targets.

Fixes #1587.
This commit is contained in:
wizjany 2020-06-08 13:06:45 -04:00
parent 868089b44f
commit 6c5380ba0b
2 changed files with 10 additions and 4 deletions

View File

@ -284,12 +284,12 @@ private void addAll(@Nullable Object... element) {
} else if (o instanceof AreaEffectCloud) {
indirect = true;
addAll(((AreaEffectCloud) o).getSource());
} else if (o instanceof Creature && ((Creature) o).getTarget() != null) {
indirect = true;
addAll(((Creature) o).getTarget());
} else if (o instanceof Tameable) {
indirect = true;
addAll(((Tameable) o).getOwner());
} else if (o instanceof Creature && ((Creature) o).getTarget() != null) {
indirect = true;
addAll(((Creature) o).getTarget());
} else if (o instanceof BlockProjectileSource) {
addAll(((BlockProjectileSource) o).getBlock());
}

View File

@ -73,8 +73,10 @@
import org.bukkit.entity.Item;
import org.bukkit.entity.ItemFrame;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Mob;
import org.bukkit.entity.Painting;
import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable;
import org.bukkit.entity.ThrownPotion;
import org.bukkit.entity.minecart.HopperMinecart;
import org.bukkit.event.Cancellable;
@ -832,7 +834,11 @@ public void onEntityDamage(EntityDamageEvent event) {
} else if (damager instanceof Creeper) {
eventToFire.getRelevantFlags().add(Flags.CREEPER_EXPLOSION);
}
Events.fireToCancel(event, eventToFire);
if (Events.fireToCancel(event, eventToFire)) {
if (damager instanceof Tameable && damager instanceof Mob) {
((Mob) damager).setTarget(null);
}
}
// Item use event with the item in hand
// Older blacklist handler code used this, although it suffers from