From 8d29f6971a8fec007172e0bbae0c1864cae7f723 Mon Sep 17 00:00:00 2001 From: sk89q Date: Sun, 24 Aug 2014 17:13:27 -0700 Subject: [PATCH] Allow hitting hostile mobs in protected regions. --- .../listener/RegionProtectionListener.java | 7 +++++- .../worldguard/bukkit/util/Entities.java | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionProtectionListener.java b/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionProtectionListener.java index 17237d4e..7b81cd29 100644 --- a/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionProtectionListener.java +++ b/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionProtectionListener.java @@ -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) diff --git a/src/main/java/com/sk89q/worldguard/bukkit/util/Entities.java b/src/main/java/com/sk89q/worldguard/bukkit/util/Entities.java index 6e6a955c..0197c9dd 100644 --- a/src/main/java/com/sk89q/worldguard/bukkit/util/Entities.java +++ b/src/main/java/com/sk89q/worldguard/bukkit/util/Entities.java @@ -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; + } + }