001 package net.minecraft.entity.ai;
002
003 import net.minecraft.entity.EntityCreature;
004 import net.minecraft.util.ChunkCoordinates;
005 import net.minecraft.util.Vec3;
006
007 public class EntityAIMoveTwardsRestriction extends EntityAIBase
008 {
009 private EntityCreature theEntity;
010 private double movePosX;
011 private double movePosY;
012 private double movePosZ;
013 private float movementSpeed;
014
015 public EntityAIMoveTwardsRestriction(EntityCreature par1EntityCreature, float par2)
016 {
017 this.theEntity = par1EntityCreature;
018 this.movementSpeed = par2;
019 this.setMutexBits(1);
020 }
021
022 /**
023 * Returns whether the EntityAIBase should begin execution.
024 */
025 public boolean shouldExecute()
026 {
027 if (this.theEntity.isWithinHomeDistanceCurrentPosition())
028 {
029 return false;
030 }
031 else
032 {
033 ChunkCoordinates var1 = this.theEntity.getHomePosition();
034 Vec3 var2 = RandomPositionGenerator.findRandomTargetBlockTowards(this.theEntity, 16, 7, this.theEntity.worldObj.getWorldVec3Pool().getVecFromPool((double)var1.posX, (double)var1.posY, (double)var1.posZ));
035
036 if (var2 == null)
037 {
038 return false;
039 }
040 else
041 {
042 this.movePosX = var2.xCoord;
043 this.movePosY = var2.yCoord;
044 this.movePosZ = var2.zCoord;
045 return true;
046 }
047 }
048 }
049
050 /**
051 * Returns whether an in-progress EntityAIBase should continue executing
052 */
053 public boolean continueExecuting()
054 {
055 return !this.theEntity.getNavigator().noPath();
056 }
057
058 /**
059 * Execute a one shot task or start executing a continuous task
060 */
061 public void startExecuting()
062 {
063 this.theEntity.getNavigator().tryMoveToXYZ(this.movePosX, this.movePosY, this.movePosZ, this.movementSpeed);
064 }
065 }