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 }