package net.minecraft.entity.ai;
import net.minecraft.block.Block;
import net.minecraft.entity.EntityLiving;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class EntityAIEatGrass extends EntityAIBase
{
private EntityLiving theEntity;
private World theWorld;
/** A decrementing tick used for the sheep's head offset and animation. */
int eatGrassTick = 0;
public EntityAIEatGrass(EntityLiving par1EntityLiving)
{
this.theEntity = par1EntityLiving;
this.theWorld = par1EntityLiving.worldObj;
this.setMutexBits(7);
}
/**
* Returns whether the EntityAIBase should begin execution.
*/
public boolean shouldExecute()
{
if (this.theEntity.getRNG().nextInt(this.theEntity.isChild() ? 50 : 1000) != 0)
{
return false;
}
else
{
int var1 = MathHelper.floor_double(this.theEntity.posX);
int var2 = MathHelper.floor_double(this.theEntity.posY);
int var3 = MathHelper.floor_double(this.theEntity.posZ);
return this.theWorld.getBlockId(var1, var2, var3) == Block.tallGrass.blockID && this.theWorld.getBlockMetadata(var1, var2, var3) == 1 ? true : this.theWorld.getBlockId(var1, var2 - 1, var3) == Block.grass.blockID;
}
}
/**
* Execute a one shot task or start executing a continuous task
*/
public void startExecuting()
{
this.eatGrassTick = 40;
this.theWorld.setEntityState(this.theEntity, (byte)10);
this.theEntity.getNavigator().clearPathEntity();
}
/**
* Resets the task
*/
public void resetTask()
{
this.eatGrassTick = 0;
}
/**
* Returns whether an in-progress EntityAIBase should continue executing
*/
public boolean continueExecuting()
{
return this.eatGrassTick > 0;
}
public int getEatGrassTick()
{
return this.eatGrassTick;
}
/**
* Updates the task
*/
public void updateTask()
{
this.eatGrassTick = Math.max(0, this.eatGrassTick - 1);
if (this.eatGrassTick == 4)
{
int var1 = MathHelper.floor_double(this.theEntity.posX);
int var2 = MathHelper.floor_double(this.theEntity.posY);
int var3 = MathHelper.floor_double(this.theEntity.posZ);
if (this.theWorld.getBlockId(var1, var2, var3) == Block.tallGrass.blockID)
{
this.theWorld.playAuxSFX(2001, var1, var2, var3, Block.tallGrass.blockID + 4096);
this.theWorld.setBlockWithNotify(var1, var2, var3, 0);
this.theEntity.eatGrassBonus();
}
else if (this.theWorld.getBlockId(var1, var2 - 1, var3) == Block.grass.blockID)
{
this.theWorld.playAuxSFX(2001, var1, var2 - 1, var3, Block.grass.blockID);
this.theWorld.setBlockWithNotify(var1, var2 - 1, var3, Block.dirt.blockID);
this.theEntity.eatGrassBonus();
}
}
}
}