Add several hostile non-monsters (#927)
* Add a couple of new/missed hostile cases * "Zoo" friendliness * Prevent food attack vector for neutral animals
This commit is contained in:
parent
81cfc8f2d9
commit
766b34a970
|
|
@ -23,6 +23,7 @@ import me.ryanhamshire.GriefPrevention.events.ProtectDeathDropsEvent;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.NamespacedKey;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.World.Environment;
|
import org.bukkit.World.Environment;
|
||||||
|
|
@ -40,11 +41,14 @@ import org.bukkit.entity.Item;
|
||||||
import org.bukkit.entity.LightningStrike;
|
import org.bukkit.entity.LightningStrike;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Llama;
|
import org.bukkit.entity.Llama;
|
||||||
|
import org.bukkit.entity.Mob;
|
||||||
import org.bukkit.entity.Monster;
|
import org.bukkit.entity.Monster;
|
||||||
import org.bukkit.entity.Mule;
|
import org.bukkit.entity.Mule;
|
||||||
|
import org.bukkit.entity.Panda;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Projectile;
|
import org.bukkit.entity.Projectile;
|
||||||
import org.bukkit.entity.Rabbit;
|
import org.bukkit.entity.Rabbit;
|
||||||
|
import org.bukkit.entity.Slime;
|
||||||
import org.bukkit.entity.Tameable;
|
import org.bukkit.entity.Tameable;
|
||||||
import org.bukkit.entity.ThrownPotion;
|
import org.bukkit.entity.ThrownPotion;
|
||||||
import org.bukkit.entity.Vehicle;
|
import org.bukkit.entity.Vehicle;
|
||||||
|
|
@ -70,6 +74,7 @@ import org.bukkit.event.entity.EntityInteractEvent;
|
||||||
import org.bukkit.event.entity.EntityPortalEnterEvent;
|
import org.bukkit.event.entity.EntityPortalEnterEvent;
|
||||||
import org.bukkit.event.entity.EntityPortalExitEvent;
|
import org.bukkit.event.entity.EntityPortalExitEvent;
|
||||||
import org.bukkit.event.entity.EntityShootBowEvent;
|
import org.bukkit.event.entity.EntityShootBowEvent;
|
||||||
|
import org.bukkit.event.entity.EntityTargetEvent;
|
||||||
import org.bukkit.event.entity.ExpBottleEvent;
|
import org.bukkit.event.entity.ExpBottleEvent;
|
||||||
import org.bukkit.event.entity.ItemMergeEvent;
|
import org.bukkit.event.entity.ItemMergeEvent;
|
||||||
import org.bukkit.event.entity.ItemSpawnEvent;
|
import org.bukkit.event.entity.ItemSpawnEvent;
|
||||||
|
|
@ -83,6 +88,7 @@ import org.bukkit.event.weather.LightningStrikeEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.metadata.FixedMetadataValue;
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
import org.bukkit.metadata.MetadataValue;
|
import org.bukkit.metadata.MetadataValue;
|
||||||
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
import org.bukkit.projectiles.ProjectileSource;
|
import org.bukkit.projectiles.ProjectileSource;
|
||||||
|
|
@ -102,11 +108,13 @@ public class EntityEventHandler implements Listener
|
||||||
//convenience reference for the singleton datastore
|
//convenience reference for the singleton datastore
|
||||||
private DataStore dataStore;
|
private DataStore dataStore;
|
||||||
GriefPrevention instance;
|
GriefPrevention instance;
|
||||||
|
private final NamespacedKey luredByPlayer;
|
||||||
|
|
||||||
public EntityEventHandler(DataStore dataStore, GriefPrevention plugin)
|
public EntityEventHandler(DataStore dataStore, GriefPrevention plugin)
|
||||||
{
|
{
|
||||||
this.dataStore = dataStore;
|
this.dataStore = dataStore;
|
||||||
instance = plugin;
|
instance = plugin;
|
||||||
|
luredByPlayer = new NamespacedKey(plugin, "lured_by_player");
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
|
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
|
||||||
|
|
@ -657,18 +665,41 @@ public class EntityEventHandler implements Listener
|
||||||
if (entity instanceof Monster) return true;
|
if (entity instanceof Monster) return true;
|
||||||
|
|
||||||
EntityType type = entity.getType();
|
EntityType type = entity.getType();
|
||||||
if (type == EntityType.GHAST || type == EntityType.MAGMA_CUBE || type == EntityType.SHULKER || type == EntityType.POLAR_BEAR)
|
if (type == EntityType.GHAST || type == EntityType.MAGMA_CUBE || type == EntityType.SHULKER)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
if (type == EntityType.SLIME)
|
||||||
|
return ((Slime) entity).getSize() > 0;
|
||||||
|
|
||||||
if (type == EntityType.RABBIT)
|
if (type == EntityType.RABBIT)
|
||||||
{
|
return ((Rabbit) entity).getRabbitType() == Rabbit.Type.THE_KILLER_BUNNY;
|
||||||
Rabbit rabbit = (Rabbit) entity;
|
|
||||||
if (rabbit.getRabbitType() == Rabbit.Type.THE_KILLER_BUNNY) return true;
|
if (type == EntityType.PANDA)
|
||||||
}
|
return ((Panda) entity).getMainGene() == Panda.Gene.AGGRESSIVE;
|
||||||
|
|
||||||
|
if (type == EntityType.HOGLIN || type == EntityType.POLAR_BEAR)
|
||||||
|
return !entity.getPersistentDataContainer().has(luredByPlayer, PersistentDataType.BYTE) && ((Mob) entity).getTarget() != null;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tag passive animals that can become aggressive so we can tell whether or not they are hostile later
|
||||||
|
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
|
||||||
|
public void onEntityTarget(EntityTargetEvent event)
|
||||||
|
{
|
||||||
|
if (!GriefPrevention.instance.claimsEnabledForWorld(event.getEntity().getWorld())) return;
|
||||||
|
|
||||||
|
EntityType entityType = event.getEntityType();
|
||||||
|
if (entityType != EntityType.HOGLIN && entityType != EntityType.POLAR_BEAR)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (event.getReason() == EntityTargetEvent.TargetReason.TEMPT)
|
||||||
|
event.getEntity().getPersistentDataContainer().set(luredByPlayer, PersistentDataType.BYTE, (byte) 1);
|
||||||
|
else
|
||||||
|
event.getEntity().getPersistentDataContainer().remove(luredByPlayer);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//when an entity is damaged
|
//when an entity is damaged
|
||||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
|
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
|
||||||
public void onEntityDamage(EntityDamageEvent event)
|
public void onEntityDamage(EntityDamageEvent event)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user