001 package net.minecraft.entity.ai; 002 003 import net.minecraft.entity.EntityCreature; 004 import net.minecraft.util.Vec3; 005 006 public class EntityAIPanic extends EntityAIBase 007 { 008 private EntityCreature theEntityCreature; 009 private float speed; 010 private double randPosX; 011 private double randPosY; 012 private double randPosZ; 013 014 public EntityAIPanic(EntityCreature par1EntityCreature, float par2) 015 { 016 this.theEntityCreature = 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.theEntityCreature.getAITarget() == null && !this.theEntityCreature.isBurning()) 027 { 028 return false; 029 } 030 else 031 { 032 Vec3 var1 = RandomPositionGenerator.findRandomTarget(this.theEntityCreature, 5, 4); 033 034 if (var1 == null) 035 { 036 return false; 037 } 038 else 039 { 040 this.randPosX = var1.xCoord; 041 this.randPosY = var1.yCoord; 042 this.randPosZ = var1.zCoord; 043 return true; 044 } 045 } 046 } 047 048 /** 049 * Execute a one shot task or start executing a continuous task 050 */ 051 public void startExecuting() 052 { 053 this.theEntityCreature.getNavigator().tryMoveToXYZ(this.randPosX, this.randPosY, this.randPosZ, this.speed); 054 } 055 056 /** 057 * Returns whether an in-progress EntityAIBase should continue executing 058 */ 059 public boolean continueExecuting() 060 { 061 return !this.theEntityCreature.getNavigator().noPath(); 062 } 063 }