001 package net.minecraft.src;
002
003 public class EntityAIEatGrass extends EntityAIBase
004 {
005 private EntityLiving theEntity;
006 private World theWorld;
007
008 /** A decrementing tick used for the sheep's head offset and animation. */
009 int eatGrassTick = 0;
010
011 public EntityAIEatGrass(EntityLiving par1EntityLiving)
012 {
013 this.theEntity = par1EntityLiving;
014 this.theWorld = par1EntityLiving.worldObj;
015 this.setMutexBits(7);
016 }
017
018 /**
019 * Returns whether the EntityAIBase should begin execution.
020 */
021 public boolean shouldExecute()
022 {
023 if (this.theEntity.getRNG().nextInt(this.theEntity.isChild() ? 50 : 1000) != 0)
024 {
025 return false;
026 }
027 else
028 {
029 int var1 = MathHelper.floor_double(this.theEntity.posX);
030 int var2 = MathHelper.floor_double(this.theEntity.posY);
031 int var3 = MathHelper.floor_double(this.theEntity.posZ);
032 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;
033 }
034 }
035
036 /**
037 * Execute a one shot task or start executing a continuous task
038 */
039 public void startExecuting()
040 {
041 this.eatGrassTick = 40;
042 this.theWorld.setEntityState(this.theEntity, (byte)10);
043 this.theEntity.getNavigator().clearPathEntity();
044 }
045
046 /**
047 * Resets the task
048 */
049 public void resetTask()
050 {
051 this.eatGrassTick = 0;
052 }
053
054 /**
055 * Returns whether an in-progress EntityAIBase should continue executing
056 */
057 public boolean continueExecuting()
058 {
059 return this.eatGrassTick > 0;
060 }
061
062 public int func_75362_f()
063 {
064 return this.eatGrassTick;
065 }
066
067 /**
068 * Updates the task
069 */
070 public void updateTask()
071 {
072 this.eatGrassTick = Math.max(0, this.eatGrassTick - 1);
073
074 if (this.eatGrassTick == 4)
075 {
076 int var1 = MathHelper.floor_double(this.theEntity.posX);
077 int var2 = MathHelper.floor_double(this.theEntity.posY);
078 int var3 = MathHelper.floor_double(this.theEntity.posZ);
079
080 if (this.theWorld.getBlockId(var1, var2, var3) == Block.tallGrass.blockID)
081 {
082 this.theWorld.playAuxSFX(2001, var1, var2, var3, Block.tallGrass.blockID + 4096);
083 this.theWorld.setBlockWithNotify(var1, var2, var3, 0);
084 this.theEntity.eatGrassBonus();
085 }
086 else if (this.theWorld.getBlockId(var1, var2 - 1, var3) == Block.grass.blockID)
087 {
088 this.theWorld.playAuxSFX(2001, var1, var2 - 1, var3, Block.grass.blockID);
089 this.theWorld.setBlockWithNotify(var1, var2 - 1, var3, Block.dirt.blockID);
090 this.theEntity.eatGrassBonus();
091 }
092 }
093 }
094 }