public void renderBottomFace(Block block, double d, double d1, double d2, int i) {
        Tessellator tessellator = Tessellator.instance;

        if (this.overrideBlockTexture >= 0) {
            i = this.overrideBlockTexture;
        }

        int j = (i & 15) << 4;
        int k = i & 240;
        double d3 = ((double) j + block.minX * 16.0D) / 256.0D;
        double d4 = ((double) j + block.maxX * 16.0D - 0.01D) / 256.0D;
        double d5 = ((double) k + block.minZ * 16.0D) / 256.0D;
        double d6 = ((double) k + block.maxZ * 16.0D - 0.01D) / 256.0D;

        if (block.minX < 0.0D || block.maxX > 1.0D) {
            d3 = (double) (((float) j + 0.0F) / 256.0F);
            d4 = (double) (((float) j + 15.99F) / 256.0F);
        }

        if (block.minZ < 0.0D || block.maxZ > 1.0D) {
            d5 = (double) (((float) k + 0.0F) / 256.0F);
            d6 = (double) (((float) k + 15.99F) / 256.0F);
        }

        double d7 = d4;
        double d8 = d3;
        double d9 = d5;
        double d10 = d6;

        if (this.field_31082_l == 2) {
            d3 = ((double) j + block.minZ * 16.0D) / 256.0D;
            d5 = ((double) (k + 16) - block.maxX * 16.0D) / 256.0D;
            d4 = ((double) j + block.maxZ * 16.0D) / 256.0D;
            d6 = ((double) (k + 16) - block.minX * 16.0D) / 256.0D;
            d9 = d5;
            d10 = d6;
            d7 = d3;
            d8 = d4;
            d5 = d6;
            d6 = d9;
        } else if (this.field_31082_l == 1) {
            d3 = ((double) (j + 16) - block.maxZ * 16.0D) / 256.0D;
            d5 = ((double) k + block.minX * 16.0D) / 256.0D;
            d4 = ((double) (j + 16) - block.minZ * 16.0D) / 256.0D;
            d6 = ((double) k + block.maxX * 16.0D) / 256.0D;
            d7 = d4;
            d8 = d3;
            d3 = d4;
            d4 = d8;
            d9 = d6;
            d10 = d5;
        } else if (this.field_31082_l == 3) {
            d3 = ((double) (j + 16) - block.minX * 16.0D) / 256.0D;
            d4 = ((double) (j + 16) - block.maxX * 16.0D - 0.01D) / 256.0D;
            d5 = ((double) (k + 16) - block.minZ * 16.0D) / 256.0D;
            d6 = ((double) (k + 16) - block.maxZ * 16.0D - 0.01D) / 256.0D;
            d7 = d4;
            d8 = d3;
            d9 = d5;
            d10 = d6;
        }

        double d11 = d + block.minX;
        double d12 = d + block.maxX;
        double d13 = d1 + block.minY;
        double d14 = d2 + block.minZ;
        double d15 = d2 + block.maxZ;

        if (this.enableAO) {
            tessellator.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft);
            tessellator.addVertexWithUV(d11, d13, d15, d8, d10);
            tessellator.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft);
            tessellator.addVertexWithUV(d11, d13, d14, d3, d5);
            tessellator.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight);
            tessellator.addVertexWithUV(d12, d13, d14, d7, d9);
            tessellator.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight);
            tessellator.addVertexWithUV(d12, d13, d15, d4, d6);
        } else {
            tessellator.addVertexWithUV(d11, d13, d15, d8, d10);
            tessellator.addVertexWithUV(d11, d13, d14, d3, d5);
            tessellator.addVertexWithUV(d12, d13, d14, d7, d9);
            tessellator.addVertexWithUV(d12, d13, d15, d4, d6);
        }

    }