package net.minecraft.util; import java.util.ArrayList; 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 = new ArrayList(); /** 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 block = this.fighter.worldObj.getBlock(MathHelper.floor_double(this.fighter.posX), MathHelper.floor_double(this.fighter.boundingBox.minY), MathHelper.floor_double(this.fighter.posZ)); if (block == Blocks.ladder) { this.field_94551_f = "ladder"; } else if (block == 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 combatentry = new CombatEntry(p_94547_1_, this.fighter.ticksExisted, p_94547_2_, p_94547_3_, this.field_94551_f, this.fighter.fallDistance); this.combatEntries.add(combatentry); this.field_94555_c = this.fighter.ticksExisted; this.field_94553_e = true; if (combatentry.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.getFormattedCommandSenderName()}); } else { CombatEntry combatentry = this.func_94544_f(); CombatEntry combatentry1 = (CombatEntry)this.combatEntries.get(this.combatEntries.size() - 1); IChatComponent ichatcomponent = combatentry1.func_151522_h(); Entity entity = combatentry1.getDamageSrc().getEntity(); Object object; if (combatentry != null && combatentry1.getDamageSrc() == DamageSource.fall) { IChatComponent ichatcomponent1 = combatentry.func_151522_h(); if (combatentry.getDamageSrc() != DamageSource.fall && combatentry.getDamageSrc() != DamageSource.outOfWorld) { if (ichatcomponent1 != null && (ichatcomponent == null || !ichatcomponent1.equals(ichatcomponent))) { Entity entity1 = combatentry.getDamageSrc().getEntity(); ItemStack itemstack1 = entity1 instanceof EntityLivingBase ? ((EntityLivingBase)entity1).getHeldItem() : null; if (itemstack1 != null && itemstack1.hasDisplayName()) { object = new ChatComponentTranslation("death.fell.assist.item", new Object[] {this.fighter.getFormattedCommandSenderName(), ichatcomponent1, itemstack1.func_151000_E()}); } else { object = new ChatComponentTranslation("death.fell.assist", new Object[] {this.fighter.getFormattedCommandSenderName(), ichatcomponent1}); } } else if (ichatcomponent != null) { ItemStack itemstack = entity instanceof EntityLivingBase ? ((EntityLivingBase)entity).getHeldItem() : null; if (itemstack != null && itemstack.hasDisplayName()) { object = new ChatComponentTranslation("death.fell.finish.item", new Object[] {this.fighter.getFormattedCommandSenderName(), ichatcomponent, itemstack.func_151000_E()}); } else { object = new ChatComponentTranslation("death.fell.finish", new Object[] {this.fighter.getFormattedCommandSenderName(), ichatcomponent}); } } else { object = new ChatComponentTranslation("death.fell.killer", new Object[] {this.fighter.getFormattedCommandSenderName()}); } } else { object = new ChatComponentTranslation("death.fell.accident." + this.func_94548_b(combatentry), new Object[] {this.fighter.getFormattedCommandSenderName()}); } } else { object = combatentry1.getDamageSrc().getDeathMessage(this.fighter); } return (IChatComponent)object; } } public EntityLivingBase func_94550_c() { EntityLivingBase entitylivingbase = null; EntityPlayer entityplayer = null; float f = 0.0F; float f1 = 0.0F; Iterator iterator = this.combatEntries.iterator(); while (iterator.hasNext()) { CombatEntry combatentry = (CombatEntry)iterator.next(); if (combatentry.getDamageSrc().getEntity() instanceof EntityPlayer && (entityplayer == null || combatentry.func_94563_c() > f1)) { f1 = combatentry.func_94563_c(); entityplayer = (EntityPlayer)combatentry.getDamageSrc().getEntity(); } if (combatentry.getDamageSrc().getEntity() instanceof EntityLivingBase && (entitylivingbase == null || combatentry.func_94563_c() > f)) { f = combatentry.func_94563_c(); entitylivingbase = (EntityLivingBase)combatentry.getDamageSrc().getEntity(); } } if (entityplayer != null && f1 >= f / 3.0F) { return entityplayer; } else { return entitylivingbase; } } private CombatEntry func_94544_f() { CombatEntry combatentry = null; CombatEntry combatentry1 = null; byte b0 = 0; float f = 0.0F; for (int i = 0; i < this.combatEntries.size(); ++i) { CombatEntry combatentry2 = (CombatEntry)this.combatEntries.get(i); CombatEntry combatentry3 = i > 0 ? (CombatEntry)this.combatEntries.get(i - 1) : null; if ((combatentry2.getDamageSrc() == DamageSource.fall || combatentry2.getDamageSrc() == DamageSource.outOfWorld) && combatentry2.func_94561_i() > 0.0F && (combatentry == null || combatentry2.func_94561_i() > f)) { if (i > 0) { combatentry = combatentry3; } else { combatentry = combatentry2; } f = combatentry2.func_94561_i(); } if (combatentry2.func_94562_g() != null && (combatentry1 == null || combatentry2.func_94563_c() > (float)b0)) { combatentry1 = combatentry2; } } if (f > 5.0F && combatentry != null) { return combatentry; } else if (b0 > 5 && combatentry1 != null) { return combatentry1; } 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(); } private void func_94542_g() { this.field_94551_f = null; } public void func_94549_h() { int i = this.field_94552_d ? 300 : 100; if (this.field_94553_e && (!this.fighter.isEntityAlive() || this.fighter.ticksExisted - this.field_94555_c > i)) { boolean flag = this.field_94552_d; this.field_94553_e = false; this.field_94552_d = false; this.field_152776_e = this.fighter.ticksExisted; if (flag) { this.fighter.func_152112_bu(); } this.combatEntries.clear(); } } }