@SubscribeEvent()
  public void renderOverlay(RenderGameOverlayEvent.Post event) {
    if (ClientUtils.mc().thePlayer != null
        && ClientUtils.mc().thePlayer.getCurrentEquippedItem() != null
        && event.type == RenderGameOverlayEvent.ElementType.TEXT) {
      if (OreDictionary.itemMatches(
              new ItemStack(IEContent.itemTool, 1, 2),
              ClientUtils.mc().thePlayer.getCurrentEquippedItem(),
              false)
          || OreDictionary.itemMatches(
              new ItemStack(IEContent.itemWireCoil, 1, OreDictionary.WILDCARD_VALUE),
              ClientUtils.mc().thePlayer.getCurrentEquippedItem(),
              false)) {
        if (ItemNBTHelper.hasKey(
            ClientUtils.mc().thePlayer.getCurrentEquippedItem(), "linkingPos")) {
          int[] link =
              ItemNBTHelper.getIntArray(
                  ClientUtils.mc().thePlayer.getCurrentEquippedItem(), "linkingPos");
          if (link != null && link.length > 3) {
            String s =
                StatCollector.translateToLocalFormatted(
                    Lib.DESC_INFO + "attachedTo", link[1], link[2], link[3]);
            ClientUtils.font()
                .drawString(
                    s,
                    event.resolution.getScaledWidth() / 2
                        - ClientUtils.font().getStringWidth(s) / 2,
                    event.resolution.getScaledHeight() - GuiIngameForge.left_height - 10,
                    WireType.ELECTRUM.getColour(null),
                    true);
          }
        }

      } else if (Utils.isHammer(ClientUtils.mc().thePlayer.getCurrentEquippedItem())) {
        MovingObjectPosition mop = ClientUtils.mc().objectMouseOver;
        if (mop != null
            && ClientUtils.mc().thePlayer.worldObj.getTileEntity(mop.blockX, mop.blockY, mop.blockZ)
                instanceof IEBlockInterfaces.IBlockOverlayText) {
          IEBlockInterfaces.IBlockOverlayText overlayBlock =
              (IBlockOverlayText)
                  ClientUtils.mc()
                      .thePlayer
                      .worldObj
                      .getTileEntity(mop.blockX, mop.blockY, mop.blockZ);
          String[] s = overlayBlock.getOverlayText(mop);
          if (s != null && s.length > 0)
            for (int is = 0; is < s.length; is++)
              ClientUtils.font()
                  .drawString(
                      s[is],
                      event.resolution.getScaledWidth() / 2 + 8,
                      event.resolution.getScaledHeight() / 2
                          + 8
                          + is * ClientUtils.font().FONT_HEIGHT,
                      0xcccccc,
                      true);
        }

      } else if (ClientUtils.mc().thePlayer.getCurrentEquippedItem().getItem()
              instanceof ItemRevolver
          && ClientUtils.mc().thePlayer.getCurrentEquippedItem().getItemDamage() != 2) {
        ClientUtils.bindTexture("immersiveengineering:textures/gui/revolver.png");
        ItemStack[] bullets =
            ((ItemRevolver) ClientUtils.mc().thePlayer.getCurrentEquippedItem().getItem())
                .getBullets(ClientUtils.mc().thePlayer.getCurrentEquippedItem());
        int bulletAmount = bullets.length;
        float dx = event.resolution.getScaledWidth() - 32 - 48;
        float dy = event.resolution.getScaledHeight() - 64;
        GL11.glPushMatrix();
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glTranslated(dx, dy, 0);
        GL11.glScalef(.5f, .5f, 1);

        ClientUtils.drawTexturedRect(0, 1, 74, 74, 0 / 256f, 74 / 256f, 51 / 256f, 125 / 256f);
        if (bulletAmount >= 18)
          ClientUtils.drawTexturedRect(
              47, 1, 103, 74, 74 / 256f, 177 / 256f, 51 / 256f, 125 / 256f);
        else if (bulletAmount > 8)
          ClientUtils.drawTexturedRect(57, 1, 79, 39, 57 / 256f, 136 / 256f, 12 / 256f, 51 / 256f);

        RenderItem ir = RenderItem.getInstance();
        int[][] slots =
            ContainerRevolver.slotPositions[bulletAmount >= 18 ? 2 : bulletAmount > 8 ? 1 : 0];
        for (int i = 0; i < bulletAmount; i++) {
          if (bullets[i] != null) {
            int x = 0;
            int y = 0;
            if (i == 0) {
              x = 29;
              y = 3;
            } else if (i - 1 < slots.length) {
              x = slots[i - 1][0];
              y = slots[i - 1][1];
            } else {
              int ii = i - (slots.length + 1);
              x = ii == 0 ? 48 : ii == 1 ? 29 : ii == 3 ? 2 : 10;
              y = ii == 1 ? 57 : ii == 3 ? 30 : ii == 4 ? 11 : 49;
            }

            ir.renderItemIntoGUI(
                ClientUtils.mc().fontRenderer, ClientUtils.mc().renderEngine, bullets[i], x, y);
          }
        }
        RenderHelper.disableStandardItemLighting();
        GL11.glDisable(GL11.GL_BLEND);
        GL11.glPopMatrix();
      } else if (ClientUtils.mc().thePlayer.getCurrentEquippedItem().getItem() instanceof ItemDrill
          && ClientUtils.mc().thePlayer.getCurrentEquippedItem().getItemDamage() == 0) {
        ItemStack drill = ClientUtils.mc().thePlayer.getCurrentEquippedItem();
        ClientUtils.bindTexture("immersiveengineering:textures/gui/fuelGauge.png");
        GL11.glColor4f(1, 1, 1, 1);
        float dx = event.resolution.getScaledWidth() - 16;
        float dy = event.resolution.getScaledHeight() - 12;
        GL11.glPushMatrix();
        GL11.glTranslated(dx, dy, 0);
        ClientUtils.drawTexturedRect(-24, -68, 33, 81, 179 / 256f, 210 / 256f, 0 / 96f, 80 / 96f);

        GL11.glTranslated(-23, -28, 0);
        FluidStack fuel = ((ItemDrill) drill.getItem()).getFluid(drill);
        //				for(float angle=80; angle>=-80; angle-=20)
        //				{
        float angle =
            80
                - (160
                    * (fuel != null
                        ? fuel.amount / (float) ((ItemDrill) drill.getItem()).getCapacity(drill)
                        : 0));
        GL11.glRotatef(angle, 0, 0, 1);
        ClientUtils.drawTexturedRect(6, -2, 24, 4, 91 / 256f, 123 / 256f, 80 / 96f, 87 / 96f);
        GL11.glRotatef(-angle, 0, 0, 1);
        //				}
        GL11.glTranslated(23, 28, 0);

        ClientUtils.drawTexturedRect(
            -33 - 17, -40 - 26, 33 + 30, 40 + 37, 108 / 256f, 174 / 256f, 0 / 96f, 80 / 96f);

        RenderItem ir = RenderItem.getInstance();
        float scale = 1; // .75f;
        GL11.glScalef(scale, scale, scale);
        ItemStack head = ((ItemDrill) drill.getItem()).getHead(drill);
        if (head != null) {
          ir.renderItemIntoGUI(
              ClientUtils.mc().fontRenderer,
              ClientUtils.mc().renderEngine,
              head,
              (int) (-48 / scale),
              (int) (-36 / scale));
          ir.renderItemOverlayIntoGUI(
              ClientUtils.font(),
              ClientUtils.mc().renderEngine,
              head,
              (int) (-48 / scale),
              (int) (-36 / scale));
          RenderHelper.disableStandardItemLighting();
        }
        GL11.glPopMatrix();
      }
    }
  }