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