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    }