From 4c2a19c6bd3207e7933de88c68f4c6cfb29cbb9a Mon Sep 17 00:00:00 2001 From: 502647092 Date: Fri, 25 Sep 2015 11:34:49 +0800 Subject: [PATCH] add new flag... Signed-off-by: 502647092 --- .../flag/ResidenceAnimalKilling.java | 57 +++++++++++++++++++ .../residence/protection/EntityManager.java | 38 +++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 src/main/java/com/bekvon/bukkit/residence/listeners/flag/ResidenceAnimalKilling.java create mode 100644 src/main/java/com/bekvon/bukkit/residence/protection/EntityManager.java diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/flag/ResidenceAnimalKilling.java b/src/main/java/com/bekvon/bukkit/residence/listeners/flag/ResidenceAnimalKilling.java new file mode 100644 index 0000000..b1fa17c --- /dev/null +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/flag/ResidenceAnimalKilling.java @@ -0,0 +1,57 @@ +package com.bekvon.bukkit.residence.listeners.flag; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.EntityManager; +import com.bekvon.bukkit.residence.protection.FlagPermissions; + +public class ResidenceAnimalKilling implements Listener { + EntityManager entitymanager; + Residence plugin; + + public ResidenceAnimalKilling(final Residence plugin) { + this.plugin = plugin; + this.entitymanager = plugin.getEntityManager(); + FlagPermissions.addFlag("animalkilling"); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onAnimalKilling(final EntityDamageByEntityEvent event) { + final Entity damager = event.getDamager(); + if ((!(damager instanceof Arrow)) && (!(damager instanceof Player))) { + return; + } + Player cause; + if ((damager instanceof Arrow) && (!(((Arrow) damager).getShooter() instanceof Player))) { + return; + } else if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Arrow) damager).getShooter(); + } + + if (plugin.isResAdminOn(cause)) { + return; + } + + final Entity entity = event.getEntity(); + final ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); + + if (res != null && !res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) { + if (entitymanager.isAnimal(entity)) { + cause.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); + event.setCancelled(true); + } + } + } + +} diff --git a/src/main/java/com/bekvon/bukkit/residence/protection/EntityManager.java b/src/main/java/com/bekvon/bukkit/residence/protection/EntityManager.java new file mode 100644 index 0000000..6cdbedb --- /dev/null +++ b/src/main/java/com/bekvon/bukkit/residence/protection/EntityManager.java @@ -0,0 +1,38 @@ +package com.bekvon.bukkit.residence.protection; + +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Ghast; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Monster; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Slime; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; + +import com.bekvon.bukkit.residence.Residence; + +public class EntityManager { + Residence plugin; + + public EntityManager(final Residence plugin) { + this.plugin = plugin; + } + + public boolean isAnimal(final Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig || ent instanceof Sheep + || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager || (plugin.is1_8() && ent instanceof Rabbit)); + } + + public boolean isMonster(final Entity ent) { + return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast); + } +}