    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}