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.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.World.Environment;
|
||||
|
|
@ -40,11 +41,14 @@ import org.bukkit.entity.Item;
|
|||
import org.bukkit.entity.LightningStrike;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Llama;
|
||||
import org.bukkit.entity.Mob;
|
||||
import org.bukkit.entity.Monster;
|
||||
import org.bukkit.entity.Mule;
|
||||
import org.bukkit.entity.Panda;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.entity.Rabbit;
|
||||
import org.bukkit.entity.Slime;
|
||||
import org.bukkit.entity.Tameable;
|
||||
import org.bukkit.entity.ThrownPotion;
|
||||
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.EntityPortalExitEvent;
|
||||
import org.bukkit.event.entity.EntityShootBowEvent;
|
||||
import org.bukkit.event.entity.EntityTargetEvent;
|
||||
import org.bukkit.event.entity.ExpBottleEvent;
|
||||
import org.bukkit.event.entity.ItemMergeEvent;
|
||||
import org.bukkit.event.entity.ItemSpawnEvent;
|
||||
|
|
@ -83,6 +88,7 @@ import org.bukkit.event.weather.LightningStrikeEvent;
|
|||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
import org.bukkit.metadata.MetadataValue;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.projectiles.ProjectileSource;
|
||||
|
|
@ -102,11 +108,13 @@ public class EntityEventHandler implements Listener
|
|||
//convenience reference for the singleton datastore
|
||||
private DataStore dataStore;
|
||||
GriefPrevention instance;
|
||||
private final NamespacedKey luredByPlayer;
|
||||
|
||||
public EntityEventHandler(DataStore dataStore, GriefPrevention plugin)
|
||||
{
|
||||
this.dataStore = dataStore;
|
||||
instance = plugin;
|
||||
luredByPlayer = new NamespacedKey(plugin, "lured_by_player");
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
|
||||
|
|
@ -657,18 +665,41 @@ public class EntityEventHandler implements Listener
|
|||
if (entity instanceof Monster) return true;
|
||||
|
||||
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;
|
||||
|
||||
if (type == EntityType.SLIME)
|
||||
return ((Slime) entity).getSize() > 0;
|
||||
|
||||
if (type == EntityType.RABBIT)
|
||||
{
|
||||
Rabbit rabbit = (Rabbit) entity;
|
||||
if (rabbit.getRabbitType() == Rabbit.Type.THE_KILLER_BUNNY) return true;
|
||||
}
|
||||
return ((Rabbit) entity).getRabbitType() == Rabbit.Type.THE_KILLER_BUNNY;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
// 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
|
||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
|
||||
public void onEntityDamage(EntityDamageEvent event)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user