Allow hitting hostile mobs in protected regions.

This commit is contained in:
sk89q 2014-08-24 17:13:27 -07:00
parent 300f69597f
commit 8d29f6971a
2 changed files with 30 additions and 1 deletions

View File

@ -384,8 +384,13 @@ public void onDamageEntity(DamageEntityEvent event) {
boolean canDamage;
String what;
/* Hostile / ambient mob override */
if (Entities.isHostile(event.getEntity()) || Entities.isAmbient(event.getEntity())) {
canDamage = true;
what = "hit that";
/* PVP */
if (event.getEntity() instanceof Player && (attacker = event.getCause().getFirstPlayer()) != null && !attacker.equals(event.getEntity())) {
} else if (event.getEntity() instanceof Player && (attacker = event.getCause().getFirstPlayer()) != null && !attacker.equals(event.getEntity())) {
Player defender = (Player) event.getEntity();
canDamage = query.testBuild(target, associable, DefaultFlag.PVP)

View File

@ -19,10 +19,13 @@
package com.sk89q.worldguard.bukkit.util;
import org.bukkit.entity.Ambient;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Monster;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.Slime;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.entity.Tameable;
import org.bukkit.entity.minecart.ExplosiveMinecart;
@ -125,4 +128,25 @@ public static boolean isFakePlayer(Player player) {
String name = player.getName();
return name.length() >= 3 && name.charAt(0) == '[' && name.charAt(name.length() - 1) == ']';
}
/**
* Test whether an entity is hostile.
*
* @param entity the entity
* @return true if hostile
*/
public static boolean isHostile(Entity entity) {
return entity instanceof Monster || entity instanceof Slime;
}
/**
* Test whether an entity is ambient.
*
* @param entity the entity
* @return true if ambient
*/
public static boolean isAmbient(Entity entity) {
return entity instanceof Ambient;
}
}