public void renderBottomFace(Block par1Block, double par2, double par4, double par6, int par8)
    {
        Tessellator tessellator = Tessellator.instance;

        if (overrideBlockTexture >= 0)
        {
            par8 = overrideBlockTexture;
        }

        int i = (par8 & 0xf) << 4;
        int j = par8 & 0xf0;
        double d = ((double)i + par1Block.minX * 16D) / 256D;
        double d1 = (((double)i + par1Block.maxX * 16D) - 0.01D) / 256D;
        double d2 = ((double)j + par1Block.minZ * 16D) / 256D;
        double d3 = (((double)j + par1Block.maxZ * 16D) - 0.01D) / 256D;

        if (par1Block.minX < 0.0D || par1Block.maxX > 1.0D)
        {
            d = ((float)i + 0.0F) / 256F;
            d1 = ((float)i + 15.99F) / 256F;
        }

        if (par1Block.minZ < 0.0D || par1Block.maxZ > 1.0D)
        {
            d2 = ((float)j + 0.0F) / 256F;
            d3 = ((float)j + 15.99F) / 256F;
        }

        double d4 = d1;
        double d5 = d;
        double d6 = d2;
        double d7 = d3;

        if (uvRotateBottom == 2)
        {
            d = ((double)i + par1Block.minZ * 16D) / 256D;
            d2 = ((double)(j + 16) - par1Block.maxX * 16D) / 256D;
            d1 = ((double)i + par1Block.maxZ * 16D) / 256D;
            d3 = ((double)(j + 16) - par1Block.minX * 16D) / 256D;
            d4 = d1;
            d5 = d;
            d6 = d2;
            d7 = d3;
            d4 = d;
            d5 = d1;
            d2 = d3;
            d3 = d6;
        }
        else if (uvRotateBottom == 1)
        {
            d = ((double)(i + 16) - par1Block.maxZ * 16D) / 256D;
            d2 = ((double)j + par1Block.minX * 16D) / 256D;
            d1 = ((double)(i + 16) - par1Block.minZ * 16D) / 256D;
            d3 = ((double)j + par1Block.maxX * 16D) / 256D;
            d4 = d1;
            d5 = d;
            d6 = d2;
            d7 = d3;
            d = d4;
            d1 = d5;
            d6 = d3;
            d7 = d2;
        }
        else if (uvRotateBottom == 3)
        {
            d = ((double)(i + 16) - par1Block.minX * 16D) / 256D;
            d1 = ((double)(i + 16) - par1Block.maxX * 16D - 0.01D) / 256D;
            d2 = ((double)(j + 16) - par1Block.minZ * 16D) / 256D;
            d3 = ((double)(j + 16) - par1Block.maxZ * 16D - 0.01D) / 256D;
            d4 = d1;
            d5 = d;
            d6 = d2;
            d7 = d3;
        }

        double d8 = par2 + par1Block.minX;
        double d9 = par2 + par1Block.maxX;
        double d10 = par4 + par1Block.minY;
        double d11 = par6 + par1Block.minZ;
        double d12 = par6 + par1Block.maxZ;

        if (enableAO)
        {
            tessellator.setColorOpaque_F(colorRedTopLeft, colorGreenTopLeft, colorBlueTopLeft);
            tessellator.setBrightness(brightnessTopLeft);
            tessellator.addVertexWithUV(d8, d10, d12, d5, d7);
            tessellator.setColorOpaque_F(colorRedBottomLeft, colorGreenBottomLeft, colorBlueBottomLeft);
            tessellator.setBrightness(brightnessBottomLeft);
            tessellator.addVertexWithUV(d8, d10, d11, d, d2);
            tessellator.setColorOpaque_F(colorRedBottomRight, colorGreenBottomRight, colorBlueBottomRight);
            tessellator.setBrightness(brightnessBottomRight);
            tessellator.addVertexWithUV(d9, d10, d11, d4, d6);
            tessellator.setColorOpaque_F(colorRedTopRight, colorGreenTopRight, colorBlueTopRight);
            tessellator.setBrightness(brightnessTopRight);
            tessellator.addVertexWithUV(d9, d10, d12, d1, d3);
        }
        else
        {
            tessellator.addVertexWithUV(d8, d10, d12, d5, d7);
            tessellator.addVertexWithUV(d8, d10, d11, d, d2);
            tessellator.addVertexWithUV(d9, d10, d11, d4, d6);
            tessellator.addVertexWithUV(d9, d10, d12, d1, d3);
        }
    }