Fixed dogs hurting pvp-protected players.
This commit is contained in:
parent
0fd4324caf
commit
ec87939497
|
|
@ -794,16 +794,50 @@ public class EntityEventHandler implements Listener
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//FEATURE: protect claimed animals, boats, minecarts, and items inside item frames
|
|
||||||
//NOTE: animals can be lead with wheat, vehicles can be pushed around.
|
|
||||||
//so unless precautions are taken by the owner, a resourceful thief might find ways to steal anyway
|
|
||||||
|
|
||||||
//if theft protection is enabled
|
|
||||||
if(event instanceof EntityDamageByEntityEvent)
|
if(event instanceof EntityDamageByEntityEvent)
|
||||||
{
|
{
|
||||||
//don't track in worlds where claims are not enabled
|
//don't track in worlds where claims are not enabled
|
||||||
if(!GriefPrevention.instance.claimsEnabledForWorld(event.getEntity().getWorld())) return;
|
if(!GriefPrevention.instance.claimsEnabledForWorld(event.getEntity().getWorld())) return;
|
||||||
|
|
||||||
|
//protect players from being attacked by other players' pets when protected from pvp
|
||||||
|
if(event.getEntityType() == EntityType.PLAYER)
|
||||||
|
{
|
||||||
|
Player defender = (Player)event.getEntity();
|
||||||
|
|
||||||
|
//if attacker is a pet
|
||||||
|
Entity damager = subEvent.getDamager();
|
||||||
|
if(damager != null && damager instanceof Tameable)
|
||||||
|
{
|
||||||
|
Tameable pet = (Tameable) damager;
|
||||||
|
if(pet.isTamed() && pet.getOwner() != null)
|
||||||
|
{
|
||||||
|
//if defender is NOT in pvp combat and not immune to pvp right now due to recent respawn
|
||||||
|
PlayerData defenderData = GriefPrevention.instance.dataStore.getPlayerData(event.getEntity().getUniqueId());
|
||||||
|
if(!defenderData.pvpImmune && !defenderData.inPvpCombat())
|
||||||
|
{
|
||||||
|
//if defender is not in a protected area
|
||||||
|
Claim defenderClaim = this.dataStore.getClaimAt(defender.getLocation(), false, defenderData.lastClaim);
|
||||||
|
if( defenderClaim != null &&
|
||||||
|
!defenderData.inPvpCombat() &&
|
||||||
|
GriefPrevention.instance.claimIsPvPSafeZone(defenderClaim))
|
||||||
|
{
|
||||||
|
defenderData.lastClaim = defenderClaim;
|
||||||
|
PreventPvPEvent pvpEvent = new PreventPvPEvent(defenderClaim);
|
||||||
|
Bukkit.getPluginManager().callEvent(pvpEvent);
|
||||||
|
|
||||||
|
//if other plugins aren't making an exception to the rule
|
||||||
|
if(!pvpEvent.isCancelled())
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
if(damager instanceof Creature) ((Creature) damager).setTarget(null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//if the damaged entity is a claimed item frame or armor stand, the damager needs to be a player with build trust in the claim
|
//if the damaged entity is a claimed item frame or armor stand, the damager needs to be a player with build trust in the claim
|
||||||
if(subEvent.getEntityType() == EntityType.ITEM_FRAME
|
if(subEvent.getEntityType() == EntityType.ITEM_FRAME
|
||||||
|| subEvent.getEntityType() == EntityType.ARMOR_STAND
|
|| subEvent.getEntityType() == EntityType.ARMOR_STAND
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user