package net.minecraft.entity.ai; import com.google.common.base.Predicate; import java.util.Collections; import java.util.List; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityCreature; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.IAttributeInstance; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.scoreboard.Team; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class EntityAIFindEntityNearestPlayer extends EntityAIBase { private static final Logger field_179436_a = LogManager.getLogger(); private EntityLiving field_179434_b; private final Predicate field_179435_c; private final EntityAINearestAttackableTarget.Sorter field_179432_d; private EntityLivingBase field_179433_e; private static final String __OBFID = "CL_00002248"; public EntityAIFindEntityNearestPlayer(EntityLiving p_i45882_1_) { this.field_179434_b = p_i45882_1_; if (p_i45882_1_ instanceof EntityCreature) { field_179436_a.warn("Use NearestAttackableTargetGoal.class for PathfinerMob mobs!"); } this.field_179435_c = new Predicate() { private static final String __OBFID = "CL_00002247"; public boolean func_179880_a(Entity p_179880_1_) { if (!(p_179880_1_ instanceof EntityPlayer)) { return false; } else { double var2 = EntityAIFindEntityNearestPlayer.this.func_179431_f(); if (p_179880_1_.isSneaking()) { var2 *= 0.800000011920929D; } if (p_179880_1_.isInvisible()) { float var4 = ((EntityPlayer)p_179880_1_).getArmorVisibility(); if (var4 < 0.1F) { var4 = 0.1F; } var2 *= (double)(0.7F * var4); } return (double)p_179880_1_.getDistanceToEntity(EntityAIFindEntityNearestPlayer.this.field_179434_b) > var2 ? false : EntityAITarget.func_179445_a(EntityAIFindEntityNearestPlayer.this.field_179434_b, (EntityLivingBase)p_179880_1_, false, true); } } public boolean apply(Object p_apply_1_) { return this.func_179880_a((Entity)p_apply_1_); } }; this.field_179432_d = new EntityAINearestAttackableTarget.Sorter(p_i45882_1_); } /** * Returns whether the EntityAIBase should begin execution. */ public boolean shouldExecute() { double var1 = this.func_179431_f(); List var3 = this.field_179434_b.worldObj.func_175647_a(EntityPlayer.class, this.field_179434_b.getEntityBoundingBox().expand(var1, 4.0D, var1), this.field_179435_c); Collections.sort(var3, this.field_179432_d); if (var3.isEmpty()) { return false; } else { this.field_179433_e = (EntityLivingBase)var3.get(0); return true; } } /** * Returns whether an in-progress EntityAIBase should continue executing */ public boolean continueExecuting() { EntityLivingBase var1 = this.field_179434_b.getAttackTarget(); if (var1 == null) { return false; } else if (!var1.isEntityAlive()) { return false; } else { Team var2 = this.field_179434_b.getTeam(); Team var3 = var1.getTeam(); if (var2 != null && var3 == var2) { return false; } else { double var4 = this.func_179431_f(); return this.field_179434_b.getDistanceSqToEntity(var1) > var4 * var4 ? false : !(var1 instanceof EntityPlayerMP) || !((EntityPlayerMP)var1).theItemInWorldManager.isCreative(); } } } /** * Execute a one shot task or start executing a continuous task */ public void startExecuting() { this.field_179434_b.setAttackTarget(this.field_179433_e); super.startExecuting(); } /** * Resets the task */ public void resetTask() { this.field_179434_b.setAttackTarget((EntityLivingBase)null); super.startExecuting(); } protected double func_179431_f() { IAttributeInstance var1 = this.field_179434_b.getEntityAttribute(SharedMonsterAttributes.followRange); return var1 == null ? 16.0D : var1.getAttributeValue(); } }