package net.minecraft.util; import com.google.common.collect.Lists; import java.util.Iterator; import java.util.List; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; public class CombatTracker { /** The CombatEntry objects that we've tracked so far. */ private final List combatEntries = Lists.newArrayList(); /** The entity tracked. */ private final EntityLivingBase fighter; private int field_94555_c; private int field_152775_d; private int field_152776_e; private boolean field_94552_d; private boolean field_94553_e; private String field_94551_f; private static final String __OBFID = "CL_00001520"; public CombatTracker(EntityLivingBase p_i1565_1_) { this.fighter = p_i1565_1_; } public void func_94545_a() { this.func_94542_g(); if (this.fighter.isOnLadder()) { Block var1 = this.fighter.worldObj.getBlockState(new BlockPos(this.fighter.posX, this.fighter.getEntityBoundingBox().minY, this.fighter.posZ)).getBlock(); if (var1 == Blocks.ladder) { this.field_94551_f = "ladder"; } else if (var1 == Blocks.vine) { this.field_94551_f = "vines"; } } else if (this.fighter.isInWater()) { this.field_94551_f = "water"; } } public void func_94547_a(DamageSource p_94547_1_, float p_94547_2_, float p_94547_3_) { this.func_94549_h(); this.func_94545_a(); CombatEntry var4 = new CombatEntry(p_94547_1_, this.fighter.ticksExisted, p_94547_2_, p_94547_3_, this.field_94551_f, this.fighter.fallDistance); this.combatEntries.add(var4); this.field_94555_c = this.fighter.ticksExisted; this.field_94553_e = true; if (var4.func_94559_f() && !this.field_94552_d && this.fighter.isEntityAlive()) { this.field_94552_d = true; this.field_152775_d = this.fighter.ticksExisted; this.field_152776_e = this.field_152775_d; this.fighter.func_152111_bt(); } } public IChatComponent func_151521_b() { if (this.combatEntries.size() == 0) { return new ChatComponentTranslation("death.attack.generic", new Object[] {this.fighter.getDisplayName()}); } else { CombatEntry var1 = this.func_94544_f(); CombatEntry var2 = (CombatEntry)this.combatEntries.get(this.combatEntries.size() - 1); IChatComponent var4 = var2.func_151522_h(); Entity var5 = var2.getDamageSrc().getEntity(); Object var3; if (var1 != null && var2.getDamageSrc() == DamageSource.fall) { IChatComponent var6 = var1.func_151522_h(); if (var1.getDamageSrc() != DamageSource.fall && var1.getDamageSrc() != DamageSource.outOfWorld) { if (var6 != null && (var4 == null || !var6.equals(var4))) { Entity var9 = var1.getDamageSrc().getEntity(); ItemStack var8 = var9 instanceof EntityLivingBase ? ((EntityLivingBase)var9).getHeldItem() : null; if (var8 != null && var8.hasDisplayName()) { var3 = new ChatComponentTranslation("death.fell.assist.item", new Object[] {this.fighter.getDisplayName(), var6, var8.getChatComponent()}); } else { var3 = new ChatComponentTranslation("death.fell.assist", new Object[] {this.fighter.getDisplayName(), var6}); } } else if (var4 != null) { ItemStack var7 = var5 instanceof EntityLivingBase ? ((EntityLivingBase)var5).getHeldItem() : null; if (var7 != null && var7.hasDisplayName()) { var3 = new ChatComponentTranslation("death.fell.finish.item", new Object[] {this.fighter.getDisplayName(), var4, var7.getChatComponent()}); } else { var3 = new ChatComponentTranslation("death.fell.finish", new Object[] {this.fighter.getDisplayName(), var4}); } } else { var3 = new ChatComponentTranslation("death.fell.killer", new Object[] {this.fighter.getDisplayName()}); } } else { var3 = new ChatComponentTranslation("death.fell.accident." + this.func_94548_b(var1), new Object[] {this.fighter.getDisplayName()}); } } else { var3 = var2.getDamageSrc().getDeathMessage(this.fighter); } return (IChatComponent)var3; } } public EntityLivingBase func_94550_c() { EntityLivingBase var1 = null; EntityPlayer var2 = null; float var3 = 0.0F; float var4 = 0.0F; Iterator var5 = this.combatEntries.iterator(); while (var5.hasNext()) { CombatEntry var6 = (CombatEntry)var5.next(); if (var6.getDamageSrc().getEntity() instanceof EntityPlayer && (var2 == null || var6.func_94563_c() > var4)) { var4 = var6.func_94563_c(); var2 = (EntityPlayer)var6.getDamageSrc().getEntity(); } if (var6.getDamageSrc().getEntity() instanceof EntityLivingBase && (var1 == null || var6.func_94563_c() > var3)) { var3 = var6.func_94563_c(); var1 = (EntityLivingBase)var6.getDamageSrc().getEntity(); } } if (var2 != null && var4 >= var3 / 3.0F) { return var2; } else { return var1; } } private CombatEntry func_94544_f() { CombatEntry var1 = null; CombatEntry var2 = null; byte var3 = 0; float var4 = 0.0F; for (int var5 = 0; var5 < this.combatEntries.size(); ++var5) { CombatEntry var6 = (CombatEntry)this.combatEntries.get(var5); CombatEntry var7 = var5 > 0 ? (CombatEntry)this.combatEntries.get(var5 - 1) : null; if ((var6.getDamageSrc() == DamageSource.fall || var6.getDamageSrc() == DamageSource.outOfWorld) && var6.func_94561_i() > 0.0F && (var1 == null || var6.func_94561_i() > var4)) { if (var5 > 0) { var1 = var7; } else { var1 = var6; } var4 = var6.func_94561_i(); } if (var6.func_94562_g() != null && (var2 == null || var6.func_94563_c() > (float)var3)) { var2 = var6; } } if (var4 > 5.0F && var1 != null) { return var1; } else if (var3 > 5 && var2 != null) { return var2; } else { return null; } } private String func_94548_b(CombatEntry p_94548_1_) { return p_94548_1_.func_94562_g() == null ? "generic" : p_94548_1_.func_94562_g(); } public int func_180134_f() { return this.field_94552_d ? this.fighter.ticksExisted - this.field_152775_d : this.field_152776_e - this.field_152775_d; } private void func_94542_g() { this.field_94551_f = null; } public void func_94549_h() { int var1 = this.field_94552_d ? 300 : 100; if (this.field_94553_e && (!this.fighter.isEntityAlive() || this.fighter.ticksExisted - this.field_94555_c > var1)) { boolean var2 = this.field_94552_d; this.field_94553_e = false; this.field_94552_d = false; this.field_152776_e = this.fighter.ticksExisted; if (var2) { this.fighter.func_152112_bu(); } this.combatEntries.clear(); } } public EntityLivingBase func_180135_h() { return this.fighter; } }