@Override
  public void renderTileEntityAt(
      TileEntity tile, double x, double y, double z, float animationMultiplier) {
    if (tile != null && tile instanceof TileEntityStorageRack) {
      TileEntityStorageRack tesr = (TileEntityStorageRack) tile;

      switch (tesr.getSize()) {
        case 1:
          {
            this.renderStorageRackSingle(tesr, x, y, z, animationMultiplier);
            break;
          }

        case 2:
          {
            this.renderStorageRackDual(tesr, x, y, z, animationMultiplier);
            break;
          }

        case 4:
          {
            this.renderStorageRackQuad(tesr, x, y, z, animationMultiplier);
            break;
          }
      }
    }
  }
  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 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();
    }
  }