// TODO Added moreDamageOverride
  public boolean attackEntityFrom2(Entity entity, int i, boolean moreDamageOverride) {
    if (entity instanceof EntityFriend
        && (this instanceof EntityPlayer || this instanceof EntityFriend)) {
      return false;
    }

    if (worldObj.multiplayerWorld) {
      return false;
    }
    field_9344_ag = 0;
    if (health <= 0) {
      return false;
    }
    field_704_R = 1.5F;
    boolean flag = true;
    if (this instanceof EntityZombie && worldObj.instaKill) {
      damageEntity(100);
      field_9346_af = i;
      flag = false;
    }
    if ((float) field_9306_bj > (float) field_9366_o / 2.0F) {
      if (moreDamageOverride) {
        damageEntity(i);
        field_9346_af = i;
        flag = false;
      } else {
        if (i <= field_9346_af) {
          return false;
        }
        damageEntity(i - field_9346_af);
        field_9346_af = i;
        flag = false;
      }
    } else {
      field_9346_af = i;
      prevHealth = health;
      field_9306_bj = field_9366_o;
      damageEntity(i);
      hurtTime = maxHurtTime = 10;
    }
    attackedAtYaw = 0.0F;
    if (flag) {
      worldObj.func_9425_a(this, (byte) 2);
      setBeenAttacked();
      if (entity != null) {
        double d = entity.posX - posX;
        double d1;
        for (d1 = entity.posZ - posZ;
            d * d + d1 * d1 < 0.0001D;
            d1 = (Math.random() - Math.random()) * 0.01D) {
          d = (Math.random() - Math.random()) * 0.01D;
        }

        attackedAtYaw = (float) ((Math.atan2(d1, d) * 180D) / 3.1415927410125732D) - rotationYaw;
        if (this instanceof EntityMobs) {
          knockBack(entity, i, d, d1);
        }
      } else {
        attackedAtYaw = (int) (Math.random() * 2D) * 180;
      }
    }
    if (health <= 0) {
      if (flag) {
        worldObj.playSoundAtEntity(
            this,
            getDeathSound(),
            getSoundVolume(),
            (rand.nextFloat() - rand.nextFloat()) * 0.2F + 1.0F);
      }
      onDeath(entity);
    } else if (flag) {
      worldObj.playSoundAtEntity(
          this,
          getHurtSound(),
          getSoundVolume(),
          (rand.nextFloat() - rand.nextFloat()) * 0.2F + 1.0F);
    }
    return true;
  }