public void func_111187_a(
     EntityLivingBase p_111187_1_, BaseAttributeMap p_111187_2_, int p_111187_3_) {
   super.func_111187_a(p_111187_1_, p_111187_2_, p_111187_3_);
   if (p_111187_1_.func_110143_aJ() > p_111187_1_.func_110138_aP()) {
     p_111187_1_.func_70606_j(p_111187_1_.func_110138_aP());
   }
 }
  @ForgeSubscribe
  public void renderHealthBar(RenderLivingEvent.Specials.Post event) {
    if (!Debug.shouldRenderEntityHealthBars) return;

    if (event.entity == Minecraft.getMinecraft().thePlayer)
      return; // wont render the player hp in 3rd person
    float interp = timer.renderPartialTicks;
    EntityLivingBase e = event.entity;
    EntityPlayer p = Minecraft.getMinecraft().thePlayer;
    double diffX =
        e.prevPosX + interp * (e.posX - e.prevPosX) - (p.prevPosX + interp * (p.posX - p.prevPosX));
    double diffY =
        e.prevPosY + interp * (e.posY - e.prevPosY) - (p.prevPosY + interp * (p.posY - p.prevPosY));
    double diffZ =
        e.prevPosZ + interp * (e.posZ - e.prevPosZ) - (p.prevPosZ + interp * (p.posZ - p.prevPosZ));
    GL11.glDisable(GL11.GL_LIGHTING);
    GL11.glPushMatrix();
    double height = e.height + 0.5;
    GL11.glTranslated(diffX, diffY + height, diffZ);
    GL11.glRotated(-(p.prevRotationYaw + interp * (p.rotationYaw - p.prevRotationYaw)), 0, 1, 0);
    GL11.glRotated(p.prevRotationPitch + interp * (p.rotationPitch - p.prevRotationPitch), 1, 0, 0);
    Tessellator t = Tessellator.instance;
    GL11.glDisable(GL11.GL_TEXTURE_2D);
    float currentHealth = e.getDataWatcher().func_111145_d(6);
    float maxHealth = e.func_110138_aP();
    if (event.entity instanceof EntityLivingBase) {

      GL11.glDisable(GL11.GL_DEPTH_TEST);
      GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
      float f = 1.6F;
      float f1 = 0.016666668F * f;
      GL11.glScaled(-f1, -f1, f1);
      FontRenderer fr = Minecraft.getMinecraft().fontRenderer;

      float healthLength = fr.getStringWidth(e.getEntityName()) + 1;
      float healthHeight = -9f;

      float sizeOfActiveHealth = healthLength * (currentHealth / maxHealth);
      GL11.glPushMatrix();
      GL11.glTranslated(-healthLength / 2f, -1, 0);
      t.startDrawingQuads();
      t.setColorRGBA(100, 205, 100, 100);
      t.addVertexWithUV(0, 0, 0, 0, 0);
      t.addVertexWithUV(0, -healthHeight, 0, 0, 1);
      t.addVertexWithUV(sizeOfActiveHealth, -healthHeight, 0, 1, 1);
      t.addVertexWithUV(sizeOfActiveHealth, 0, 0, 1, 0);
      t.draw();
      float rest = healthLength - sizeOfActiveHealth;
      GL11.glTranslated(sizeOfActiveHealth, 0, 0);
      t.startDrawingQuads();
      t.setColorRGBA(255, 0, 0, 100);
      t.addVertexWithUV(0, 0, 0, 0, 0);
      t.addVertexWithUV(0, -healthHeight, 0, 0, 1);
      t.addVertexWithUV(rest, -healthHeight, 0, 1, 1);
      t.addVertexWithUV(rest, 0, 0, 1, 0);
      t.draw();

      GL11.glPopMatrix();
      GL11.glEnable(GL11.GL_TEXTURE_2D);
      String text = e.getEntityName() + " [ " + currentHealth + "/" + maxHealth + " ]";
      fr.drawString(text, -fr.getStringWidth(text) / 2, 0, 553648127);
      GL11.glDisable(GL11.GL_TEXTURE_2D);
      GL11.glEnable(GL11.GL_DEPTH_TEST);
    }
    GL11.glPopMatrix();
    GL11.glEnable(GL11.GL_TEXTURE_2D);
    GL11.glEnable(GL11.GL_LIGHTING);
  }