mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2025-02-05 06:51:24 +01:00
Fixes projectile damage by block bug
Fixes https://github.com/BentoBoxWorld/BentoBox/issues/1211
This commit is contained in:
parent
b189ebde65
commit
8393784498
@ -83,13 +83,11 @@ public class PVPListener extends FlagListener {
|
||||
user.notify(getFlag(damager.getWorld()).getHintReference());
|
||||
e.setCancelled(true);
|
||||
}
|
||||
} else if (damager instanceof Projectile) {
|
||||
} else if (damager instanceof Projectile && ((Projectile)damager).getShooter() instanceof Player) {
|
||||
// Find out who fired the arrow
|
||||
Projectile p = (Projectile) damager;
|
||||
Entity shooter =(Entity)p.getShooter();
|
||||
if (shooter instanceof Player) {
|
||||
processDamage(e, damager, (Player)shooter, hurtEntity, flag);
|
||||
}
|
||||
Player shooter =(Player)p.getShooter();
|
||||
processDamage(e, damager, shooter, hurtEntity, flag);
|
||||
} else if (damager instanceof Firework && firedFireworks.containsKey(damager)) {
|
||||
Player shooter = firedFireworks.get(damager);
|
||||
processDamage(e, damager, shooter, hurtEntity, flag);
|
||||
|
@ -50,6 +50,7 @@ import org.bukkit.event.entity.PotionSplashEvent;
|
||||
import org.bukkit.event.player.PlayerFishEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.projectiles.BlockProjectileSource;
|
||||
import org.bukkit.projectiles.ProjectileSource;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
import org.junit.After;
|
||||
@ -591,6 +592,45 @@ public class PVPListenerTest {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link PVPListener#onEntityDamage(org.bukkit.event.entity.EntityDamageByEntityEvent)}.
|
||||
*/
|
||||
@Test
|
||||
public void testOnEntityDamagePVPAllowedProjectileNullSource() {
|
||||
Projectile p = mock(Projectile.class);
|
||||
when(p.getShooter()).thenReturn(null);
|
||||
when(p.getLocation()).thenReturn(loc);
|
||||
// PVP is allowed
|
||||
when(island.isAllowed(any())).thenReturn(true);
|
||||
EntityDamageByEntityEvent e = new EntityDamageByEntityEvent(p, player2, EntityDamageEvent.DamageCause.ENTITY_ATTACK,
|
||||
new EnumMap<>(ImmutableMap.of(DamageModifier.BASE, 0D)),
|
||||
new EnumMap<DamageModifier, Function<? super Double, Double>>(ImmutableMap.of(DamageModifier.BASE, Functions.constant(-0.0))));
|
||||
new PVPListener().onEntityDamage(e);
|
||||
// PVP should be allowed
|
||||
assertFalse(e.isCancelled());
|
||||
verify(player, never()).sendMessage(Flags.PVP_OVERWORLD.getHintReference());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link PVPListener#onEntityDamage(org.bukkit.event.entity.EntityDamageByEntityEvent)}.
|
||||
*/
|
||||
@Test
|
||||
public void testOnEntityDamagePVPAllowedProjectileNonEntitySource() {
|
||||
Projectile p = mock(Projectile.class);
|
||||
BlockProjectileSource pSource = mock(BlockProjectileSource.class);
|
||||
when(p.getShooter()).thenReturn(pSource);
|
||||
when(p.getLocation()).thenReturn(loc);
|
||||
// PVP is allowed
|
||||
when(island.isAllowed(any())).thenReturn(true);
|
||||
EntityDamageByEntityEvent e = new EntityDamageByEntityEvent(p, player2, EntityDamageEvent.DamageCause.ENTITY_ATTACK,
|
||||
new EnumMap<>(ImmutableMap.of(DamageModifier.BASE, 0D)),
|
||||
new EnumMap<DamageModifier, Function<? super Double, Double>>(ImmutableMap.of(DamageModifier.BASE, Functions.constant(-0.0))));
|
||||
new PVPListener().onEntityDamage(e);
|
||||
// PVP should be allowed
|
||||
assertFalse(e.isCancelled());
|
||||
verify(player, never()).sendMessage(Flags.PVP_OVERWORLD.getHintReference());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link PVPListener#onFishing(org.bukkit.event.player.PlayerFishEvent)}.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user