    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, this.theEntity.worldObj.getWorldVec3Pool().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    }