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