001 package net.minecraft.entity.ai; 002 003 import java.util.Iterator; 004 import java.util.List; 005 import net.minecraft.entity.EntityLiving; 006 import net.minecraft.entity.player.EntityPlayer; 007 import net.minecraft.util.AxisAlignedBB; 008 009 public class EntityAIHurtByTarget extends EntityAITarget 010 { 011 boolean field_75312_a; 012 013 /** The PathNavigate of our entity. */ 014 EntityLiving entityPathNavigate; 015 016 public EntityAIHurtByTarget(EntityLiving par1EntityLiving, boolean par2) 017 { 018 super(par1EntityLiving, 16.0F, false); 019 this.field_75312_a = par2; 020 this.setMutexBits(1); 021 } 022 023 /** 024 * Returns whether the EntityAIBase should begin execution. 025 */ 026 public boolean shouldExecute() 027 { 028 return this.isSuitableTarget(this.taskOwner.getAITarget(), true); 029 } 030 031 /** 032 * Returns whether an in-progress EntityAIBase should continue executing 033 */ 034 public boolean continueExecuting() 035 { 036 return this.taskOwner.getAITarget() != null && this.taskOwner.getAITarget() != this.entityPathNavigate; 037 } 038 039 /** 040 * Execute a one shot task or start executing a continuous task 041 */ 042 public void startExecuting() 043 { 044 this.taskOwner.setAttackTarget(this.taskOwner.getAITarget()); 045 this.entityPathNavigate = this.taskOwner.getAITarget(); 046 047 if (this.field_75312_a) 048 { 049 List var1 = this.taskOwner.worldObj.getEntitiesWithinAABB(this.taskOwner.getClass(), AxisAlignedBB.getAABBPool().addOrModifyAABBInPool(this.taskOwner.posX, this.taskOwner.posY, this.taskOwner.posZ, this.taskOwner.posX + 1.0D, this.taskOwner.posY + 1.0D, this.taskOwner.posZ + 1.0D).expand((double)this.targetDistance, 4.0D, (double)this.targetDistance)); 050 Iterator var2 = var1.iterator(); 051 052 while (var2.hasNext()) 053 { 054 EntityLiving var3 = (EntityLiving)var2.next(); 055 056 if (this.taskOwner != var3 && var3.getAttackTarget() == null) 057 { 058 var3.setAttackTarget(this.taskOwner.getAITarget()); 059 } 060 } 061 } 062 063 super.startExecuting(); 064 } 065 066 /** 067 * Resets the task 068 */ 069 public void resetTask() 070 { 071 if (this.taskOwner.getAttackTarget() != null && this.taskOwner.getAttackTarget() instanceof EntityPlayer && ((EntityPlayer)this.taskOwner.getAttackTarget()).capabilities.disableDamage) 072 { 073 super.resetTask(); 074 } 075 } 076 }