package net.minecraft.entity.monster;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.BlockSilverfish;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EnumCreatureAttribute;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.EntityAIAttackOnCollide;
import net.minecraft.entity.ai.EntityAIBase;
import net.minecraft.entity.ai.EntityAIHurtByTarget;
import net.minecraft.entity.ai.EntityAINearestAttackableTarget;
import net.minecraft.entity.ai.EntityAISwimming;
import net.minecraft.entity.ai.EntityAIWander;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.util.BlockPos;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EntityDamageSource;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.World;
public class EntitySilverfish extends EntityMob
{
private EntitySilverfish.AISummonSilverfish field_175460_b;
private static final String __OBFID = "CL_00001696";
public EntitySilverfish(World worldIn)
{
super(worldIn);
this.setSize(0.4F, 0.3F);
this.tasks.addTask(1, new EntityAISwimming(this));
this.tasks.addTask(3, this.field_175460_b = new EntitySilverfish.AISummonSilverfish());
this.tasks.addTask(4, new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.0D, false));
this.tasks.addTask(5, new EntitySilverfish.AIHideInStone());
this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true, new Class[0]));
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true));
}
public float getEyeHeight()
{
return 0.1F;
}
protected void applyEntityAttributes()
{
super.applyEntityAttributes();
this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(8.0D);
this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.25D);
this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(1.0D);
}
/**
* returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to
* prevent them from trampling crops
*/
protected boolean canTriggerWalking()
{
return false;
}
/**
* Returns the sound this mob makes while it's alive.
*/
protected String getLivingSound()
{
return "mob.silverfish.say";
}
/**
* Returns the sound this mob makes when it is hurt.
*/
protected String getHurtSound()
{
return "mob.silverfish.hit";
}
/**
* Returns the sound this mob makes on death.
*/
protected String getDeathSound()
{
return "mob.silverfish.kill";
}
/**
* Called when the entity is attacked.
*/
public boolean attackEntityFrom(DamageSource source, float amount)
{
if (this.func_180431_b(source))
{
return false;
}
else
{
if (source instanceof EntityDamageSource || source == DamageSource.magic)
{
this.field_175460_b.func_179462_f();
}
return super.attackEntityFrom(source, amount);
}
}
protected void func_180429_a(BlockPos p_180429_1_, Block p_180429_2_)
{
this.playSound("mob.silverfish.step", 0.15F, 1.0F);
}
protected Item getDropItem()
{
return null;
}
/**
* Called to update the entity's position/logic.
*/
public void onUpdate()
{
this.renderYawOffset = this.rotationYaw;
super.onUpdate();
}
public float func_180484_a(BlockPos p_180484_1_)
{
return this.worldObj.getBlockState(p_180484_1_.offsetDown()).getBlock() == Blocks.stone ? 10.0F : super.func_180484_a(p_180484_1_);
}
/**
* Checks to make sure the light is not too bright where the mob is spawning
*/
protected boolean isValidLightLevel()
{
return true;
}
/**
* Checks if the entity's current position is a valid location to spawn this entity.
*/
public boolean getCanSpawnHere()
{
if (super.getCanSpawnHere())
{
EntityPlayer var1 = this.worldObj.getClosestPlayerToEntity(this, 5.0D);
return var1 == null;
}
else
{
return false;
}
}
/**
* Get this Entity's EnumCreatureAttribute
*/
public EnumCreatureAttribute getCreatureAttribute()
{
return EnumCreatureAttribute.ARTHROPOD;
}
class AIHideInStone extends EntityAIWander
{
private EnumFacing field_179483_b;
private boolean field_179484_c;
private static final String __OBFID = "CL_00002205";
public AIHideInStone()
{
super(EntitySilverfish.this, 1.0D, 10);
this.setMutexBits(1);
}
public boolean shouldExecute()
{
if (EntitySilverfish.this.getAttackTarget() != null)
{
return false;
}
else if (!EntitySilverfish.this.getNavigator().noPath())
{
return false;
}
else
{
Random var1 = EntitySilverfish.this.getRNG();
if (var1.nextInt(10) == 0)
{
this.field_179483_b = EnumFacing.random(var1);
BlockPos var2 = (new BlockPos(EntitySilverfish.this.posX, EntitySilverfish.this.posY + 0.5D, EntitySilverfish.this.posZ)).offset(this.field_179483_b);
IBlockState var3 = EntitySilverfish.this.worldObj.getBlockState(var2);
if (BlockSilverfish.func_176377_d(var3))
{
this.field_179484_c = true;
return true;
}
}
this.field_179484_c = false;
return super.shouldExecute();
}
}
public boolean continueExecuting()
{
return this.field_179484_c ? false : super.continueExecuting();
}
public void startExecuting()
{
if (!this.field_179484_c)
{
super.startExecuting();
}
else
{
World var1 = EntitySilverfish.this.worldObj;
BlockPos var2 = (new BlockPos(EntitySilverfish.this.posX, EntitySilverfish.this.posY + 0.5D, EntitySilverfish.this.posZ)).offset(this.field_179483_b);
IBlockState var3 = var1.getBlockState(var2);
if (BlockSilverfish.func_176377_d(var3))
{
var1.setBlockState(var2, Blocks.monster_egg.getDefaultState().withProperty(BlockSilverfish.VARIANT_PROP, BlockSilverfish.EnumType.func_176878_a(var3)), 3);
EntitySilverfish.this.spawnExplosionParticle();
EntitySilverfish.this.setDead();
}
}
}
}
class AISummonSilverfish extends EntityAIBase
{
private EntitySilverfish field_179464_a = EntitySilverfish.this;
private int field_179463_b;
private static final String __OBFID = "CL_00002204";
public void func_179462_f()
{
if (this.field_179463_b == 0)
{
this.field_179463_b = 20;
}
}
public boolean shouldExecute()
{
return this.field_179463_b > 0;
}
public void updateTask()
{
--this.field_179463_b;
if (this.field_179463_b <= 0)
{
World var1 = this.field_179464_a.worldObj;
Random var2 = this.field_179464_a.getRNG();
BlockPos var3 = new BlockPos(this.field_179464_a);
for (int var4 = 0; var4 <= 5 && var4 >= -5; var4 = var4 <= 0 ? 1 - var4 : 0 - var4)
{
for (int var5 = 0; var5 <= 10 && var5 >= -10; var5 = var5 <= 0 ? 1 - var5 : 0 - var5)
{
for (int var6 = 0; var6 <= 10 && var6 >= -10; var6 = var6 <= 0 ? 1 - var6 : 0 - var6)
{
BlockPos var7 = var3.add(var5, var4, var6);
IBlockState var8 = var1.getBlockState(var7);
if (var8.getBlock() == Blocks.monster_egg)
{
if (var1.getGameRules().getGameRuleBooleanValue("mobGriefing"))
{
var1.destroyBlock(var7, true);
}
else
{
var1.setBlockState(var7, ((BlockSilverfish.EnumType)var8.getValue(BlockSilverfish.VARIANT_PROP)).func_176883_d(), 3);
}
if (var2.nextBoolean())
{
return;
}
}
}
}
}
}
}
}
}