Search in sources :

Example 1 with IronGolem

use of org.bukkit.entity.IronGolem in project EliteMobs by MagmaGuy.

the class MobScanner method scanMobs.

public void scanMobs(int passiveStackAmount) {
    for (World world : worldList) {
        Iterator<LivingEntity> iterator = world.getLivingEntities().iterator();
        while (iterator.hasNext()) {
            Entity entity = iterator.next();
            if (ValidAgressiveMobFilter.ValidAgressiveMobFilter(entity)) {
                //scan for naturally/command/plugin spawned EliteMobs
                if (entity.hasMetadata(MetadataHandler.ELITE_MOB_MD) && entity.getMetadata(MetadataHandler.ELITE_MOB_MD).get(0).asInt() != 1 && ((Damageable) entity).getMaxHealth() == DefaultMaxHealthGuesser.defaultMaxHealthGuesser(entity)) {
                    HealthHandler.naturalAgressiveHealthHandler(entity, entity.getMetadata(MetadataHandler.ELITE_MOB_MD).get(0).asInt());
                    customAggressiveName(entity);
                    PowerHandler.powerHandler(entity);
                    ArmorHandler.ArmorHandler(entity);
                }
                //scan for stacked EliteMobs
                if (ConfigValues.defaultConfig.getBoolean("Allow aggressive EliteMobs") && ConfigValues.defaultConfig.getBoolean("Aggressive mob stacking") && !entity.hasMetadata(MetadataHandler.FORBIDDEN_MD)) {
                    if (!(entity.hasMetadata(MetadataHandler.ELITE_MOB_MD) && entity.getMetadata(MetadataHandler.ELITE_MOB_MD).get(0).asInt() >= ConfigValues.defaultConfig.getInt("Aggressive mob stacking cap")) && !entity.hasMetadata(MetadataHandler.FORBIDDEN_MD)) {
                        scanValidAggressiveLivingEntity(entity);
                    }
                    if (entity.hasMetadata(MetadataHandler.ELITE_MOB_MD)) {
                        PowerHandler.powerHandler(entity);
                        ArmorHandler.ArmorHandler(entity);
                    }
                }
            }
            //scan for passive mobs
            if (ConfigValues.defaultConfig.getBoolean("Allow Passive EliteMobs")) {
                //scan for passive mobs that might have lost their metadata
                if (ValidPassiveMobFilter.ValidPassiveMobFilter(entity) && ((LivingEntity) entity).getMaxHealth() != DefaultMaxHealthGuesser.defaultMaxHealthGuesser(entity) && ((LivingEntity) entity).getMaxHealth() == DefaultMaxHealthGuesser.defaultMaxHealthGuesser(entity) * ConfigValues.defaultConfig.getInt("Passive EliteMob stack amount")) {
                    customPassiveName(entity, plugin);
                }
                //scan for new passive supermobs
                if (ValidPassiveMobFilter.ValidPassiveMobFilter(entity) && !entity.hasMetadata(MetadataHandler.PASSIVE_ELITE_MOB_MD)) {
                    scanValidPassiveLivingEntity(entity);
                }
                //spawn chicken eggs, really wish there were an event for this
                ChickenHandler.superEggs(entity, passiveStackAmount);
            }
            //scan for iron golems with missing metadata
            if (!entity.hasMetadata(MetadataHandler.ELITE_MOB_MD) && entity instanceof IronGolem && ((IronGolem) entity).getMaxHealth() != DefaultMaxHealthGuesser.defaultMaxHealthGuesser(entity)) {
                entity.setMetadata(MetadataHandler.ELITE_MOB_MD, new FixedMetadataValue(plugin, ScalingFormula.reversePowerFormula(((IronGolem) entity).getMaxHealth(), DefaultMaxHealthGuesser.defaultMaxHealthGuesser(entity))));
                customAggressiveName(entity);
            }
        }
    }
}
Also used : LivingEntity(org.bukkit.entity.LivingEntity) Entity(org.bukkit.entity.Entity) LivingEntity(org.bukkit.entity.LivingEntity) Damageable(org.bukkit.entity.Damageable) FixedMetadataValue(org.bukkit.metadata.FixedMetadataValue) IronGolem(org.bukkit.entity.IronGolem) World(org.bukkit.World)

Example 2 with IronGolem

use of org.bukkit.entity.IronGolem in project EliteMobs by MagmaGuy.

the class DoubleHealth method applyPowers.

@Override
public void applyPowers(Entity entity) {
    if (!(entity instanceof IronGolem)) {
        entity.setMetadata(powerMetadata, new FixedMetadataValue(plugin, true));
        MinorPowerPowerStance minorPowerPowerStance = new MinorPowerPowerStance();
        minorPowerPowerStance.itemEffect(entity);
    }
}
Also used : FixedMetadataValue(org.bukkit.metadata.FixedMetadataValue) MinorPowerPowerStance(com.magmaguy.elitemobs.powerstances.MinorPowerPowerStance) IronGolem(org.bukkit.entity.IronGolem)

Example 3 with IronGolem

use of org.bukkit.entity.IronGolem in project Village_Defense by Plajer.

the class GolemBuster method damageEntity.

@Override
public boolean damageEntity(DamageSource damagesource, float f) {
    if (damagesource != null && damagesource.getEntity() != null && damagesource.getEntity().getBukkitEntity().getType() == EntityType.IRON_GOLEM) {
        this.die();
        this.die();
        org.bukkit.inventory.ItemStack[] itemStack = new org.bukkit.inventory.ItemStack[] { new org.bukkit.inventory.ItemStack(org.bukkit.Material.ROTTEN_FLESH) };
        Bukkit.getServer().getPluginManager().callEvent(new EntityDeathEvent((LivingEntity) this.getBukkitEntity(), Arrays.asList(itemStack), expToDrop));
        IronGolem golem = (IronGolem) damagesource.getEntity().getBukkitEntity();
        // golem.getWorld().createExplosion(golem.getLocation(), 4);
        org.bukkit.entity.Entity primed = golem.getWorld().spawnEntity(golem.getLocation(), EntityType.PRIMED_TNT);
        return true;
    } else {
        super.damageEntity(damagesource, f);
        return false;
    }
}
Also used : LivingEntity(org.bukkit.entity.LivingEntity) EntityDeathEvent(org.bukkit.event.entity.EntityDeathEvent) IronGolem(org.bukkit.entity.IronGolem) EntityIronGolem(net.minecraft.server.v1_12_R1.EntityIronGolem)

Example 4 with IronGolem

use of org.bukkit.entity.IronGolem in project askyblock by tastybento.

the class IslandGuard method onEntityDamage.

/**
 * This method protects players from PVP if it is not allowed and from
 * arrows fired by other players
 *
 * @param e - event
 */
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onEntityDamage(final EntityDamageByEntityEvent e) {
    if (DEBUG) {
        plugin.getLogger().info(e.getEventName());
        plugin.getLogger().info("DEBUG: Damager = " + e.getDamager().toString());
        plugin.getLogger().info("DEBUG: Entitytype = " + e.getEntityType());
        plugin.getLogger().info("DEBUG: Entity = " + e.getEntity());
    }
    // Check world
    if (!inWorld(e.getEntity())) {
        return;
    }
    // Get the island where the damage is occurring
    Island island = plugin.getGrid().getProtectedIslandAt(e.getEntity().getLocation());
    boolean inNether = false;
    if (e.getEntity().getWorld().equals(ASkyBlock.getNetherWorld())) {
        inNether = true;
    }
    // Stop TNT damage if it is disallowed
    if (!Settings.allowTNTDamage && (e.getDamager().getType().equals(EntityType.PRIMED_TNT) || e.getDamager().getType().equals(EntityType.FIREWORK))) {
        if (DEBUG)
            plugin.getLogger().info("DEBUG: cancelling TNT or firework damage");
        e.setCancelled(true);
        return;
    }
    // Check for creeper damage at spawn
    if (island != null && island.isSpawn() && e.getDamager().getType().equals(EntityType.CREEPER) && island.getIgsFlag(SettingsFlag.CREEPER_PAIN)) {
        return;
    }
    // Stop Creeper damager if it is disallowed
    if (!Settings.allowCreeperDamage && e.getDamager().getType().equals(EntityType.CREEPER) && !(e.getEntity() instanceof Player)) {
        e.setCancelled(true);
        return;
    }
    // Stop Creeper griefing if it is disallowed
    if (!Settings.allowCreeperGriefing && e.getDamager().getType().equals(EntityType.CREEPER)) {
        // Now we have to check what the target was
        Creeper creeper = (Creeper) e.getDamager();
        // plugin.getLogger().info("DEBUG: entity being damaged is " + e.getEntity());
        if (creeper.getTarget() instanceof Player) {
            // plugin.getLogger().info("DEBUG: target is a player");
            Player target = (Player) creeper.getTarget();
            // Check if the target is on their own island or not
            if (!plugin.getGrid().locationIsOnIsland(target, e.getEntity().getLocation())) {
                // They are a visitor tsk tsk
                // plugin.getLogger().info("DEBUG: player is a visitor");
                e.setCancelled(true);
                return;
            }
        }
        // Check if this creeper was lit by a visitor
        if (litCreeper.contains(creeper.getUniqueId())) {
            if (DEBUG) {
                plugin.getLogger().info("DEBUG: preventing creeeper from damaging");
            }
            e.setCancelled(true);
            return;
        }
    }
    // Ops can do anything
    if (e.getDamager() instanceof Player) {
        Player p = (Player) e.getDamager();
        if (p.isOp() || VaultHelper.checkPerm(p, Settings.PERMPREFIX + "mod.bypassprotect")) {
            return;
        }
    }
    // Get the real attacker
    boolean flamingArrow = false;
    boolean projectile = false;
    Player attacker = null;
    if (e.getDamager() instanceof Player) {
        attacker = (Player) e.getDamager();
    } else if (e.getDamager() instanceof Projectile) {
        if (DEBUG)
            plugin.getLogger().info("DEBUG: Projectile damage");
        projectile = true;
        // Find out who fired the arrow
        Projectile p = (Projectile) e.getDamager();
        if (DEBUG)
            plugin.getLogger().info("DEBUG: Shooter is " + p.getShooter().toString());
        if (p.getShooter() instanceof Player) {
            attacker = (Player) p.getShooter();
            if (p.getFireTicks() > 0) {
                flamingArrow = true;
            }
            // Check if this is a flaming arrow
            if (DEBUG)
                plugin.getLogger().info("DEBUG: fire ticks = " + p.getFireTicks() + " max = " + p.getMaxFireTicks());
        }
    }
    if (attacker == null) {
        // Not a player
        return;
    }
    // Self damage
    if (e.getEntity() instanceof Player && attacker.equals((Player) e.getEntity())) {
        if (DEBUG)
            plugin.getLogger().info("Self damage!");
        return;
    }
    if (DEBUG)
        plugin.getLogger().info("DEBUG: Another player");
    // Check to see if it's an item frame
    if (e.getEntity() instanceof ItemFrame || e.getEntityType().toString().endsWith("STAND")) {
        if (island != null && (island.getIgsFlag(SettingsFlag.BREAK_BLOCKS) || island.getMembers().contains(attacker.getUniqueId()))) {
            return;
        }
        // Else not allowed
        Util.sendMessage(attacker, ChatColor.RED + plugin.myLocale(attacker.getUniqueId()).islandProtected);
        if (flamingArrow)
            e.getEntity().setFireTicks(0);
        if (projectile)
            e.getDamager().remove();
        e.setCancelled(true);
        return;
    }
    // Monsters being hurt
    if (e.getEntity() instanceof Monster || e.getEntity() instanceof Slime || e.getEntity() instanceof Squid) {
        // Normal island check
        if (island != null && island.getMembers().contains(attacker.getUniqueId())) {
            // Members always allowed
            return;
        }
        if (actionAllowed(attacker, e.getEntity().getLocation(), SettingsFlag.HURT_MONSTERS)) {
            // Check for visitors setting creepers alight using flint steel
            if (!Settings.allowCreeperGriefing && e.getEntity() instanceof Creeper) {
                for (ItemStack holding : Util.getPlayerInHandItems(attacker)) {
                    if (holding.getType().equals(Material.FLINT_AND_STEEL)) {
                        // Save this creeper for later when any damage caused by its explosion will be nullified
                        litCreeper.add(e.getEntity().getUniqueId());
                        if (DEBUG) {
                            plugin.getLogger().info("DEBUG: adding to lit creeper set");
                        }
                    }
                }
            }
            return;
        }
        // Not allowed
        Util.sendMessage(attacker, ChatColor.RED + plugin.myLocale(attacker.getUniqueId()).islandProtected);
        if (flamingArrow)
            e.getEntity().setFireTicks(0);
        if (projectile)
            e.getDamager().remove();
        e.setCancelled(true);
        return;
    }
    // Mobs being hurt
    if (e.getEntity() instanceof Animals || e.getEntity() instanceof IronGolem || e.getEntity() instanceof Snowman || e.getEntity() instanceof Villager) {
        if (island != null && (island.getIgsFlag(SettingsFlag.HURT_MOBS) || island.getMembers().contains(attacker.getUniqueId()))) {
            return;
        }
        if (DEBUG)
            plugin.getLogger().info("DEBUG: Mobs not allowed to be hurt. Blocking");
        // Else not allowed
        Util.sendMessage(attacker, ChatColor.RED + plugin.myLocale(attacker.getUniqueId()).islandProtected);
        if (flamingArrow)
            e.getEntity().setFireTicks(0);
        if (projectile)
            e.getDamager().remove();
        e.setCancelled(true);
        return;
    }
    // Establish whether PVP is allowed or not.
    boolean pvp = false;
    if ((inNether && island != null && island.getIgsFlag(SettingsFlag.NETHER_PVP) || (!inNether && island != null && island.getIgsFlag(SettingsFlag.PVP)))) {
        if (DEBUG)
            plugin.getLogger().info("DEBUG: PVP allowed");
        pvp = true;
    }
    // Players being hurt PvP
    if (e.getEntity() instanceof Player) {
        if (pvp) {
            return;
        } else {
            Util.sendMessage(attacker, ChatColor.RED + plugin.myLocale(attacker.getUniqueId()).targetInNoPVPArea);
            if (flamingArrow)
                e.getEntity().setFireTicks(0);
            if (projectile)
                e.getDamager().remove();
            e.setCancelled(true);
            return;
        }
    }
}
Also used : Player(org.bukkit.entity.Player) Creeper(org.bukkit.entity.Creeper) ItemFrame(org.bukkit.entity.ItemFrame) IronGolem(org.bukkit.entity.IronGolem) Slime(org.bukkit.entity.Slime) Island(com.wasteofplastic.askyblock.Island) Projectile(org.bukkit.entity.Projectile) Animals(org.bukkit.entity.Animals) Squid(org.bukkit.entity.Squid) Monster(org.bukkit.entity.Monster) Villager(org.bukkit.entity.Villager) Snowman(org.bukkit.entity.Snowman) ItemStack(org.bukkit.inventory.ItemStack) EventHandler(org.bukkit.event.EventHandler)

Example 5 with IronGolem

use of org.bukkit.entity.IronGolem in project askyblock by tastybento.

the class IslandGuard method onSplashPotionSplash.

/**
 * Checks for splash damage. If there is any to any affected entity and it's not allowed, it won't work on any of them.
 * @param e - event
 */
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onSplashPotionSplash(final PotionSplashEvent e) {
    if (DEBUG) {
        plugin.getLogger().info(e.getEventName());
        plugin.getLogger().info("splash entity = " + e.getEntity());
        plugin.getLogger().info("splash entity type = " + e.getEntityType());
        plugin.getLogger().info("splash affected entities = " + e.getAffectedEntities());
    // plugin.getLogger().info("splash hit entity = " + e.getHitEntity());
    }
    if (!IslandGuard.inWorld(e.getEntity().getLocation())) {
        return;
    }
    // Try to get the shooter
    Projectile projectile = (Projectile) e.getEntity();
    if (DEBUG)
        plugin.getLogger().info("splash shooter = " + projectile.getShooter());
    if (projectile.getShooter() != null && projectile.getShooter() instanceof Player) {
        Player attacker = (Player) projectile.getShooter();
        // Run through all the affected entities
        for (LivingEntity entity : e.getAffectedEntities()) {
            if (DEBUG)
                plugin.getLogger().info("DEBUG: affected splash entity = " + entity);
            // Self damage
            if (attacker.equals(entity)) {
                if (DEBUG)
                    plugin.getLogger().info("DEBUG: Self damage from splash potion!");
                continue;
            }
            Island island = plugin.getGrid().getIslandAt(entity.getLocation());
            boolean inNether = false;
            if (entity.getWorld().equals(ASkyBlock.getNetherWorld())) {
                inNether = true;
            }
            // Monsters being hurt
            if (entity instanceof Monster || entity instanceof Slime || entity instanceof Squid) {
                // Normal island check
                if (island != null && island.getMembers().contains(attacker.getUniqueId())) {
                    // Members always allowed
                    continue;
                }
                if (actionAllowed(attacker, entity.getLocation(), SettingsFlag.HURT_MONSTERS)) {
                    continue;
                }
                // Not allowed
                Util.sendMessage(attacker, ChatColor.RED + plugin.myLocale(attacker.getUniqueId()).islandProtected);
                e.setCancelled(true);
                return;
            }
            // Mobs being hurt
            if (entity instanceof Animals || entity instanceof IronGolem || entity instanceof Snowman || entity instanceof Villager) {
                if (island != null && (island.getIgsFlag(SettingsFlag.HURT_MOBS) || island.getMembers().contains(attacker.getUniqueId()))) {
                    continue;
                }
                if (DEBUG)
                    plugin.getLogger().info("DEBUG: Mobs not allowed to be hurt. Blocking");
                Util.sendMessage(attacker, ChatColor.RED + plugin.myLocale(attacker.getUniqueId()).islandProtected);
                e.setCancelled(true);
                return;
            }
            // Establish whether PVP is allowed or not.
            boolean pvp = false;
            if ((inNether && island != null && island.getIgsFlag(SettingsFlag.NETHER_PVP) || (!inNether && island != null && island.getIgsFlag(SettingsFlag.PVP)))) {
                if (DEBUG)
                    plugin.getLogger().info("DEBUG: PVP allowed");
                pvp = true;
            }
            // Players being hurt PvP
            if (entity instanceof Player) {
                if (pvp) {
                    if (DEBUG)
                        plugin.getLogger().info("DEBUG: PVP allowed");
                    continue;
                } else {
                    if (DEBUG)
                        plugin.getLogger().info("DEBUG: PVP not allowed");
                    Util.sendMessage(attacker, ChatColor.RED + plugin.myLocale(attacker.getUniqueId()).targetInNoPVPArea);
                    e.setCancelled(true);
                    return;
                }
            }
        }
    }
}
Also used : LivingEntity(org.bukkit.entity.LivingEntity) Player(org.bukkit.entity.Player) Animals(org.bukkit.entity.Animals) Squid(org.bukkit.entity.Squid) Monster(org.bukkit.entity.Monster) Villager(org.bukkit.entity.Villager) Snowman(org.bukkit.entity.Snowman) IronGolem(org.bukkit.entity.IronGolem) Slime(org.bukkit.entity.Slime) Island(com.wasteofplastic.askyblock.Island) Projectile(org.bukkit.entity.Projectile) EventHandler(org.bukkit.event.EventHandler)

Aggregations

IronGolem (org.bukkit.entity.IronGolem)19 Player (org.bukkit.entity.Player)9 Villager (org.bukkit.entity.Villager)8 EventHandler (org.bukkit.event.EventHandler)8 LivingEntity (org.bukkit.entity.LivingEntity)7 Animals (org.bukkit.entity.Animals)6 Monster (org.bukkit.entity.Monster)6 Slime (org.bukkit.entity.Slime)6 Snowman (org.bukkit.entity.Snowman)6 Squid (org.bukkit.entity.Squid)6 Projectile (org.bukkit.entity.Projectile)4 EntityDeathEvent (org.bukkit.event.entity.EntityDeathEvent)4 ItemStack (org.bukkit.inventory.ItemStack)4 Island (com.wasteofplastic.acidisland.Island)3 Island (com.wasteofplastic.askyblock.Island)3 FixedMetadataValue (org.bukkit.metadata.FixedMetadataValue)3 MinorPowerPowerStance (com.magmaguy.elitemobs.powerstances.MinorPowerPowerStance)2 UUID (java.util.UUID)2 Creeper (org.bukkit.entity.Creeper)2 Entity (org.bukkit.entity.Entity)2