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, Vec3.getVec3Pool().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 }