package me.tyler15555.minibosses.entity; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.EntityAIAttackOnCollide; import net.minecraft.entity.ai.EntityAILookIdle; import net.minecraft.entity.ai.EntityAINearestAttackableTarget; import net.minecraft.entity.ai.EntityAISwimming; import net.minecraft.entity.ai.EntityAIWander; import net.minecraft.entity.ai.EntityAIWatchClosest; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.util.DamageSource; import net.minecraft.world.World; import me.tyler15555.minibosses.item.MBItems; import me.tyler15555.minibosses.util.IMiniboss; public class EntityStalker extends EntityMob implements IMiniboss{ public EntityStalker(World worldIn) { super(worldIn); this.tasks.addTask(0, new EntityAIWander(this, 1.0D)); this.tasks.addTask(1, new EntityAISwimming(this)); this.tasks.addTask(2, new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.0D, false)); this.tasks.addTask(3, new EntityAILookIdle(this)); this.tasks.addTask(4, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); this.targetTasks.addTask(0, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); } @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getAttributeMap().getAttributeInstance(SharedMonsterAttributes.maxHealth).setBaseValue(200D); this.getAttributeMap().getAttributeInstance(SharedMonsterAttributes.followRange).setBaseValue(25.5D); this.getAttributeMap().getAttributeInstance(SharedMonsterAttributes.attackDamage).setBaseValue(3D); this.getAttributeMap().getAttributeInstance(SharedMonsterAttributes.movementSpeed).setBaseValue(.245D); } @Override public void onLivingUpdate() { super.onLivingUpdate(); if(!this.worldObj.isRemote && !this.worldObj.isDaytime()) { this.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 500)); } } @Override public boolean attackEntityAsMob(Entity entity) { if(entity instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer)entity; player.attackEntityFrom(DamageSource.outOfWorld, (float) this.getAttributeMap().getAttributeInstance(SharedMonsterAttributes.attackDamage).getAttributeValue()); //Void damage bypasses armor } return true; } @Override public void knockBack(Entity p_70653_1_, float p_70653_2_, double p_70653_3_, double p_70653_5_) { return; //Stops knockback from occuring } @Override public boolean attackEntityFrom(DamageSource source, float amt) { if(this.rand.nextInt(9) == 1) { this.heal(amt); return super.attackEntityFrom(source, amt); } return super.attackEntityFrom(source, amt); } @Override public String getBanlistName() { return "Stalker"; } @Override public ItemStack getPossibleLoot() { return new ItemStack(MBItems.occulus_item); } @Override public int getDropChance() { return 80; } }