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    }