package com.hbm.entity.mob; import java.util.HashSet; import java.util.List; import com.hbm.entity.effect.EntityNukeCloudSmall; import com.hbm.entity.logic.EntityNukeExplosionAdvanced; import com.hbm.entity.projectile.EntityBullet; import com.hbm.explosion.ExplosionParticle; import com.hbm.explosion.ExplosionParticleB; import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.lib.ModDamageSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.IRangedAttackMob; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.EntityAIArrowAttack; import net.minecraft.entity.ai.EntityAIAttackOnCollide; import net.minecraft.entity.ai.EntityAIAvoidEntity; import net.minecraft.entity.ai.EntityAIControlledByPlayer; import net.minecraft.entity.ai.EntityAIFollowParent; import net.minecraft.entity.ai.EntityAIHurtByTarget; import net.minecraft.entity.ai.EntityAILookIdle; import net.minecraft.entity.ai.EntityAIMate; import net.minecraft.entity.ai.EntityAINearestAttackableTarget; import net.minecraft.entity.ai.EntityAIPanic; import net.minecraft.entity.ai.EntityAISwimming; import net.minecraft.entity.ai.EntityAITempt; import net.minecraft.entity.ai.EntityAIWander; import net.minecraft.entity.ai.EntityAIWatchClosest; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.monster.EntityCreeper; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.monster.EntitySkeleton; import net.minecraft.entity.monster.EntityZombie; import net.minecraft.entity.passive.EntityCow; import net.minecraft.entity.passive.EntityMooshroom; import net.minecraft.entity.passive.EntityOcelot; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.World; public class EntityCyberCrab extends EntityMob implements IRangedAttackMob { private EntityAIArrowAttack aiArrowAttack = new EntityAIArrowAttack(this, 0.5D, 60, 80, 15.0F); public EntityCyberCrab(World p_i1733_1_) { super(p_i1733_1_); this.setSize(0.75F, 0.35F); this.getNavigator().setAvoidsWater(true); this.tasks.addTask(0, new EntityAIPanic(this, 0.75D)); this.tasks.addTask(1, new EntityAIWander(this, 0.5F)); //this.tasks.addTask(2, new EntityAIAvoidEntity(this, EntityPlayer.class, 3, 0.75D, 1.0D)); this.tasks.addTask(4, this.aiArrowAttack); this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 3, true)); } @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(4.0D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.5F); } @Override public boolean attackEntityFrom(DamageSource source, float amount) { return super.attackEntityFrom(source, amount); } /** * Returns true if the newer Entity AI code should be run */ @Override public boolean isAIEnabled() { return true; } /** * The number of iterations PathFinder.getSafePoint will execute before giving up. */ @Override public int getMaxSafePointTries() { return this.getAttackTarget() == null ? 3 : 3 + (int)(this.getHealth() - 1.0F); } @Override protected void entityInit() { super.entityInit(); } /** * (abstract) Protected helper method to write subclass entity data to NBT. */ @Override public void writeEntityToNBT(NBTTagCompound p_70014_1_) { super.writeEntityToNBT(p_70014_1_); } /** * (abstract) Protected helper method to read subclass entity data from NBT. */ @Override public void readEntityFromNBT(NBTTagCompound p_70037_1_) { super.readEntityFromNBT(p_70037_1_); } /** * Called to update the entity's position/logic. */ @Override public void onUpdate() { super.onUpdate(); if(this.isInWater() || this.isWet() || this.isBurning()) this.attackEntityFrom(DamageSource.generic, 10F); if(this.getHealth() <= 0) { this.setDead(); worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 0.1F, true); } } /** * Returns the sound this mob makes when it is hurt. */ @Override protected String getHurtSound() { return "mob.creeper.say"; } /** * Returns the sound this mob makes on death. */ @Override protected String getDeathSound() { return "mob.creeper.death"; } /** * Called when the mob's health reaches 0. */ @Override public void onDeath(DamageSource p_70645_1_) { super.onDeath(p_70645_1_); } @Override public boolean attackEntityAsMob(Entity p_70652_1_) { return true; } @Override protected Item getDropItem() { return null; } @Override public void attackEntityWithRangedAttack(EntityLivingBase entity, float f) { EntityBullet bullet = new EntityBullet(worldObj, this, entity, 1.6F, 2); bullet.setIsCritical(true); bullet.setTau(true); bullet.damage = 2; this.worldObj.spawnEntityInWorld(bullet); } }