private void renderStorageRackDual(
      TileEntityStorageRack tile, double x, double y, double z, float animationMultiplier) {
    int type = tile.getSize();
    ForgeDirection direction = ForgeDirection.getOrientation(tile.getDirection());

    ItemStack content = tile.getContainerContent(0);

    // fourteen
    Point topBoxIcon =
        translator.translate(
            ForgeDirection.NORTH,
            direction,
            new Point(px.six, px.fifteen - px.quarter, px.fourteen + 0.01));
    Point topBoxText =
        translator.translate(
            ForgeDirection.NORTH,
            direction,
            new Point(px.eight, px.ten + px.half, px.fourteen + 0.01));

    if (content != null) {
      GL11.glPushMatrix();

      GL11.glTranslated(x + topBoxIcon.x, y + topBoxIcon.y, z + topBoxIcon.z);

      this.drawIcon(direction, px.one / 4.0F, content);
      GL11.glPopMatrix();

      GL11.glPushMatrix();
      GL11.glTranslated(x + topBoxText.x, y + topBoxText.y, z + topBoxText.z);
      this.drawText(direction, px.one / 5.0F, content, tile.getContainerContentCount(0));
      GL11.glPopMatrix();

      // box 2
    }

    content = tile.getContainerContent(1);
    if (content != null) {
      topBoxIcon =
          translator.translate(
              ForgeDirection.NORTH, direction, new Point(px.six, px.seven, px.fourteen + 0.01));
      topBoxText =
          translator.translate(
              ForgeDirection.NORTH,
              direction,
              new Point(px.eight, px.three - px.quarter, px.fourteen + 0.01));

      GL11.glPushMatrix();

      GL11.glTranslated(x + topBoxIcon.x, y + topBoxIcon.y, z + topBoxIcon.z);

      this.drawIcon(direction, px.one / 4.0F, content);
      GL11.glPopMatrix();

      GL11.glPushMatrix();
      GL11.glTranslated(x + topBoxText.x, y + topBoxText.y, z + topBoxText.z);
      this.drawText(direction, px.one / 5.0F, content, tile.getContainerContentCount(1));
      GL11.glPopMatrix();
    }
  }
  private void drawIcon(ForgeDirection direction, float scale, ItemStack content) {
    GL11.glDisable(GL11.GL_LIGHTING);

    GL11.glScalef(1.0F, 1.0F, -1.0F); // stops the item appearing inside out
    GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); // rotates the item so it's not upside down

    translator.rotateTessellator(ForgeDirection.NORTH, direction, true);

    GL11.glScalef(scale, scale, scale); // shrinks the block down to the correct size
    GL11.glScalef(1.0F, 1.0F, 0.01F); // flattens the object by scaling Z to nothing

    DiscreteRenderHelper.renderItemFlatInWorld(content);
    GL11.glEnable(GL11.GL_LIGHTING);
  }
  private void drawText(ForgeDirection direction, float scale, ItemStack content, int number) {
    GL11.glDisable(GL11.GL_LIGHTING);
    GL11.glScalef(1.0F, 1.0F, -1.0F); // stops the item appearing inside out		
    GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); // rotates the item so it's not upside down

    translator.rotateTessellator(ForgeDirection.NORTH, direction, false);

    String count = this.itemCountToStacks(content, number);
    int length = fontRenderer.getStringWidth(count);
    float middle = (length / 2 * scale) - (scale / 2);

    switch (direction) {
      case SOUTH:
        {
          GL11.glTranslated(-middle - 0.5, 0.0, -0.5);
          break;
        }

      case EAST:
        {
          GL11.glTranslated(-middle, 0.0, -0.5);

          break;
        }

      case WEST:
        {
          GL11.glTranslated(-middle - 0.5, 0, 0);
          break;
        }

      default:
        {
          GL11.glTranslated(-middle, 0, 0);
        }
    }

    GL11.glScalef(scale, scale, scale); // shrinks the text down to the correct size
    DiscreteRenderHelper.renderTextInWorld(count, 0, 0, 16777215, false);
    GL11.glEnable(GL11.GL_LIGHTING);
  }
  private void renderStorageRackSingle(
      TileEntityStorageRack tile, double x, double y, double z, float animationMultiplier) {
    int type = tile.getSize();
    ForgeDirection direction = ForgeDirection.getOrientation(tile.getDirection());

    ItemStack content = tile.getContainerContent(0);

    if (content != null) {
      GL11.glPushMatrix();
      // translator.rotateTessellator(ForgeDirection.NORTH,
      // ForgeDirection.getOrientation(tile.getDirection()));
      Point p =
          translator.translate(
              ForgeDirection.NORTH,
              ForgeDirection.getOrientation(tile.getDirection()),
              new Point(px.four, px.twelve + px.half, px.fourteen + 0.01));
      GL11.glTranslated(x + p.x, y + p.y, z + p.z);
      this.drawIcon(ForgeDirection.getOrientation(tile.getDirection()), px.one / 2.0F, content);
      // translator.rotateTessellator(ForgeDirection.NORTH,
      // ForgeDirection.getOrientation(tile.getDirection()));
      /*
      GL11.glDisable(GL11.GL_LIGHTING);

         GL11.glTranslated(x + px.twelve, y + px.four + px.half, z + px.fourteen + 0.01);
         GL11.glScalef(1.0F, 1.0F, -1.0F);	//stops the item appearing inside out

         GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);	//rotates the item so it's not upside down
         GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);

         //GL11.glTranslatef(-0.5F, -0.5F, 0.0F);	//rotates slightly up to match the inventory ones
         float scale = px.one / 2.0F;
         GL11.glScalef(scale, scale, scale);		//shrinks the block down to the correct size
         GL11.glScalef(1.0F, 1.0F, 0.01F);	//flattens the object by scaling Z to nothing

      DiscreteRenderHelper.renderItemFlatInWorld(content);
      */
      GL11.glPopMatrix();

      GL11.glPushMatrix();
      p =
          translator.translate(
              ForgeDirection.NORTH,
              ForgeDirection.getOrientation(tile.getDirection()),
              new Point(px.eight, px.three + px.half, px.fourteen + 0.01));

      // GL11.glTranslated(x + p.x, y + p.y, z + p.z);

      GL11.glTranslated(x + p.x, y + p.y, z + p.z);

      this.drawText(
          ForgeDirection.getOrientation(tile.getDirection()),
          px.one / 5,
          content,
          tile.getContainerContentCount(0));
      /*
      GL11.glScalef(1.0F, 1.0F, -1.0F);			//stops the item appearing inside out
      GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);	//rotates the item so it's not upside down
      GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);

      float scale2 = px.one / 5;	//text scale is a division of a px, a whole block is * division
      GL11.glScalef(scale2, scale2, scale2);		//shrinks the block down to the correct size

      String count = this.itemCountToStacks(content, tile.getContainerContentCount(0));

      int length = fontRenderer.getStringWidth(count);
      int middle = length / 2;
      GL11.glTranslated( -middle, 0, 0);
      DiscreteRenderHelper.renderTextInWorld(count, 0, 0, 16777215, false);
      //DiscreteRenderHelper.renderTextInWorldCentered(count, xpos, 0,  16777215, false, px.sixteen * 16);

       */
      GL11.glPopMatrix();
    }
  }