001 package net.minecraft.src;
002
003 public class EntityAIMoveTowardsTarget extends EntityAIBase
004 {
005 private EntityCreature theEntity;
006 private EntityLiving targetEntity;
007 private double movePosX;
008 private double movePosY;
009 private double movePosZ;
010 private float field_75425_f;
011 private float field_75426_g;
012
013 public EntityAIMoveTowardsTarget(EntityCreature par1EntityCreature, float par2, float par3)
014 {
015 this.theEntity = par1EntityCreature;
016 this.field_75425_f = par2;
017 this.field_75426_g = par3;
018 this.setMutexBits(1);
019 }
020
021 /**
022 * Returns whether the EntityAIBase should begin execution.
023 */
024 public boolean shouldExecute()
025 {
026 this.targetEntity = this.theEntity.getAttackTarget();
027
028 if (this.targetEntity == null)
029 {
030 return false;
031 }
032 else if (this.targetEntity.getDistanceSqToEntity(this.theEntity) > (double)(this.field_75426_g * this.field_75426_g))
033 {
034 return false;
035 }
036 else
037 {
038 Vec3 var1 = RandomPositionGenerator.findRandomTargetBlockTowards(this.theEntity, 16, 7, this.theEntity.worldObj.func_82732_R().getVecFromPool(this.targetEntity.posX, this.targetEntity.posY, this.targetEntity.posZ));
039
040 if (var1 == null)
041 {
042 return false;
043 }
044 else
045 {
046 this.movePosX = var1.xCoord;
047 this.movePosY = var1.yCoord;
048 this.movePosZ = var1.zCoord;
049 return true;
050 }
051 }
052 }
053
054 /**
055 * Returns whether an in-progress EntityAIBase should continue executing
056 */
057 public boolean continueExecuting()
058 {
059 return !this.theEntity.getNavigator().noPath() && this.targetEntity.isEntityAlive() && this.targetEntity.getDistanceSqToEntity(this.theEntity) < (double)(this.field_75426_g * this.field_75426_g);
060 }
061
062 /**
063 * Resets the task
064 */
065 public void resetTask()
066 {
067 this.targetEntity = null;
068 }
069
070 /**
071 * Execute a one shot task or start executing a continuous task
072 */
073 public void startExecuting()
074 {
075 this.theEntity.getNavigator().tryMoveToXYZ(this.movePosX, this.movePosY, this.movePosZ, this.field_75425_f);
076 }
077 }