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