001package net.minecraft.entity.ai;
002
003import net.minecraft.entity.EntityCreature;
004import net.minecraft.util.Vec3;
005
006public class EntityAIWander extends EntityAIBase
007{
008    private EntityCreature entity;
009    private double xPosition;
010    private double yPosition;
011    private double zPosition;
012    private float speed;
013
014    public EntityAIWander(EntityCreature par1EntityCreature, float par2)
015    {
016        this.entity = par1EntityCreature;
017        this.speed = par2;
018        this.setMutexBits(1);
019    }
020
021    /**
022     * Returns whether the EntityAIBase should begin execution.
023     */
024    public boolean shouldExecute()
025    {
026        if (this.entity.getAge() >= 100)
027        {
028            return false;
029        }
030        else if (this.entity.getRNG().nextInt(120) != 0)
031        {
032            return false;
033        }
034        else
035        {
036            Vec3 vec3 = RandomPositionGenerator.findRandomTarget(this.entity, 10, 7);
037
038            if (vec3 == null)
039            {
040                return false;
041            }
042            else
043            {
044                this.xPosition = vec3.xCoord;
045                this.yPosition = vec3.yCoord;
046                this.zPosition = vec3.zCoord;
047                return true;
048            }
049        }
050    }
051
052    /**
053     * Returns whether an in-progress EntityAIBase should continue executing
054     */
055    public boolean continueExecuting()
056    {
057        return !this.entity.getNavigator().noPath();
058    }
059
060    /**
061     * Execute a one shot task or start executing a continuous task
062     */
063    public void startExecuting()
064    {
065        this.entity.getNavigator().tryMoveToXYZ(this.xPosition, this.yPosition, this.zPosition, this.speed);
066    }
067}