001 package net.minecraft.entity.ai;
002
003 import net.minecraft.entity.EntityCreature;
004 import net.minecraft.util.Vec3;
005
006 public 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 var1 = RandomPositionGenerator.findRandomTarget(this.entity, 10, 7);
037
038 if (var1 == null)
039 {
040 return false;
041 }
042 else
043 {
044 this.xPosition = var1.xCoord;
045 this.yPosition = var1.yCoord;
046 this.zPosition = var1.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 }