    001package net.minecraft.client.renderer;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005import net.minecraft.block.Block;
    006import net.minecraft.block.BlockAnvil;
    007import net.minecraft.block.BlockBeacon;
    008import net.minecraft.block.BlockBed;
    009import net.minecraft.block.BlockBrewingStand;
    010import net.minecraft.block.BlockCauldron;
    011import net.minecraft.block.BlockCocoa;
    012import net.minecraft.block.BlockComparator;
    013import net.minecraft.block.BlockDirectional;
    014import net.minecraft.block.BlockDragonEgg;
    015import net.minecraft.block.BlockEndPortalFrame;
    016import net.minecraft.block.BlockFence;
    017import net.minecraft.block.BlockFenceGate;
    018import net.minecraft.block.BlockFire;
    019import net.minecraft.block.BlockFlower;
    020import net.minecraft.block.BlockFlowerPot;
    021import net.minecraft.block.BlockFluid;
    022import net.minecraft.block.BlockGrass;
    023import net.minecraft.block.BlockHopper;
    024import net.minecraft.block.BlockPane;
    025import net.minecraft.block.BlockPistonBase;
    026import net.minecraft.block.BlockPistonExtension;
    027import net.minecraft.block.BlockRailBase;
    028import net.minecraft.block.BlockRedstoneLogic;
    029import net.minecraft.block.BlockRedstoneRepeater;
    030import net.minecraft.block.BlockRedstoneWire;
    031import net.minecraft.block.BlockStairs;
    032import net.minecraft.block.BlockStem;
    033import net.minecraft.block.BlockTripWire;
    034import net.minecraft.block.BlockWall;
    035import net.minecraft.block.material.Material;
    036import net.minecraft.client.Minecraft;
    037import net.minecraft.src.FMLRenderAccessLibrary;
    038import net.minecraft.util.Direction;
    039import net.minecraft.util.Icon;
    040import net.minecraft.util.MathHelper;
    041import net.minecraft.util.Vec3;
    042import net.minecraft.world.IBlockAccess;
    043import net.minecraft.world.World;
    044import org.lwjgl.opengl.GL11;
    045import org.lwjgl.opengl.GL12;
    046
    047import static net.minecraftforge.common.ForgeDirection.*;
    048
    049@SideOnly(Side.CLIENT)
    050public class RenderBlocks
    051{
    052    /** The IBlockAccess used by this instance of RenderBlocks */
    053    public IBlockAccess blockAccess;
    054
    055    /**
    056     * If set to >=0, all block faces will be rendered using this texture index
    057     */
    058    public Icon overrideBlockTexture = null;
    059
    060    /**
    061     * Set to true if the texture should be flipped horizontally during render*Face
    062     */
    063    public boolean flipTexture = false;
    064
    065    /**
    066     * If true, renders all faces on all blocks rather than using the logic in Block.shouldSideBeRendered.  Unused.
    067     */
    068    public boolean renderAllFaces = false;
    069
    070    /** Fancy grass side matching biome */
    071    public static boolean fancyGrass = true;
    072    public boolean useInventoryTint = true;
    073
    074    /** The minimum X value for rendering (default 0.0). */
    075    public double renderMinX;
    076
    077    /** The maximum X value for rendering (default 1.0). */
    078    public double renderMaxX;
    079
    080    /** The minimum Y value for rendering (default 0.0). */
    081    public double renderMinY;
    082
    083    /** The maximum Y value for rendering (default 1.0). */
    084    public double renderMaxY;
    085
    086    /** The minimum Z value for rendering (default 0.0). */
    087    public double renderMinZ;
    088
    089    /** The maximum Z value for rendering (default 1.0). */
    090    public double renderMaxZ;
    091
    092    /**
    093     * Set by overrideBlockBounds, to keep this class from changing the visual bounding box.
    094     */
    095    public boolean lockBlockBounds = false;
    096    public boolean partialRenderBounds = false;
    097    public final Minecraft minecraftRB;
    098    public int uvRotateEast = 0;
    099    public int uvRotateWest = 0;
    100    public int uvRotateSouth = 0;
    101    public int uvRotateNorth = 0;
    102    public int uvRotateTop = 0;
    103    public int uvRotateBottom = 0;
    104
    105    /** Whether ambient occlusion is enabled or not */
    106    public boolean enableAO;
    107
    108    /**
    109     * Used as a scratch variable for ambient occlusion on the north/bottom/east corner.
    110     */
    111    public float aoLightValueScratchXYZNNN;
    112
    113    /**
    114     * Used as a scratch variable for ambient occlusion between the bottom face and the north face.
    115     */
    116    public float aoLightValueScratchXYNN;
    117
    118    /**
    119     * Used as a scratch variable for ambient occlusion on the north/bottom/west corner.
    120     */
    121    public float aoLightValueScratchXYZNNP;
    122
    123    /**
    124     * Used as a scratch variable for ambient occlusion between the bottom face and the east face.
    125     */
    126    public float aoLightValueScratchYZNN;
    127
    128    /**
    129     * Used as a scratch variable for ambient occlusion between the bottom face and the west face.
    130     */
    131    public float aoLightValueScratchYZNP;
    132
    133    /**
    134     * Used as a scratch variable for ambient occlusion on the south/bottom/east corner.
    135     */
    136    public float aoLightValueScratchXYZPNN;
    137
    138    /**
    139     * Used as a scratch variable for ambient occlusion between the bottom face and the south face.
    140     */
    141    public float aoLightValueScratchXYPN;
    142
    143    /**
    144     * Used as a scratch variable for ambient occlusion on the south/bottom/west corner.
    145     */
    146    public float aoLightValueScratchXYZPNP;
    147
    148    /**
    149     * Used as a scratch variable for ambient occlusion on the north/top/east corner.
    150     */
    151    public float aoLightValueScratchXYZNPN;
    152
    153    /**
    154     * Used as a scratch variable for ambient occlusion between the top face and the north face.
    155     */
    156    public float aoLightValueScratchXYNP;
    157
    158    /**
    159     * Used as a scratch variable for ambient occlusion on the north/top/west corner.
    160     */
    161    public float aoLightValueScratchXYZNPP;
    162
    163    /**
    164     * Used as a scratch variable for ambient occlusion between the top face and the east face.
    165     */
    166    public float aoLightValueScratchYZPN;
    167
    168    /**
    169     * Used as a scratch variable for ambient occlusion on the south/top/east corner.
    170     */
    171    public float aoLightValueScratchXYZPPN;
    172
    173    /**
    174     * Used as a scratch variable for ambient occlusion between the top face and the south face.
    175     */
    176    public float aoLightValueScratchXYPP;
    177
    178    /**
    179     * Used as a scratch variable for ambient occlusion between the top face and the west face.
    180     */
    181    public float aoLightValueScratchYZPP;
    182
    183    /**
    184     * Used as a scratch variable for ambient occlusion on the south/top/west corner.
    185     */
    186    public float aoLightValueScratchXYZPPP;
    187
    188    /**
    189     * Used as a scratch variable for ambient occlusion between the north face and the east face.
    190     */
    191    public float aoLightValueScratchXZNN;
    192
    193    /**
    194     * Used as a scratch variable for ambient occlusion between the south face and the east face.
    195     */
    196    public float aoLightValueScratchXZPN;
    197
    198    /**
    199     * Used as a scratch variable for ambient occlusion between the north face and the west face.
    200     */
    201    public float aoLightValueScratchXZNP;
    202
    203    /**
    204     * Used as a scratch variable for ambient occlusion between the south face and the west face.
    205     */
    206    public float aoLightValueScratchXZPP;
    207
    208    /** Ambient occlusion brightness XYZNNN */
    209    public int aoBrightnessXYZNNN;
    210
    211    /** Ambient occlusion brightness XYNN */
    212    public int aoBrightnessXYNN;
    213
    214    /** Ambient occlusion brightness XYZNNP */
    215    public int aoBrightnessXYZNNP;
    216
    217    /** Ambient occlusion brightness YZNN */
    218    public int aoBrightnessYZNN;
    219
    220    /** Ambient occlusion brightness YZNP */
    221    public int aoBrightnessYZNP;
    222
    223    /** Ambient occlusion brightness XYZPNN */
    224    public int aoBrightnessXYZPNN;
    225
    226    /** Ambient occlusion brightness XYPN */
    227    public int aoBrightnessXYPN;
    228
    229    /** Ambient occlusion brightness XYZPNP */
    230    public int aoBrightnessXYZPNP;
    231
    232    /** Ambient occlusion brightness XYZNPN */
    233    public int aoBrightnessXYZNPN;
    234
    235    /** Ambient occlusion brightness XYNP */
    236    public int aoBrightnessXYNP;
    237
    238    /** Ambient occlusion brightness XYZNPP */
    239    public int aoBrightnessXYZNPP;
    240
    241    /** Ambient occlusion brightness YZPN */
    242    public int aoBrightnessYZPN;
    243
    244    /** Ambient occlusion brightness XYZPPN */
    245    public int aoBrightnessXYZPPN;
    246
    247    /** Ambient occlusion brightness XYPP */
    248    public int aoBrightnessXYPP;
    249
    250    /** Ambient occlusion brightness YZPP */
    251    public int aoBrightnessYZPP;
    252
    253    /** Ambient occlusion brightness XYZPPP */
    254    public int aoBrightnessXYZPPP;
    255
    256    /** Ambient occlusion brightness XZNN */
    257    public int aoBrightnessXZNN;
    258
    259    /** Ambient occlusion brightness XZPN */
    260    public int aoBrightnessXZPN;
    261
    262    /** Ambient occlusion brightness XZNP */
    263    public int aoBrightnessXZNP;
    264
    265    /** Ambient occlusion brightness XZPP */
    266    public int aoBrightnessXZPP;
    267
    268    /** Brightness top left */
    269    public int brightnessTopLeft;
    270
    271    /** Brightness bottom left */
    272    public int brightnessBottomLeft;
    273
    274    /** Brightness bottom right */
    275    public int brightnessBottomRight;
    276
    277    /** Brightness top right */
    278    public int brightnessTopRight;
    279
    280    /** Red color value for the top left corner */
    281    public float colorRedTopLeft;
    282
    283    /** Red color value for the bottom left corner */
    284    public float colorRedBottomLeft;
    285
    286    /** Red color value for the bottom right corner */
    287    public float colorRedBottomRight;
    288
    289    /** Red color value for the top right corner */
    290    public float colorRedTopRight;
    291
    292    /** Green color value for the top left corner */
    293    public float colorGreenTopLeft;
    294
    295    /** Green color value for the bottom left corner */
    296    public float colorGreenBottomLeft;
    297
    298    /** Green color value for the bottom right corner */
    299    public float colorGreenBottomRight;
    300
    301    /** Green color value for the top right corner */
    302    public float colorGreenTopRight;
    303
    304    /** Blue color value for the top left corner */
    305    public float colorBlueTopLeft;
    306
    307    /** Blue color value for the bottom left corner */
    308    public float colorBlueBottomLeft;
    309
    310    /** Blue color value for the bottom right corner */
    311    public float colorBlueBottomRight;
    312
    313    /** Blue color value for the top right corner */
    314    public float colorBlueTopRight;
    315
    316    public RenderBlocks(IBlockAccess par1IBlockAccess)
    317    {
    318        this.blockAccess = par1IBlockAccess;
    319        this.minecraftRB = Minecraft.getMinecraft();
    320    }
    321
    322    public RenderBlocks()
    323    {
    324        this.minecraftRB = Minecraft.getMinecraft();
    325    }
    326
    327    /**
    328     * Sets overrideBlockTexture
    329     */
    330    public void setOverrideBlockTexture(Icon par1Icon)
    331    {
    332        this.overrideBlockTexture = par1Icon;
    333    }
    334
    335    /**
    336     * Clear override block texture
    337     */
    338    public void clearOverrideBlockTexture()
    339    {
    340        this.overrideBlockTexture = null;
    341    }
    342
    343    public boolean hasOverrideBlockTexture()
    344    {
    345        return this.overrideBlockTexture != null;
    346    }
    347
    348    /**
    349     * Sets the bounding box for the block to draw in, e.g. 0.25-0.75 on all axes for a half-size, centered block.
    350     */
    351    public void setRenderBounds(double par1, double par3, double par5, double par7, double par9, double par11)
    352    {
    353        if (!this.lockBlockBounds)
    354        {
    355            this.renderMinX = par1;
    356            this.renderMaxX = par7;
    357            this.renderMinY = par3;
    358            this.renderMaxY = par9;
    359            this.renderMinZ = par5;
    360            this.renderMaxZ = par11;
    361            this.partialRenderBounds = this.minecraftRB.gameSettings.ambientOcclusion >= 2 && (this.renderMinX > 0.0D || this.renderMaxX < 1.0D || this.renderMinY > 0.0D || this.renderMaxY < 1.0D || this.renderMinZ > 0.0D || this.renderMaxZ < 1.0D);
    362        }
    363    }
    364
    365    /**
    366     * Like setRenderBounds, but automatically pulling the bounds from the given Block.
    367     */
    368    public void setRenderBoundsFromBlock(Block par1Block)
    369    {
    370        if (!this.lockBlockBounds)
    371        {
    372            this.renderMinX = par1Block.getBlockBoundsMinX();
    373            this.renderMaxX = par1Block.getBlockBoundsMaxX();
    374            this.renderMinY = par1Block.getBlockBoundsMinY();
    375            this.renderMaxY = par1Block.getBlockBoundsMaxY();
    376            this.renderMinZ = par1Block.getBlockBoundsMinZ();
    377            this.renderMaxZ = par1Block.getBlockBoundsMaxZ();
    378            this.partialRenderBounds = this.minecraftRB.gameSettings.ambientOcclusion >= 2 && (this.renderMinX > 0.0D || this.renderMaxX < 1.0D || this.renderMinY > 0.0D || this.renderMaxY < 1.0D || this.renderMinZ > 0.0D || this.renderMaxZ < 1.0D);
    379        }
    380    }
    381
    382    /**
    383     * Like setRenderBounds, but locks the values so that RenderBlocks won't change them.  If you use this, you must
    384     * call unlockBlockBounds after you finish rendering!
    385     */
    386    public void overrideBlockBounds(double par1, double par3, double par5, double par7, double par9, double par11)
    387    {
    388        this.renderMinX = par1;
    389        this.renderMaxX = par7;
    390        this.renderMinY = par3;
    391        this.renderMaxY = par9;
    392        this.renderMinZ = par5;
    393        this.renderMaxZ = par11;
    394        this.lockBlockBounds = true;
    395        this.partialRenderBounds = this.minecraftRB.gameSettings.ambientOcclusion >= 2 && (this.renderMinX > 0.0D || this.renderMaxX < 1.0D || this.renderMinY > 0.0D || this.renderMaxY < 1.0D || this.renderMinZ > 0.0D || this.renderMaxZ < 1.0D);
    396    }
    397
    398    /**
    399     * Unlocks the visual bounding box so that RenderBlocks can change it again.
    400     */
    401    public void unlockBlockBounds()
    402    {
    403        this.lockBlockBounds = false;
    404    }
    405
    406    /**
    407     * Renders a block using the given texture instead of the block's own default texture
    408     */
    409    public void renderBlockUsingTexture(Block par1Block, int par2, int par3, int par4, Icon par5Icon)
    410    {
    411        this.setOverrideBlockTexture(par5Icon);
    412        this.renderBlockByRenderType(par1Block, par2, par3, par4);
    413        this.clearOverrideBlockTexture();
    414    }
    415
    416    /**
    417     * Render all faces of a block
    418     */
    419    public void renderBlockAllFaces(Block par1Block, int par2, int par3, int par4)
    420    {
    421        this.renderAllFaces = true;
    422        this.renderBlockByRenderType(par1Block, par2, par3, par4);
    423        this.renderAllFaces = false;
    424    }
    425
    426    /**
    427     * Renders the block at the given coordinates using the block's rendering type
    428     */
    429    public boolean renderBlockByRenderType(Block par1Block, int par2, int par3, int par4)
    430    {
    431        int l = par1Block.getRenderType();
    432
    433        if (l == -1)
    434        {
    435            return false;
    436        }
    437        else
    438        {
    439            par1Block.setBlockBoundsBasedOnState(this.blockAccess, par2, par3, par4);
    440            this.setRenderBoundsFromBlock(par1Block);
    441
    442            switch (l)
    443            {
    444                //regex: ' : \(l == ([\d]+) \?' replace: ';\ncase \1: return' ::: IMPORTANT: REMEMBER THIS ON FIRST line!
    445                case 0: return this.renderStandardBlock(par1Block, par2, par3, par4);
    446                case 4: return this.renderBlockFluids(par1Block, par2, par3, par4);
    447                case 31: return this.renderBlockLog(par1Block, par2, par3, par4);
    448                case 1: return this.renderCrossedSquares(par1Block, par2, par3, par4);
    449                case 2: return this.renderBlockTorch(par1Block, par2, par3, par4);
    450                case 20: return this.renderBlockVine(par1Block, par2, par3, par4);
    451                case 11: return this.renderBlockFence((BlockFence)par1Block, par2, par3, par4);
    452                case 39: return this.renderBlockQuartz(par1Block, par2, par3, par4);
    453                case 5: return this.renderBlockRedstoneWire(par1Block, par2, par3, par4);
    454                case 13: return this.renderBlockCactus(par1Block, par2, par3, par4);
    455                case 9: return this.renderBlockMinecartTrack((BlockRailBase)par1Block, par2, par3, par4);
    456                case 19: return this.renderBlockStem(par1Block, par2, par3, par4);
    457                case 23: return this.renderBlockLilyPad(par1Block, par2, par3, par4);
    458                case 6: return this.renderBlockCrops(par1Block, par2, par3, par4);
    459                case 3: return this.renderBlockFire((BlockFire)par1Block, par2, par3, par4);
    460                case 8: return this.renderBlockLadder(par1Block, par2, par3, par4);
    461                case 7: return this.renderBlockDoor(par1Block, par2, par3, par4);
    462                case 10: return this.renderBlockStairs((BlockStairs)par1Block, par2, par3, par4);
    463                case 27: return this.renderBlockDragonEgg((BlockDragonEgg)par1Block, par2, par3, par4);
    464                case 32: return this.renderBlockWall((BlockWall)par1Block, par2, par3, par4);
    465                case 12: return this.renderBlockLever(par1Block, par2, par3, par4);
    466                case 29: return this.renderBlockTripWireSource(par1Block, par2, par3, par4);
    467                case 30: return this.renderBlockTripWire(par1Block, par2, par3, par4);
    468                case 14: return this.renderBlockBed(par1Block, par2, par3, par4);
    469                case 15: return this.renderBlockRepeater((BlockRedstoneRepeater)par1Block, par2, par3, par4);
    470                case 36: return this.renderBlockRedstoneLogic((BlockRedstoneLogic)par1Block, par2, par3, par4);
    471                case 37: return this.renderBlockComparator((BlockComparator)par1Block, par2, par3, par4);
    472                case 16: return this.renderPistonBase(par1Block, par2, par3, par4, false);
    473                case 17: return this.renderPistonExtension(par1Block, par2, par3, par4, true);
    474                case 18: return this.renderBlockPane((BlockPane)par1Block, par2, par3, par4);
    475                case 21: return this.renderBlockFenceGate((BlockFenceGate)par1Block, par2, par3, par4);
    476                case 24: return this.renderBlockCauldron((BlockCauldron)par1Block, par2, par3, par4);
    477                case 33: return this.renderBlockFlowerpot((BlockFlowerPot)par1Block, par2, par3, par4);
    478                case 35: return this.renderBlockAnvil((BlockAnvil)par1Block, par2, par3, par4);
    479                case 25: return this.renderBlockBrewingStand((BlockBrewingStand)par1Block, par2, par3, par4);
    480                case 26: return this.renderBlockEndPortalFrame((BlockEndPortalFrame)par1Block, par2, par3, par4);
    481                case 28: return this.renderBlockCocoa((BlockCocoa)par1Block, par2, par3, par4);
    482                case 34: return this.renderBlockBeacon((BlockBeacon)par1Block, par2, par3, par4);
    483                case 38: return this.renderBlockHopper((BlockHopper)par1Block, par2, par3, par4);
    484                default: return FMLRenderAccessLibrary.renderWorldBlock(this, blockAccess, par2, par3, par4, par1Block, l);
    485            }
    486        }
    487    }
    488
    489    /**
    490     * Render BlockEndPortalFrame
    491     */
    492    public boolean renderBlockEndPortalFrame(BlockEndPortalFrame par1BlockEndPortalFrame, int par2, int par3, int par4)
    493    {
    494        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    495        int i1 = l & 3;
    496
    497        if (i1 == 0)
    498        {
    499            this.uvRotateTop = 3;
    500        }
    501        else if (i1 == 3)
    502        {
    503            this.uvRotateTop = 1;
    504        }
    505        else if (i1 == 1)
    506        {
    507            this.uvRotateTop = 2;
    508        }
    509
    510        if (!BlockEndPortalFrame.isEnderEyeInserted(l))
    511        {
    512            this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.8125D, 1.0D);
    513            this.renderStandardBlock(par1BlockEndPortalFrame, par2, par3, par4);
    514            this.uvRotateTop = 0;
    515            return true;
    516        }
    517        else
    518        {
    519            this.renderAllFaces = true;
    520            this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.8125D, 1.0D);
    521            this.renderStandardBlock(par1BlockEndPortalFrame, par2, par3, par4);
    522            this.setOverrideBlockTexture(par1BlockEndPortalFrame.func_94398_p());
    523            this.setRenderBounds(0.25D, 0.8125D, 0.25D, 0.75D, 1.0D, 0.75D);
    524            this.renderStandardBlock(par1BlockEndPortalFrame, par2, par3, par4);
    525            this.renderAllFaces = false;
    526            this.clearOverrideBlockTexture();
    527            this.uvRotateTop = 0;
    528            return true;
    529        }
    530    }
    531
    532    /**
    533     * render a bed at the given coordinates
    534     */
    535    public boolean renderBlockBed(Block par1Block, int par2, int par3, int par4)
    536    {
    537        Tessellator tessellator = Tessellator.instance;
    538        int i1 = par1Block.getBedDirection(blockAccess, par2, par3, par4);
    539        boolean flag = par1Block.isBedFoot(blockAccess, par2, par3, par4);
    540        float f = 0.5F;
    541        float f1 = 1.0F;
    542        float f2 = 0.8F;
    543        float f3 = 0.6F;
    544        int j1 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4);
    545        tessellator.setBrightness(j1);
    546        tessellator.setColorOpaque_F(f, f, f);
    547        Icon icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 0);
    548        if (hasOverrideBlockTexture()) icon = overrideBlockTexture; //BugFix Proper breaking texture on underside
    549        double d0 = (double)icon.getMinU();
    550        double d1 = (double)icon.getMaxU();
    551        double d2 = (double)icon.getMinV();
    552        double d3 = (double)icon.getMaxV();
    553        double d4 = (double)par2 + this.renderMinX;
    554        double d5 = (double)par2 + this.renderMaxX;
    555        double d6 = (double)par3 + this.renderMinY + 0.1875D;
    556        double d7 = (double)par4 + this.renderMinZ;
    557        double d8 = (double)par4 + this.renderMaxZ;
    558        tessellator.addVertexWithUV(d4, d6, d8, d0, d3);
    559        tessellator.addVertexWithUV(d4, d6, d7, d0, d2);
    560        tessellator.addVertexWithUV(d5, d6, d7, d1, d2);
    561        tessellator.addVertexWithUV(d5, d6, d8, d1, d3);
    562        tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4));
    563        tessellator.setColorOpaque_F(f1, f1, f1);
    564        icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 1);
    565        if (hasOverrideBlockTexture()) icon = overrideBlockTexture; //BugFix Proper breaking texture on underside
    566        d0 = (double)icon.getMinU();
    567        d1 = (double)icon.getMaxU();
    568        d2 = (double)icon.getMinV();
    569        d3 = (double)icon.getMaxV();
    570        d4 = d0;
    571        d5 = d1;
    572        d6 = d2;
    573        d7 = d2;
    574        d8 = d0;
    575        double d9 = d1;
    576        double d10 = d3;
    577        double d11 = d3;
    578
    579        if (i1 == 0)
    580        {
    581            d5 = d0;
    582            d6 = d3;
    583            d8 = d1;
    584            d11 = d2;
    585        }
    586        else if (i1 == 2)
    587        {
    588            d4 = d1;
    589            d7 = d3;
    590            d9 = d0;
    591            d10 = d2;
    592        }
    593        else if (i1 == 3)
    594        {
    595            d4 = d1;
    596            d7 = d3;
    597            d9 = d0;
    598            d10 = d2;
    599            d5 = d0;
    600            d6 = d3;
    601            d8 = d1;
    602            d11 = d2;
    603        }
    604
    605        double d12 = (double)par2 + this.renderMinX;
    606        double d13 = (double)par2 + this.renderMaxX;
    607        double d14 = (double)par3 + this.renderMaxY;
    608        double d15 = (double)par4 + this.renderMinZ;
    609        double d16 = (double)par4 + this.renderMaxZ;
    610        tessellator.addVertexWithUV(d13, d14, d16, d8, d10);
    611        tessellator.addVertexWithUV(d13, d14, d15, d4, d6);
    612        tessellator.addVertexWithUV(d12, d14, d15, d5, d7);
    613        tessellator.addVertexWithUV(d12, d14, d16, d9, d11);
    614        int k1 = Direction.directionToFacing[i1];
    615
    616        if (flag)
    617        {
    618            k1 = Direction.directionToFacing[Direction.rotateOpposite[i1]];
    619        }
    620
    621        byte b0 = 4;
    622
    623        switch (i1)
    624        {
    625            case 0:
    626                b0 = 5;
    627                break;
    628            case 1:
    629                b0 = 3;
    630            case 2:
    631            default:
    632                break;
    633            case 3:
    634                b0 = 2;
    635        }
    636
    637        if (k1 != 2 && (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3, par4 - 1, 2)))
    638        {
    639            tessellator.setBrightness(this.renderMinZ > 0.0D ? j1 : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 - 1));
    640            tessellator.setColorOpaque_F(f2, f2, f2);
    641            this.flipTexture = b0 == 2;
    642            this.renderEastFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 2));
    643        }
    644
    645        if (k1 != 3 && (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3, par4 + 1, 3)))
    646        {
    647            tessellator.setBrightness(this.renderMaxZ < 1.0D ? j1 : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 + 1));
    648            tessellator.setColorOpaque_F(f2, f2, f2);
    649            this.flipTexture = b0 == 3;
    650            this.renderWestFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 3));
    651        }
    652
    653        if (k1 != 4 && (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2 - 1, par3, par4, 4)))
    654        {
    655            tessellator.setBrightness(this.renderMinZ > 0.0D ? j1 : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4));
    656            tessellator.setColorOpaque_F(f3, f3, f3);
    657            this.flipTexture = b0 == 4;
    658            this.renderNorthFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 4));
    659        }
    660
    661        if (k1 != 5 && (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2 + 1, par3, par4, 5)))
    662        {
    663            tessellator.setBrightness(this.renderMaxZ < 1.0D ? j1 : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4));
    664            tessellator.setColorOpaque_F(f3, f3, f3);
    665            this.flipTexture = b0 == 5;
    666            this.renderSouthFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 5));
    667        }
    668
    669        this.flipTexture = false;
    670        return true;
    671    }
    672
    673    /**
    674     * Render BlockBrewingStand
    675     */
    676    public boolean renderBlockBrewingStand(BlockBrewingStand par1BlockBrewingStand, int par2, int par3, int par4)
    677    {
    678        this.setRenderBounds(0.4375D, 0.0D, 0.4375D, 0.5625D, 0.875D, 0.5625D);
    679        this.renderStandardBlock(par1BlockBrewingStand, par2, par3, par4);
    680        this.setOverrideBlockTexture(par1BlockBrewingStand.func_94448_e());
    681        this.setRenderBounds(0.5625D, 0.0D, 0.3125D, 0.9375D, 0.125D, 0.6875D);
    682        this.renderStandardBlock(par1BlockBrewingStand, par2, par3, par4);
    683        this.setRenderBounds(0.125D, 0.0D, 0.0625D, 0.5D, 0.125D, 0.4375D);
    684        this.renderStandardBlock(par1BlockBrewingStand, par2, par3, par4);
    685        this.setRenderBounds(0.125D, 0.0D, 0.5625D, 0.5D, 0.125D, 0.9375D);
    686        this.renderStandardBlock(par1BlockBrewingStand, par2, par3, par4);
    687        this.clearOverrideBlockTexture();
    688        Tessellator tessellator = Tessellator.instance;
    689        tessellator.setBrightness(par1BlockBrewingStand.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    690        float f = 1.0F;
    691        int l = par1BlockBrewingStand.colorMultiplier(this.blockAccess, par2, par3, par4);
    692        float f1 = (float)(l >> 16 & 255) / 255.0F;
    693        float f2 = (float)(l >> 8 & 255) / 255.0F;
    694        float f3 = (float)(l & 255) / 255.0F;
    695
    696        if (EntityRenderer.anaglyphEnable)
    697        {
    698            float f4 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F;
    699            float f5 = (f1 * 30.0F + f2 * 70.0F) / 100.0F;
    700            float f6 = (f1 * 30.0F + f3 * 70.0F) / 100.0F;
    701            f1 = f4;
    702            f2 = f5;
    703            f3 = f6;
    704        }
    705
    706        tessellator.setColorOpaque_F(f * f1, f * f2, f * f3);
    707        Icon icon = this.getBlockIconFromSideAndMetadata(par1BlockBrewingStand, 0, 0);
    708
    709        if (this.hasOverrideBlockTexture())
    710        {
    711            icon = this.overrideBlockTexture;
    712        }
    713
    714        double d0 = (double)icon.getMinV();
    715        double d1 = (double)icon.getMaxV();
    716        int i1 = this.blockAccess.getBlockMetadata(par2, par3, par4);
    717
    718        for (int j1 = 0; j1 < 3; ++j1)
    719        {
    720            double d2 = (double)j1 * Math.PI * 2.0D / 3.0D + (Math.PI / 2D);
    721            double d3 = (double)icon.getInterpolatedU(8.0D);
    722            double d4 = (double)icon.getMaxU();
    723
    724            if ((i1 & 1 << j1) != 0)
    725            {
    726                d4 = (double)icon.getMinU();
    727            }
    728
    729            double d5 = (double)par2 + 0.5D;
    730            double d6 = (double)par2 + 0.5D + Math.sin(d2) * 8.0D / 16.0D;
    731            double d7 = (double)par4 + 0.5D;
    732            double d8 = (double)par4 + 0.5D + Math.cos(d2) * 8.0D / 16.0D;
    733            tessellator.addVertexWithUV(d5, (double)(par3 + 1), d7, d3, d0);
    734            tessellator.addVertexWithUV(d5, (double)(par3 + 0), d7, d3, d1);
    735            tessellator.addVertexWithUV(d6, (double)(par3 + 0), d8, d4, d1);
    736            tessellator.addVertexWithUV(d6, (double)(par3 + 1), d8, d4, d0);
    737            tessellator.addVertexWithUV(d6, (double)(par3 + 1), d8, d4, d0);
    738            tessellator.addVertexWithUV(d6, (double)(par3 + 0), d8, d4, d1);
    739            tessellator.addVertexWithUV(d5, (double)(par3 + 0), d7, d3, d1);
    740            tessellator.addVertexWithUV(d5, (double)(par3 + 1), d7, d3, d0);
    741        }
    742
    743        par1BlockBrewingStand.setBlockBoundsForItemRender();
    744        return true;
    745    }
    746
    747    /**
    748     * Render block cauldron
    749     */
    750    public boolean renderBlockCauldron(BlockCauldron par1BlockCauldron, int par2, int par3, int par4)
    751    {
    752        this.renderStandardBlock(par1BlockCauldron, par2, par3, par4);
    753        Tessellator tessellator = Tessellator.instance;
    754        tessellator.setBrightness(par1BlockCauldron.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    755        float f = 1.0F;
    756        int l = par1BlockCauldron.colorMultiplier(this.blockAccess, par2, par3, par4);
    757        float f1 = (float)(l >> 16 & 255) / 255.0F;
    758        float f2 = (float)(l >> 8 & 255) / 255.0F;
    759        float f3 = (float)(l & 255) / 255.0F;
    760        float f4;
    761
    762        if (EntityRenderer.anaglyphEnable)
    763        {
    764            float f5 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F;
    765            f4 = (f1 * 30.0F + f2 * 70.0F) / 100.0F;
    766            float f6 = (f1 * 30.0F + f3 * 70.0F) / 100.0F;
    767            f1 = f5;
    768            f2 = f4;
    769            f3 = f6;
    770        }
    771
    772        tessellator.setColorOpaque_F(f * f1, f * f2, f * f3);
    773        Icon icon = par1BlockCauldron.getBlockTextureFromSide(2);
    774        f4 = 0.125F;
    775        this.renderSouthFace(par1BlockCauldron, (double)((float)par2 - 1.0F + f4), (double)par3, (double)par4, icon);
    776        this.renderNorthFace(par1BlockCauldron, (double)((float)par2 + 1.0F - f4), (double)par3, (double)par4, icon);
    777        this.renderWestFace(par1BlockCauldron, (double)par2, (double)par3, (double)((float)par4 - 1.0F + f4), icon);
    778        this.renderEastFace(par1BlockCauldron, (double)par2, (double)par3, (double)((float)par4 + 1.0F - f4), icon);
    779        Icon icon1 = BlockCauldron.func_94375_b("cauldron_inner");
    780        this.renderTopFace(par1BlockCauldron, (double)par2, (double)((float)par3 - 1.0F + 0.25F), (double)par4, icon1);
    781        this.renderBottomFace(par1BlockCauldron, (double)par2, (double)((float)par3 + 1.0F - 0.75F), (double)par4, icon1);
    782        int i1 = this.blockAccess.getBlockMetadata(par2, par3, par4);
    783
    784        if (i1 > 0)
    785        {
    786            Icon icon2 = BlockFluid.func_94424_b("water");
    787
    788            if (i1 > 3)
    789            {
    790                i1 = 3;
    791            }
    792
    793            this.renderTopFace(par1BlockCauldron, (double)par2, (double)((float)par3 - 1.0F + (6.0F + (float)i1 * 3.0F) / 16.0F), (double)par4, icon2);
    794        }
    795
    796        return true;
    797    }
    798
    799    /**
    800     * Renders flower pot
    801     */
    802    public boolean renderBlockFlowerpot(BlockFlowerPot par1BlockFlowerPot, int par2, int par3, int par4)
    803    {
    804        this.renderStandardBlock(par1BlockFlowerPot, par2, par3, par4);
    805        Tessellator tessellator = Tessellator.instance;
    806        tessellator.setBrightness(par1BlockFlowerPot.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    807        float f = 1.0F;
    808        int l = par1BlockFlowerPot.colorMultiplier(this.blockAccess, par2, par3, par4);
    809        Icon icon = this.getBlockIconFromSide(par1BlockFlowerPot, 0);
    810        float f1 = (float)(l >> 16 & 255) / 255.0F;
    811        float f2 = (float)(l >> 8 & 255) / 255.0F;
    812        float f3 = (float)(l & 255) / 255.0F;
    813        float f4;
    814        float f5;
    815
    816        if (EntityRenderer.anaglyphEnable)
    817        {
    818            f4 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F;
    819            float f6 = (f1 * 30.0F + f2 * 70.0F) / 100.0F;
    820            f5 = (f1 * 30.0F + f3 * 70.0F) / 100.0F;
    821            f1 = f4;
    822            f2 = f6;
    823            f3 = f5;
    824        }
    825
    826        tessellator.setColorOpaque_F(f * f1, f * f2, f * f3);
    827        f4 = 0.1865F;
    828        this.renderSouthFace(par1BlockFlowerPot, (double)((float)par2 - 0.5F + f4), (double)par3, (double)par4, icon);
    829        this.renderNorthFace(par1BlockFlowerPot, (double)((float)par2 + 0.5F - f4), (double)par3, (double)par4, icon);
    830        this.renderWestFace(par1BlockFlowerPot, (double)par2, (double)par3, (double)((float)par4 - 0.5F + f4), icon);
    831        this.renderEastFace(par1BlockFlowerPot, (double)par2, (double)par3, (double)((float)par4 + 0.5F - f4), icon);
    832        this.renderTopFace(par1BlockFlowerPot, (double)par2, (double)((float)par3 - 0.5F + f4 + 0.1875F), (double)par4, this.getBlockIcon(Block.dirt));
    833        int i1 = this.blockAccess.getBlockMetadata(par2, par3, par4);
    834
    835        if (i1 != 0)
    836        {
    837            f5 = 0.0F;
    838            float f7 = 4.0F;
    839            float f8 = 0.0F;
    840            BlockFlower blockflower = null;
    841
    842            switch (i1)
    843            {
    844                case 1:
    845                    blockflower = Block.plantRed;
    846                    break;
    847                case 2:
    848                    blockflower = Block.plantYellow;
    849                case 3:
    850                case 4:
    851                case 5:
    852                case 6:
    853                default:
    854                    break;
    855                case 7:
    856                    blockflower = Block.mushroomRed;
    857                    break;
    858                case 8:
    859                    blockflower = Block.mushroomBrown;
    860            }
    861
    862            tessellator.addTranslation(f5 / 16.0F, f7 / 16.0F, f8 / 16.0F);
    863
    864            if (blockflower != null)
    865            {
    866                this.renderBlockByRenderType(blockflower, par2, par3, par4);
    867            }
    868            else if (i1 == 9)
    869            {
    870                this.renderAllFaces = true;
    871                float f9 = 0.125F;
    872                this.setRenderBounds((double)(0.5F - f9), 0.0D, (double)(0.5F - f9), (double)(0.5F + f9), 0.25D, (double)(0.5F + f9));
    873                this.renderStandardBlock(Block.cactus, par2, par3, par4);
    874                this.setRenderBounds((double)(0.5F - f9), 0.25D, (double)(0.5F - f9), (double)(0.5F + f9), 0.5D, (double)(0.5F + f9));
    875                this.renderStandardBlock(Block.cactus, par2, par3, par4);
    876                this.setRenderBounds((double)(0.5F - f9), 0.5D, (double)(0.5F - f9), (double)(0.5F + f9), 0.75D, (double)(0.5F + f9));
    877                this.renderStandardBlock(Block.cactus, par2, par3, par4);
    878                this.renderAllFaces = false;
    879                this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
    880            }
    881            else if (i1 == 3)
    882            {
    883                this.drawCrossedSquares(Block.sapling, 0, (double)par2, (double)par3, (double)par4, 0.75F);
    884            }
    885            else if (i1 == 5)
    886            {
    887                this.drawCrossedSquares(Block.sapling, 2, (double)par2, (double)par3, (double)par4, 0.75F);
    888            }
    889            else if (i1 == 4)
    890            {
    891                this.drawCrossedSquares(Block.sapling, 1, (double)par2, (double)par3, (double)par4, 0.75F);
    892            }
    893            else if (i1 == 6)
    894            {
    895                this.drawCrossedSquares(Block.sapling, 3, (double)par2, (double)par3, (double)par4, 0.75F);
    896            }
    897            else if (i1 == 11)
    898            {
    899                l = Block.tallGrass.colorMultiplier(this.blockAccess, par2, par3, par4);
    900                f1 = (float)(l >> 16 & 255) / 255.0F;
    901                f2 = (float)(l >> 8 & 255) / 255.0F;
    902                f3 = (float)(l & 255) / 255.0F;
    903                tessellator.setColorOpaque_F(f * f1, f * f2, f * f3);
    904                this.drawCrossedSquares(Block.tallGrass, 2, (double)par2, (double)par3, (double)par4, 0.75F);
    905            }
    906            else if (i1 == 10)
    907            {
    908                this.drawCrossedSquares(Block.deadBush, 2, (double)par2, (double)par3, (double)par4, 0.75F);
    909            }
    910
    911            tessellator.addTranslation(-f5 / 16.0F, -f7 / 16.0F, -f8 / 16.0F);
    912        }
    913
    914        return true;
    915    }
    916
    917    /**
    918     * Renders anvil
    919     */
    920    public boolean renderBlockAnvil(BlockAnvil par1BlockAnvil, int par2, int par3, int par4)
    921    {
    922        return this.renderBlockAnvilMetadata(par1BlockAnvil, par2, par3, par4, this.blockAccess.getBlockMetadata(par2, par3, par4));
    923    }
    924
    925    /**
    926     * Renders anvil block with metadata
    927     */
    928    public boolean renderBlockAnvilMetadata(BlockAnvil par1BlockAnvil, int par2, int par3, int par4, int par5)
    929    {
    930        Tessellator tessellator = Tessellator.instance;
    931        tessellator.setBrightness(par1BlockAnvil.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    932        float f = 1.0F;
    933        int i1 = par1BlockAnvil.colorMultiplier(this.blockAccess, par2, par3, par4);
    934        float f1 = (float)(i1 >> 16 & 255) / 255.0F;
    935        float f2 = (float)(i1 >> 8 & 255) / 255.0F;
    936        float f3 = (float)(i1 & 255) / 255.0F;
    937
    938        if (EntityRenderer.anaglyphEnable)
    939        {
    940            float f4 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F;
    941            float f5 = (f1 * 30.0F + f2 * 70.0F) / 100.0F;
    942            float f6 = (f1 * 30.0F + f3 * 70.0F) / 100.0F;
    943            f1 = f4;
    944            f2 = f5;
    945            f3 = f6;
    946        }
    947
    948        tessellator.setColorOpaque_F(f * f1, f * f2, f * f3);
    949        return this.renderBlockAnvilOrient(par1BlockAnvil, par2, par3, par4, par5, false);
    950    }
    951
    952    /**
    953     * Renders anvil block with orientation
    954     */
    955    public boolean renderBlockAnvilOrient(BlockAnvil par1BlockAnvil, int par2, int par3, int par4, int par5, boolean par6)
    956    {
    957        int i1 = par6 ? 0 : par5 & 3;
    958        boolean flag1 = false;
    959        float f = 0.0F;
    960
    961        switch (i1)
    962        {
    963            case 0:
    964                this.uvRotateSouth = 2;
    965                this.uvRotateNorth = 1;
    966                this.uvRotateTop = 3;
    967                this.uvRotateBottom = 3;
    968                break;
    969            case 1:
    970                this.uvRotateEast = 1;
    971                this.uvRotateWest = 2;
    972                this.uvRotateTop = 2;
    973                this.uvRotateBottom = 1;
    974                flag1 = true;
    975                break;
    976            case 2:
    977                this.uvRotateSouth = 1;
    978                this.uvRotateNorth = 2;
    979                break;
    980            case 3:
    981                this.uvRotateEast = 2;
    982                this.uvRotateWest = 1;
    983                this.uvRotateTop = 1;
    984                this.uvRotateBottom = 2;
    985                flag1 = true;
    986        }
    987
    988        f = this.renderBlockAnvilRotate(par1BlockAnvil, par2, par3, par4, 0, f, 0.75F, 0.25F, 0.75F, flag1, par6, par5);
    989        f = this.renderBlockAnvilRotate(par1BlockAnvil, par2, par3, par4, 1, f, 0.5F, 0.0625F, 0.625F, flag1, par6, par5);
    990        f = this.renderBlockAnvilRotate(par1BlockAnvil, par2, par3, par4, 2, f, 0.25F, 0.3125F, 0.5F, flag1, par6, par5);
    991        this.renderBlockAnvilRotate(par1BlockAnvil, par2, par3, par4, 3, f, 0.625F, 0.375F, 1.0F, flag1, par6, par5);
    992        this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
    993        this.uvRotateEast = 0;
    994        this.uvRotateWest = 0;
    995        this.uvRotateSouth = 0;
    996        this.uvRotateNorth = 0;
    997        this.uvRotateTop = 0;
    998        this.uvRotateBottom = 0;
    999        return true;
    1000    }
    1001
    1002    /**
    1003     * Renders anvil block with rotation
    1004     */
    1005    public float renderBlockAnvilRotate(BlockAnvil par1BlockAnvil, int par2, int par3, int par4, int par5, float par6, float par7, float par8, float par9, boolean par10, boolean par11, int par12)
    1006    {
    1007        if (par10)
    1008        {
    1009            float f4 = par7;
    1010            par7 = par9;
    1011            par9 = f4;
    1012        }
    1013
    1014        par7 /= 2.0F;
    1015        par9 /= 2.0F;
    1016        par1BlockAnvil.field_82521_b = par5;
    1017        this.setRenderBounds((double)(0.5F - par7), (double)par6, (double)(0.5F - par9), (double)(0.5F + par7), (double)(par6 + par8), (double)(0.5F + par9));
    1018
    1019        if (par11)
    1020        {
    1021            Tessellator tessellator = Tessellator.instance;
    1022            tessellator.startDrawingQuads();
    1023            tessellator.setNormal(0.0F, -1.0F, 0.0F);
    1024            this.renderBottomFace(par1BlockAnvil, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1BlockAnvil, 0, par12));
    1025            tessellator.draw();
    1026            tessellator.startDrawingQuads();
    1027            tessellator.setNormal(0.0F, 1.0F, 0.0F);
    1028            this.renderTopFace(par1BlockAnvil, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1BlockAnvil, 1, par12));
    1029            tessellator.draw();
    1030            tessellator.startDrawingQuads();
    1031            tessellator.setNormal(0.0F, 0.0F, -1.0F);
    1032            this.renderEastFace(par1BlockAnvil, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1BlockAnvil, 2, par12));
    1033            tessellator.draw();
    1034            tessellator.startDrawingQuads();
    1035            tessellator.setNormal(0.0F, 0.0F, 1.0F);
    1036            this.renderWestFace(par1BlockAnvil, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1BlockAnvil, 3, par12));
    1037            tessellator.draw();
    1038            tessellator.startDrawingQuads();
    1039            tessellator.setNormal(-1.0F, 0.0F, 0.0F);
    1040            this.renderNorthFace(par1BlockAnvil, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1BlockAnvil, 4, par12));
    1041            tessellator.draw();
    1042            tessellator.startDrawingQuads();
    1043            tessellator.setNormal(1.0F, 0.0F, 0.0F);
    1044            this.renderSouthFace(par1BlockAnvil, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1BlockAnvil, 5, par12));
    1045            tessellator.draw();
    1046        }
    1047        else
    1048        {
    1049            this.renderStandardBlock(par1BlockAnvil, par2, par3, par4);
    1050        }
    1051
    1052        return par6 + par8;
    1053    }
    1054
    1055    /**
    1056     * Renders a torch block at the given coordinates
    1057     */
    1058    public boolean renderBlockTorch(Block par1Block, int par2, int par3, int par4)
    1059    {
    1060        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    1061        Tessellator tessellator = Tessellator.instance;
    1062        tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    1063        tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
    1064        double d0 = 0.4000000059604645D;
    1065        double d1 = 0.5D - d0;
    1066        double d2 = 0.20000000298023224D;
    1067
    1068        if (l == 1)
    1069        {
    1070            this.renderTorchAtAngle(par1Block, (double)par2 - d1, (double)par3 + d2, (double)par4, -d0, 0.0D, 0);
    1071        }
    1072        else if (l == 2)
    1073        {
    1074            this.renderTorchAtAngle(par1Block, (double)par2 + d1, (double)par3 + d2, (double)par4, d0, 0.0D, 0);
    1075        }
    1076        else if (l == 3)
    1077        {
    1078            this.renderTorchAtAngle(par1Block, (double)par2, (double)par3 + d2, (double)par4 - d1, 0.0D, -d0, 0);
    1079        }
    1080        else if (l == 4)
    1081        {
    1082            this.renderTorchAtAngle(par1Block, (double)par2, (double)par3 + d2, (double)par4 + d1, 0.0D, d0, 0);
    1083        }
    1084        else
    1085        {
    1086            this.renderTorchAtAngle(par1Block, (double)par2, (double)par3, (double)par4, 0.0D, 0.0D, 0);
    1087        }
    1088
    1089        return true;
    1090    }
    1091
    1092    /**
    1093     * render a redstone repeater at the given coordinates
    1094     */
    1095    public boolean renderBlockRepeater(BlockRedstoneRepeater par1BlockRedstoneRepeater, int par2, int par3, int par4)
    1096    {
    1097        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    1098        int i1 = l & 3;
    1099        int j1 = (l & 12) >> 2;
    1100        Tessellator tessellator = Tessellator.instance;
    1101        tessellator.setBrightness(par1BlockRedstoneRepeater.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    1102        tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
    1103        double d0 = -0.1875D;
    1104        boolean flag = par1BlockRedstoneRepeater.func_94476_e(this.blockAccess, par2, par3, par4, l);
    1105        double d1 = 0.0D;
    1106        double d2 = 0.0D;
    1107        double d3 = 0.0D;
    1108        double d4 = 0.0D;
    1109
    1110        switch (i1)
    1111        {
    1112            case 0:
    1113                d4 = -0.3125D;
    1114                d2 = BlockRedstoneRepeater.repeaterTorchOffset[j1];
    1115                break;
    1116            case 1:
    1117                d3 = 0.3125D;
    1118                d1 = -BlockRedstoneRepeater.repeaterTorchOffset[j1];
    1119                break;
    1120            case 2:
    1121                d4 = 0.3125D;
    1122                d2 = -BlockRedstoneRepeater.repeaterTorchOffset[j1];
    1123                break;
    1124            case 3:
    1125                d3 = -0.3125D;
    1126                d1 = BlockRedstoneRepeater.repeaterTorchOffset[j1];
    1127        }
    1128
    1129        if (!flag)
    1130        {
    1131            this.renderTorchAtAngle(par1BlockRedstoneRepeater, (double)par2 + d1, (double)par3 + d0, (double)par4 + d2, 0.0D, 0.0D, 0);
    1132        }
    1133        else
    1134        {
    1135            Icon icon = this.getBlockIcon(Block.bedrock);
    1136            this.setOverrideBlockTexture(icon);
    1137            float f = 2.0F;
    1138            float f1 = 14.0F;
    1139            float f2 = 7.0F;
    1140            float f3 = 9.0F;
    1141
    1142            switch (i1)
    1143            {
    1144                case 1:
    1145                case 3:
    1146                    f = 7.0F;
    1147                    f1 = 9.0F;
    1148                    f2 = 2.0F;
    1149                    f3 = 14.0F;
    1150                case 0:
    1151                case 2:
    1152                default:
    1153                    this.setRenderBounds((double)(f / 16.0F + (float)d1), 0.125D, (double)(f2 / 16.0F + (float)d2), (double)(f1 / 16.0F + (float)d1), 0.25D, (double)(f3 / 16.0F + (float)d2));
    1154                    double d5 = (double)icon.getInterpolatedU((double)f);
    1155                    double d6 = (double)icon.getInterpolatedV((double)f2);
    1156                    double d7 = (double)icon.getInterpolatedU((double)f1);
    1157                    double d8 = (double)icon.getInterpolatedV((double)f3);
    1158                    tessellator.addVertexWithUV((double)((float)par2 + f / 16.0F) + d1, (double)((float)par3 + 0.25F), (double)((float)par4 + f2 / 16.0F) + d2, d5, d6);
    1159                    tessellator.addVertexWithUV((double)((float)par2 + f / 16.0F) + d1, (double)((float)par3 + 0.25F), (double)((float)par4 + f3 / 16.0F) + d2, d5, d8);
    1160                    tessellator.addVertexWithUV((double)((float)par2 + f1 / 16.0F) + d1, (double)((float)par3 + 0.25F), (double)((float)par4 + f3 / 16.0F) + d2, d7, d8);
    1161                    tessellator.addVertexWithUV((double)((float)par2 + f1 / 16.0F) + d1, (double)((float)par3 + 0.25F), (double)((float)par4 + f2 / 16.0F) + d2, d7, d6);
    1162                    this.renderStandardBlock(par1BlockRedstoneRepeater, par2, par3, par4);
    1163                    this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.125D, 1.0D);
    1164                    this.clearOverrideBlockTexture();
    1165            }
    1166        }
    1167
    1168        tessellator.setBrightness(par1BlockRedstoneRepeater.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    1169        tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
    1170        this.renderTorchAtAngle(par1BlockRedstoneRepeater, (double)par2 + d3, (double)par3 + d0, (double)par4 + d4, 0.0D, 0.0D, 0);
    1171        this.renderBlockRedstoneLogic(par1BlockRedstoneRepeater, par2, par3, par4);
    1172        return true;
    1173    }
    1174
    1175    public boolean renderBlockComparator(BlockComparator par1BlockComparator, int par2, int par3, int par4)
    1176    {
    1177        Tessellator tessellator = Tessellator.instance;
    1178        tessellator.setBrightness(par1BlockComparator.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    1179        tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
    1180        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    1181        int i1 = l & 3;
    1182        double d0 = 0.0D;
    1183        double d1 = -0.1875D;
    1184        double d2 = 0.0D;
    1185        double d3 = 0.0D;
    1186        double d4 = 0.0D;
    1187        Icon icon;
    1188
    1189        if (par1BlockComparator.func_94490_c(l))
    1190        {
    1191            icon = Block.torchRedstoneActive.getBlockTextureFromSide(0);
    1192        }
    1193        else
    1194        {
    1195            d1 -= 0.1875D;
    1196            icon = Block.torchRedstoneIdle.getBlockTextureFromSide(0);
    1197        }
    1198
    1199        switch (i1)
    1200        {
    1201            case 0:
    1202                d2 = -0.3125D;
    1203                d4 = 1.0D;
    1204                break;
    1205            case 1:
    1206                d0 = 0.3125D;
    1207                d3 = -1.0D;
    1208                break;
    1209            case 2:
    1210                d2 = 0.3125D;
    1211                d4 = -1.0D;
    1212                break;
    1213            case 3:
    1214                d0 = -0.3125D;
    1215                d3 = 1.0D;
    1216        }
    1217
    1218        this.renderTorchAtAngle(par1BlockComparator, (double)par2 + 0.25D * d3 + 0.1875D * d4, (double)((float)par3 - 0.1875F), (double)par4 + 0.25D * d4 + 0.1875D * d3, 0.0D, 0.0D, l);
    1219        this.renderTorchAtAngle(par1BlockComparator, (double)par2 + 0.25D * d3 + -0.1875D * d4, (double)((float)par3 - 0.1875F), (double)par4 + 0.25D * d4 + -0.1875D * d3, 0.0D, 0.0D, l);
    1220        this.setOverrideBlockTexture(icon);
    1221        this.renderTorchAtAngle(par1BlockComparator, (double)par2 + d0, (double)par3 + d1, (double)par4 + d2, 0.0D, 0.0D, l);
    1222        this.clearOverrideBlockTexture();
    1223        this.renderBlockRedstoneLogicMetadata(par1BlockComparator, par2, par3, par4, i1);
    1224        return true;
    1225    }
    1226
    1227    public boolean renderBlockRedstoneLogic(BlockRedstoneLogic par1BlockRedstoneLogic, int par2, int par3, int par4)
    1228    {
    1229        Tessellator tessellator = Tessellator.instance;
    1230        this.renderBlockRedstoneLogicMetadata(par1BlockRedstoneLogic, par2, par3, par4, this.blockAccess.getBlockMetadata(par2, par3, par4) & 3);
    1231        return true;
    1232    }
    1233
    1234    public void renderBlockRedstoneLogicMetadata(BlockRedstoneLogic par1BlockRedstoneLogic, int par2, int par3, int par4, int par5)
    1235    {
    1236        this.renderStandardBlock(par1BlockRedstoneLogic, par2, par3, par4);
    1237        Tessellator tessellator = Tessellator.instance;
    1238        tessellator.setBrightness(par1BlockRedstoneLogic.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    1239        tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
    1240        int i1 = this.blockAccess.getBlockMetadata(par2, par3, par4);
    1241        Icon icon = this.getBlockIconFromSideAndMetadata(par1BlockRedstoneLogic, 1, i1);
    1242        double d0 = (double)icon.getMinU();
    1243        double d1 = (double)icon.getMaxU();
    1244        double d2 = (double)icon.getMinV();
    1245        double d3 = (double)icon.getMaxV();
    1246        double d4 = 0.125D;
    1247        double d5 = (double)(par2 + 1);
    1248        double d6 = (double)(par2 + 1);
    1249        double d7 = (double)(par2 + 0);
    1250        double d8 = (double)(par2 + 0);
    1251        double d9 = (double)(par4 + 0);
    1252        double d10 = (double)(par4 + 1);
    1253        double d11 = (double)(par4 + 1);
    1254        double d12 = (double)(par4 + 0);
    1255        double d13 = (double)par3 + d4;
    1256
    1257        if (par5 == 2)
    1258        {
    1259            d5 = d6 = (double)(par2 + 0);
    1260            d7 = d8 = (double)(par2 + 1);
    1261            d9 = d12 = (double)(par4 + 1);
    1262            d10 = d11 = (double)(par4 + 0);
    1263        }
    1264        else if (par5 == 3)
    1265        {
    1266            d5 = d8 = (double)(par2 + 0);
    1267            d6 = d7 = (double)(par2 + 1);
    1268            d9 = d10 = (double)(par4 + 0);
    1269            d11 = d12 = (double)(par4 + 1);
    1270        }
    1271        else if (par5 == 1)
    1272        {
    1273            d5 = d8 = (double)(par2 + 1);
    1274            d6 = d7 = (double)(par2 + 0);
    1275            d9 = d10 = (double)(par4 + 1);
    1276            d11 = d12 = (double)(par4 + 0);
    1277        }
    1278
    1279        tessellator.addVertexWithUV(d8, d13, d12, d0, d2);
    1280        tessellator.addVertexWithUV(d7, d13, d11, d0, d3);
    1281        tessellator.addVertexWithUV(d6, d13, d10, d1, d3);
    1282        tessellator.addVertexWithUV(d5, d13, d9, d1, d2);
    1283    }
    1284
    1285    /**
    1286     * Render all faces of the piston base
    1287     */
    1288    public void renderPistonBaseAllFaces(Block par1Block, int par2, int par3, int par4)
    1289    {
    1290        this.renderAllFaces = true;
    1291        this.renderPistonBase(par1Block, par2, par3, par4, true);
    1292        this.renderAllFaces = false;
    1293    }
    1294
    1295    /**
    1296     * renders a block as a piston base
    1297     */
    1298    public boolean renderPistonBase(Block par1Block, int par2, int par3, int par4, boolean par5)
    1299    {
    1300        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    1301        boolean flag1 = par5 || (l & 8) != 0;
    1302        int i1 = BlockPistonBase.getOrientation(l);
    1303
    1304        if (flag1)
    1305        {
    1306            switch (i1)
    1307            {
    1308                case 0:
    1309                    this.uvRotateEast = 3;
    1310                    this.uvRotateWest = 3;
    1311                    this.uvRotateSouth = 3;
    1312                    this.uvRotateNorth = 3;
    1313                    this.setRenderBounds(0.0D, 0.25D, 0.0D, 1.0D, 1.0D, 1.0D);
    1314                    break;
    1315                case 1:
    1316                    this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.75D, 1.0D);
    1317                    break;
    1318                case 2:
    1319                    this.uvRotateSouth = 1;
    1320                    this.uvRotateNorth = 2;
    1321                    this.setRenderBounds(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D);
    1322                    break;
    1323                case 3:
    1324                    this.uvRotateSouth = 2;
    1325                    this.uvRotateNorth = 1;
    1326                    this.uvRotateTop = 3;
    1327                    this.uvRotateBottom = 3;
    1328                    this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D);
    1329                    break;
    1330                case 4:
    1331                    this.uvRotateEast = 1;
    1332                    this.uvRotateWest = 2;
    1333                    this.uvRotateTop = 2;
    1334                    this.uvRotateBottom = 1;
    1335                    this.setRenderBounds(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
    1336                    break;
    1337                case 5:
    1338                    this.uvRotateEast = 2;
    1339                    this.uvRotateWest = 1;
    1340                    this.uvRotateTop = 1;
    1341                    this.uvRotateBottom = 2;
    1342                    this.setRenderBounds(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D);
    1343            }
    1344
    1345            ((BlockPistonBase)par1Block).func_96479_b((float)this.renderMinX, (float)this.renderMinY, (float)this.renderMinZ, (float)this.renderMaxX, (float)this.renderMaxY, (float)this.renderMaxZ);
    1346            this.renderStandardBlock(par1Block, par2, par3, par4);
    1347            this.uvRotateEast = 0;
    1348            this.uvRotateWest = 0;
    1349            this.uvRotateSouth = 0;
    1350            this.uvRotateNorth = 0;
    1351            this.uvRotateTop = 0;
    1352            this.uvRotateBottom = 0;
    1353            this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
    1354            ((BlockPistonBase)par1Block).func_96479_b((float)this.renderMinX, (float)this.renderMinY, (float)this.renderMinZ, (float)this.renderMaxX, (float)this.renderMaxY, (float)this.renderMaxZ);
    1355        }
    1356        else
    1357        {
    1358            switch (i1)
    1359            {
    1360                case 0:
    1361                    this.uvRotateEast = 3;
    1362                    this.uvRotateWest = 3;
    1363                    this.uvRotateSouth = 3;
    1364                    this.uvRotateNorth = 3;
    1365                case 1:
    1366                default:
    1367                    break;
    1368                case 2:
    1369                    this.uvRotateSouth = 1;
    1370                    this.uvRotateNorth = 2;
    1371                    break;
    1372                case 3:
    1373                    this.uvRotateSouth = 2;
    1374                    this.uvRotateNorth = 1;
    1375                    this.uvRotateTop = 3;
    1376                    this.uvRotateBottom = 3;
    1377                    break;
    1378                case 4:
    1379                    this.uvRotateEast = 1;
    1380                    this.uvRotateWest = 2;
    1381                    this.uvRotateTop = 2;
    1382                    this.uvRotateBottom = 1;
    1383                    break;
    1384                case 5:
    1385                    this.uvRotateEast = 2;
    1386                    this.uvRotateWest = 1;
    1387                    this.uvRotateTop = 1;
    1388                    this.uvRotateBottom = 2;
    1389            }
    1390
    1391            this.renderStandardBlock(par1Block, par2, par3, par4);
    1392            this.uvRotateEast = 0;
    1393            this.uvRotateWest = 0;
    1394            this.uvRotateSouth = 0;
    1395            this.uvRotateNorth = 0;
    1396            this.uvRotateTop = 0;
    1397            this.uvRotateBottom = 0;
    1398        }
    1399
    1400        return true;
    1401    }
    1402
    1403    /**
    1404     * Render piston rod up/down
    1405     */
    1406    public void renderPistonRodUD(double par1, double par3, double par5, double par7, double par9, double par11, float par13, double par14)
    1407    {
    1408        Icon icon = BlockPistonBase.func_94496_b("piston_side");
    1409
    1410        if (this.hasOverrideBlockTexture())
    1411        {
    1412            icon = this.overrideBlockTexture;
    1413        }
    1414
    1415        Tessellator tessellator = Tessellator.instance;
    1416        double d7 = (double)icon.getMinU();
    1417        double d8 = (double)icon.getMinV();
    1418        double d9 = (double)icon.getInterpolatedU(par14);
    1419        double d10 = (double)icon.getInterpolatedV(4.0D);
    1420        tessellator.setColorOpaque_F(par13, par13, par13);
    1421        tessellator.addVertexWithUV(par1, par7, par9, d9, d8);
    1422        tessellator.addVertexWithUV(par1, par5, par9, d7, d8);
    1423        tessellator.addVertexWithUV(par3, par5, par11, d7, d10);
    1424        tessellator.addVertexWithUV(par3, par7, par11, d9, d10);
    1425    }
    1426
    1427    /**
    1428     * Render piston rod south/north
    1429     */
    1430    public void renderPistonRodSN(double par1, double par3, double par5, double par7, double par9, double par11, float par13, double par14)
    1431    {
    1432        Icon icon = BlockPistonBase.func_94496_b("piston_side");
    1433
    1434        if (this.hasOverrideBlockTexture())
    1435        {
    1436            icon = this.overrideBlockTexture;
    1437        }
    1438
    1439        Tessellator tessellator = Tessellator.instance;
    1440        double d7 = (double)icon.getMinU();
    1441        double d8 = (double)icon.getMinV();
    1442        double d9 = (double)icon.getInterpolatedU(par14);
    1443        double d10 = (double)icon.getInterpolatedV(4.0D);
    1444        tessellator.setColorOpaque_F(par13, par13, par13);
    1445        tessellator.addVertexWithUV(par1, par5, par11, d9, d8);
    1446        tessellator.addVertexWithUV(par1, par5, par9, d7, d8);
    1447        tessellator.addVertexWithUV(par3, par7, par9, d7, d10);
    1448        tessellator.addVertexWithUV(par3, par7, par11, d9, d10);
    1449    }
    1450
    1451    /**
    1452     * Render piston rod east/west
    1453     */
    1454    public void renderPistonRodEW(double par1, double par3, double par5, double par7, double par9, double par11, float par13, double par14)
    1455    {
    1456        Icon icon = BlockPistonBase.func_94496_b("piston_side");
    1457
    1458        if (this.hasOverrideBlockTexture())
    1459        {
    1460            icon = this.overrideBlockTexture;
    1461        }
    1462
    1463        Tessellator tessellator = Tessellator.instance;
    1464        double d7 = (double)icon.getMinU();
    1465        double d8 = (double)icon.getMinV();
    1466        double d9 = (double)icon.getInterpolatedU(par14);
    1467        double d10 = (double)icon.getInterpolatedV(4.0D);
    1468        tessellator.setColorOpaque_F(par13, par13, par13);
    1469        tessellator.addVertexWithUV(par3, par5, par9, d9, d8);
    1470        tessellator.addVertexWithUV(par1, par5, par9, d7, d8);
    1471        tessellator.addVertexWithUV(par1, par7, par11, d7, d10);
    1472        tessellator.addVertexWithUV(par3, par7, par11, d9, d10);
    1473    }
    1474
    1475    /**
    1476     * Render all faces of the piston extension
    1477     */
    1478    public void renderPistonExtensionAllFaces(Block par1Block, int par2, int par3, int par4, boolean par5)
    1479    {
    1480        this.renderAllFaces = true;
    1481        this.renderPistonExtension(par1Block, par2, par3, par4, par5);
    1482        this.renderAllFaces = false;
    1483    }
    1484
    1485    /**
    1486     * renders the pushing part of a piston
    1487     */
    1488    public boolean renderPistonExtension(Block par1Block, int par2, int par3, int par4, boolean par5)
    1489    {
    1490        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    1491        int i1 = BlockPistonExtension.getDirectionMeta(l);
    1492        float f = par1Block.getBlockBrightness(this.blockAccess, par2, par3, par4);
    1493        float f1 = par5 ? 1.0F : 0.5F;
    1494        double d0 = par5 ? 16.0D : 8.0D;
    1495
    1496        switch (i1)
    1497        {
    1498            case 0:
    1499                this.uvRotateEast = 3;
    1500                this.uvRotateWest = 3;
    1501                this.uvRotateSouth = 3;
    1502                this.uvRotateNorth = 3;
    1503                this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.25D, 1.0D);
    1504                this.renderStandardBlock(par1Block, par2, par3, par4);
    1505                this.renderPistonRodUD((double)((float)par2 + 0.375F), (double)((float)par2 + 0.625F), (double)((float)par3 + 0.25F), (double)((float)par3 + 0.25F + f1), (double)((float)par4 + 0.625F), (double)((float)par4 + 0.625F), f * 0.8F, d0);
    1506                this.renderPistonRodUD((double)((float)par2 + 0.625F), (double)((float)par2 + 0.375F), (double)((float)par3 + 0.25F), (double)((float)par3 + 0.25F + f1), (double)((float)par4 + 0.375F), (double)((float)par4 + 0.375F), f * 0.8F, d0);
    1507                this.renderPistonRodUD((double)((float)par2 + 0.375F), (double)((float)par2 + 0.375F), (double)((float)par3 + 0.25F), (double)((float)par3 + 0.25F + f1), (double)((float)par4 + 0.375F), (double)((float)par4 + 0.625F), f * 0.6F, d0);
    1508                this.renderPistonRodUD((double)((float)par2 + 0.625F), (double)((float)par2 + 0.625F), (double)((float)par3 + 0.25F), (double)((float)par3 + 0.25F + f1), (double)((float)par4 + 0.625F), (double)((float)par4 + 0.375F), f * 0.6F, d0);
    1509                break;
    1510            case 1:
    1511                this.setRenderBounds(0.0D, 0.75D, 0.0D, 1.0D, 1.0D, 1.0D);
    1512                this.renderStandardBlock(par1Block, par2, par3, par4);
    1513                this.renderPistonRodUD((double)((float)par2 + 0.375F), (double)((float)par2 + 0.625F), (double)((float)par3 - 0.25F + 1.0F - f1), (double)((float)par3 - 0.25F + 1.0F), (double)((float)par4 + 0.625F), (double)((float)par4 + 0.625F), f * 0.8F, d0);
    1514                this.renderPistonRodUD((double)((float)par2 + 0.625F), (double)((float)par2 + 0.375F), (double)((float)par3 - 0.25F + 1.0F - f1), (double)((float)par3 - 0.25F + 1.0F), (double)((float)par4 + 0.375F), (double)((float)par4 + 0.375F), f * 0.8F, d0);
    1515                this.renderPistonRodUD((double)((float)par2 + 0.375F), (double)((float)par2 + 0.375F), (double)((float)par3 - 0.25F + 1.0F - f1), (double)((float)par3 - 0.25F + 1.0F), (double)((float)par4 + 0.375F), (double)((float)par4 + 0.625F), f * 0.6F, d0);
    1516                this.renderPistonRodUD((double)((float)par2 + 0.625F), (double)((float)par2 + 0.625F), (double)((float)par3 - 0.25F + 1.0F - f1), (double)((float)par3 - 0.25F + 1.0F), (double)((float)par4 + 0.625F), (double)((float)par4 + 0.375F), f * 0.6F, d0);
    1517                break;
    1518            case 2:
    1519                this.uvRotateSouth = 1;
    1520                this.uvRotateNorth = 2;
    1521                this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.25D);
    1522                this.renderStandardBlock(par1Block, par2, par3, par4);
    1523                this.renderPistonRodSN((double)((float)par2 + 0.375F), (double)((float)par2 + 0.375F), (double)((float)par3 + 0.625F), (double)((float)par3 + 0.375F), (double)((float)par4 + 0.25F), (double)((float)par4 + 0.25F + f1), f * 0.6F, d0);
    1524                this.renderPistonRodSN((double)((float)par2 + 0.625F), (double)((float)par2 + 0.625F), (double)((float)par3 + 0.375F), (double)((float)par3 + 0.625F), (double)((float)par4 + 0.25F), (double)((float)par4 + 0.25F + f1), f * 0.6F, d0);
    1525                this.renderPistonRodSN((double)((float)par2 + 0.375F), (double)((float)par2 + 0.625F), (double)((float)par3 + 0.375F), (double)((float)par3 + 0.375F), (double)((float)par4 + 0.25F), (double)((float)par4 + 0.25F + f1), f * 0.5F, d0);
    1526                this.renderPistonRodSN((double)((float)par2 + 0.625F), (double)((float)par2 + 0.375F), (double)((float)par3 + 0.625F), (double)((float)par3 + 0.625F), (double)((float)par4 + 0.25F), (double)((float)par4 + 0.25F + f1), f, d0);
    1527                break;
    1528            case 3:
    1529                this.uvRotateSouth = 2;
    1530                this.uvRotateNorth = 1;
    1531                this.uvRotateTop = 3;
    1532                this.uvRotateBottom = 3;
    1533                this.setRenderBounds(0.0D, 0.0D, 0.75D, 1.0D, 1.0D, 1.0D);
    1534                this.renderStandardBlock(par1Block, par2, par3, par4);
    1535                this.renderPistonRodSN((double)((float)par2 + 0.375F), (double)((float)par2 + 0.375F), (double)((float)par3 + 0.625F), (double)((float)par3 + 0.375F), (double)((float)par4 - 0.25F + 1.0F - f1), (double)((float)par4 - 0.25F + 1.0F), f * 0.6F, d0);
    1536                this.renderPistonRodSN((double)((float)par2 + 0.625F), (double)((float)par2 + 0.625F), (double)((float)par3 + 0.375F), (double)((float)par3 + 0.625F), (double)((float)par4 - 0.25F + 1.0F - f1), (double)((float)par4 - 0.25F + 1.0F), f * 0.6F, d0);
    1537                this.renderPistonRodSN((double)((float)par2 + 0.375F), (double)((float)par2 + 0.625F), (double)((float)par3 + 0.375F), (double)((float)par3 + 0.375F), (double)((float)par4 - 0.25F + 1.0F - f1), (double)((float)par4 - 0.25F + 1.0F), f * 0.5F, d0);
    1538                this.renderPistonRodSN((double)((float)par2 + 0.625F), (double)((float)par2 + 0.375F), (double)((float)par3 + 0.625F), (double)((float)par3 + 0.625F), (double)((float)par4 - 0.25F + 1.0F - f1), (double)((float)par4 - 0.25F + 1.0F), f, d0);
    1539                break;
    1540            case 4:
    1541                this.uvRotateEast = 1;
    1542                this.uvRotateWest = 2;
    1543                this.uvRotateTop = 2;
    1544                this.uvRotateBottom = 1;
    1545                this.setRenderBounds(0.0D, 0.0D, 0.0D, 0.25D, 1.0D, 1.0D);
    1546                this.renderStandardBlock(par1Block, par2, par3, par4);
    1547                this.renderPistonRodEW((double)((float)par2 + 0.25F), (double)((float)par2 + 0.25F + f1), (double)((float)par3 + 0.375F), (double)((float)par3 + 0.375F), (double)((float)par4 + 0.625F), (double)((float)par4 + 0.375F), f * 0.5F, d0);
    1548                this.renderPistonRodEW((double)((float)par2 + 0.25F), (double)((float)par2 + 0.25F + f1), (double)((float)par3 + 0.625F), (double)((float)par3 + 0.625F), (double)((float)par4 + 0.375F), (double)((float)par4 + 0.625F), f, d0);
    1549                this.renderPistonRodEW((double)((float)par2 + 0.25F), (double)((float)par2 + 0.25F + f1), (double)((float)par3 + 0.375F), (double)((float)par3 + 0.625F), (double)((float)par4 + 0.375F), (double)((float)par4 + 0.375F), f * 0.6F, d0);
    1550                this.renderPistonRodEW((double)((float)par2 + 0.25F), (double)((float)par2 + 0.25F + f1), (double)((float)par3 + 0.625F), (double)((float)par3 + 0.375F), (double)((float)par4 + 0.625F), (double)((float)par4 + 0.625F), f * 0.6F, d0);
    1551                break;
    1552            case 5:
    1553                this.uvRotateEast = 2;
    1554                this.uvRotateWest = 1;
    1555                this.uvRotateTop = 1;
    1556                this.uvRotateBottom = 2;
    1557                this.setRenderBounds(0.75D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
    1558                this.renderStandardBlock(par1Block, par2, par3, par4);
    1559                this.renderPistonRodEW((double)((float)par2 - 0.25F + 1.0F - f1), (double)((float)par2 - 0.25F + 1.0F), (double)((float)par3 + 0.375F), (double)((float)par3 + 0.375F), (double)((float)par4 + 0.625F), (double)((float)par4 + 0.375F), f * 0.5F, d0);
    1560                this.renderPistonRodEW((double)((float)par2 - 0.25F + 1.0F - f1), (double)((float)par2 - 0.25F + 1.0F), (double)((float)par3 + 0.625F), (double)((float)par3 + 0.625F), (double)((float)par4 + 0.375F), (double)((float)par4 + 0.625F), f, d0);
    1561                this.renderPistonRodEW((double)((float)par2 - 0.25F + 1.0F - f1), (double)((float)par2 - 0.25F + 1.0F), (double)((float)par3 + 0.375F), (double)((float)par3 + 0.625F), (double)((float)par4 + 0.375F), (double)((float)par4 + 0.375F), f * 0.6F, d0);
    1562                this.renderPistonRodEW((double)((float)par2 - 0.25F + 1.0F - f1), (double)((float)par2 - 0.25F + 1.0F), (double)((float)par3 + 0.625F), (double)((float)par3 + 0.375F), (double)((float)par4 + 0.625F), (double)((float)par4 + 0.625F), f * 0.6F, d0);
    1563        }
    1564
    1565        this.uvRotateEast = 0;
    1566        this.uvRotateWest = 0;
    1567        this.uvRotateSouth = 0;
    1568        this.uvRotateNorth = 0;
    1569        this.uvRotateTop = 0;
    1570        this.uvRotateBottom = 0;
    1571        this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
    1572        return true;
    1573    }
    1574
    1575    /**
    1576     * Renders a lever block at the given coordinates
    1577     */
    1578    public boolean renderBlockLever(Block par1Block, int par2, int par3, int par4)
    1579    {
    1580        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    1581        int i1 = l & 7;
    1582        boolean flag = (l & 8) > 0;
    1583        Tessellator tessellator = Tessellator.instance;
    1584        boolean flag1 = this.hasOverrideBlockTexture();
    1585
    1586        if (!flag1)
    1587        {
    1588            this.setOverrideBlockTexture(this.getBlockIcon(Block.cobblestone));
    1589        }
    1590
    1591        float f = 0.25F;
    1592        float f1 = 0.1875F;
    1593        float f2 = 0.1875F;
    1594
    1595        if (i1 == 5)
    1596        {
    1597            this.setRenderBounds((double)(0.5F - f1), 0.0D, (double)(0.5F - f), (double)(0.5F + f1), (double)f2, (double)(0.5F + f));
    1598        }
    1599        else if (i1 == 6)
    1600        {
    1601            this.setRenderBounds((double)(0.5F - f), 0.0D, (double)(0.5F - f1), (double)(0.5F + f), (double)f2, (double)(0.5F + f1));
    1602        }
    1603        else if (i1 == 4)
    1604        {
    1605            this.setRenderBounds((double)(0.5F - f1), (double)(0.5F - f), (double)(1.0F - f2), (double)(0.5F + f1), (double)(0.5F + f), 1.0D);
    1606        }
    1607        else if (i1 == 3)
    1608        {
    1609            this.setRenderBounds((double)(0.5F - f1), (double)(0.5F - f), 0.0D, (double)(0.5F + f1), (double)(0.5F + f), (double)f2);
    1610        }
    1611        else if (i1 == 2)
    1612        {
    1613            this.setRenderBounds((double)(1.0F - f2), (double)(0.5F - f), (double)(0.5F - f1), 1.0D, (double)(0.5F + f), (double)(0.5F + f1));
    1614        }
    1615        else if (i1 == 1)
    1616        {
    1617            this.setRenderBounds(0.0D, (double)(0.5F - f), (double)(0.5F - f1), (double)f2, (double)(0.5F + f), (double)(0.5F + f1));
    1618        }
    1619        else if (i1 == 0)
    1620        {
    1621            this.setRenderBounds((double)(0.5F - f), (double)(1.0F - f2), (double)(0.5F - f1), (double)(0.5F + f), 1.0D, (double)(0.5F + f1));
    1622        }
    1623        else if (i1 == 7)
    1624        {
    1625            this.setRenderBounds((double)(0.5F - f1), (double)(1.0F - f2), (double)(0.5F - f), (double)(0.5F + f1), 1.0D, (double)(0.5F + f));
    1626        }
    1627
    1628        this.renderStandardBlock(par1Block, par2, par3, par4);
    1629
    1630        if (!flag1)
    1631        {
    1632            this.clearOverrideBlockTexture();
    1633        }
    1634
    1635        tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    1636        float f3 = 1.0F;
    1637
    1638        if (Block.lightValue[par1Block.blockID] > 0)
    1639        {
    1640            f3 = 1.0F;
    1641        }
    1642
    1643        tessellator.setColorOpaque_F(f3, f3, f3);
    1644        Icon icon = this.getBlockIconFromSide(par1Block, 0);
    1645
    1646        if (this.hasOverrideBlockTexture())
    1647        {
    1648            icon = this.overrideBlockTexture;
    1649        }
    1650
    1651        double d0 = (double)icon.getMinU();
    1652        double d1 = (double)icon.getMinV();
    1653        double d2 = (double)icon.getMaxU();
    1654        double d3 = (double)icon.getMaxV();
    1655        Vec3[] avec3 = new Vec3[8];
    1656        float f4 = 0.0625F;
    1657        float f5 = 0.0625F;
    1658        float f6 = 0.625F;
    1659        avec3[0] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-f4), 0.0D, (double)(-f5));
    1660        avec3[1] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)f4, 0.0D, (double)(-f5));
    1661        avec3[2] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)f4, 0.0D, (double)f5);
    1662        avec3[3] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-f4), 0.0D, (double)f5);
    1663        avec3[4] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-f4), (double)f6, (double)(-f5));
    1664        avec3[5] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)f4, (double)f6, (double)(-f5));
    1665        avec3[6] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)f4, (double)f6, (double)f5);
    1666        avec3[7] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-f4), (double)f6, (double)f5);
    1667
    1668        for (int j1 = 0; j1 < 8; ++j1)
    1669        {
    1670            if (flag)
    1671            {
    1672                avec3[j1].zCoord -= 0.0625D;
    1673                avec3[j1].rotateAroundX(((float)Math.PI * 2F / 9F));
    1674            }
    1675            else
    1676            {
    1677                avec3[j1].zCoord += 0.0625D;
    1678                avec3[j1].rotateAroundX(-((float)Math.PI * 2F / 9F));
    1679            }
    1680
    1681            if (i1 == 0 || i1 == 7)
    1682            {
    1683                avec3[j1].rotateAroundZ((float)Math.PI);
    1684            }
    1685
    1686            if (i1 == 6 || i1 == 0)
    1687            {
    1688                avec3[j1].rotateAroundY(((float)Math.PI / 2F));
    1689            }
    1690
    1691            if (i1 > 0 && i1 < 5)
    1692            {
    1693                avec3[j1].yCoord -= 0.375D;
    1694                avec3[j1].rotateAroundX(((float)Math.PI / 2F));
    1695
    1696                if (i1 == 4)
    1697                {
    1698                    avec3[j1].rotateAroundY(0.0F);
    1699                }
    1700
    1701                if (i1 == 3)
    1702                {
    1703                    avec3[j1].rotateAroundY((float)Math.PI);
    1704                }
    1705
    1706                if (i1 == 2)
    1707                {
    1708                    avec3[j1].rotateAroundY(((float)Math.PI / 2F));
    1709                }
    1710
    1711                if (i1 == 1)
    1712                {
    1713                    avec3[j1].rotateAroundY(-((float)Math.PI / 2F));
    1714                }
    1715
    1716                avec3[j1].xCoord += (double)par2 + 0.5D;
    1717                avec3[j1].yCoord += (double)((float)par3 + 0.5F);
    1718                avec3[j1].zCoord += (double)par4 + 0.5D;
    1719            }
    1720            else if (i1 != 0 && i1 != 7)
    1721            {
    1722                avec3[j1].xCoord += (double)par2 + 0.5D;
    1723                avec3[j1].yCoord += (double)((float)par3 + 0.125F);
    1724                avec3[j1].zCoord += (double)par4 + 0.5D;
    1725            }
    1726            else
    1727            {
    1728                avec3[j1].xCoord += (double)par2 + 0.5D;
    1729                avec3[j1].yCoord += (double)((float)par3 + 0.875F);
    1730                avec3[j1].zCoord += (double)par4 + 0.5D;
    1731            }
    1732        }
    1733
    1734        Vec3 vec3 = null;
    1735        Vec3 vec31 = null;
    1736        Vec3 vec32 = null;
    1737        Vec3 vec33 = null;
    1738
    1739        for (int k1 = 0; k1 < 6; ++k1)
    1740        {
    1741            if (k1 == 0)
    1742            {
    1743                d0 = (double)icon.getInterpolatedU(7.0D);
    1744                d1 = (double)icon.getInterpolatedV(6.0D);
    1745                d2 = (double)icon.getInterpolatedU(9.0D);
    1746                d3 = (double)icon.getInterpolatedV(8.0D);
    1747            }
    1748            else if (k1 == 2)
    1749            {
    1750                d0 = (double)icon.getInterpolatedU(7.0D);
    1751                d1 = (double)icon.getInterpolatedV(6.0D);
    1752                d2 = (double)icon.getInterpolatedU(9.0D);
    1753                d3 = (double)icon.getMaxV();
    1754            }
    1755
    1756            if (k1 == 0)
    1757            {
    1758                vec3 = avec3[0];
    1759                vec31 = avec3[1];
    1760                vec32 = avec3[2];
    1761                vec33 = avec3[3];
    1762            }
    1763            else if (k1 == 1)
    1764            {
    1765                vec3 = avec3[7];
    1766                vec31 = avec3[6];
    1767                vec32 = avec3[5];
    1768                vec33 = avec3[4];
    1769            }
    1770            else if (k1 == 2)
    1771            {
    1772                vec3 = avec3[1];
    1773                vec31 = avec3[0];
    1774                vec32 = avec3[4];
    1775                vec33 = avec3[5];
    1776            }
    1777            else if (k1 == 3)
    1778            {
    1779                vec3 = avec3[2];
    1780                vec31 = avec3[1];
    1781                vec32 = avec3[5];
    1782                vec33 = avec3[6];
    1783            }
    1784            else if (k1 == 4)
    1785            {
    1786                vec3 = avec3[3];
    1787                vec31 = avec3[2];
    1788                vec32 = avec3[6];
    1789                vec33 = avec3[7];
    1790            }
    1791            else if (k1 == 5)
    1792            {
    1793                vec3 = avec3[0];
    1794                vec31 = avec3[3];
    1795                vec32 = avec3[7];
    1796                vec33 = avec3[4];
    1797            }
    1798
    1799            tessellator.addVertexWithUV(vec3.xCoord, vec3.yCoord, vec3.zCoord, d0, d3);
    1800            tessellator.addVertexWithUV(vec31.xCoord, vec31.yCoord, vec31.zCoord, d2, d3);
    1801            tessellator.addVertexWithUV(vec32.xCoord, vec32.yCoord, vec32.zCoord, d2, d1);
    1802            tessellator.addVertexWithUV(vec33.xCoord, vec33.yCoord, vec33.zCoord, d0, d1);
    1803        }
    1804
    1805        return true;
    1806    }
    1807
    1808    /**
    1809     * Renders a trip wire source block at the given coordinates
    1810     */
    1811    public boolean renderBlockTripWireSource(Block par1Block, int par2, int par3, int par4)
    1812    {
    1813        Tessellator tessellator = Tessellator.instance;
    1814        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    1815        int i1 = l & 3;
    1816        boolean flag = (l & 4) == 4;
    1817        boolean flag1 = (l & 8) == 8;
    1818        boolean flag2 = !this.blockAccess.doesBlockHaveSolidTopSurface(par2, par3 - 1, par4);
    1819        boolean flag3 = this.hasOverrideBlockTexture();
    1820
    1821        if (!flag3)
    1822        {
    1823            this.setOverrideBlockTexture(this.getBlockIcon(Block.planks));
    1824        }
    1825
    1826        float f = 0.25F;
    1827        float f1 = 0.125F;
    1828        float f2 = 0.125F;
    1829        float f3 = 0.3F - f;
    1830        float f4 = 0.3F + f;
    1831
    1832        if (i1 == 2)
    1833        {
    1834            this.setRenderBounds((double)(0.5F - f1), (double)f3, (double)(1.0F - f2), (double)(0.5F + f1), (double)f4, 1.0D);
    1835        }
    1836        else if (i1 == 0)
    1837        {
    1838            this.setRenderBounds((double)(0.5F - f1), (double)f3, 0.0D, (double)(0.5F + f1), (double)f4, (double)f2);
    1839        }
    1840        else if (i1 == 1)
    1841        {
    1842            this.setRenderBounds((double)(1.0F - f2), (double)f3, (double)(0.5F - f1), 1.0D, (double)f4, (double)(0.5F + f1));
    1843        }
    1844        else if (i1 == 3)
    1845        {
    1846            this.setRenderBounds(0.0D, (double)f3, (double)(0.5F - f1), (double)f2, (double)f4, (double)(0.5F + f1));
    1847        }
    1848
    1849        this.renderStandardBlock(par1Block, par2, par3, par4);
    1850
    1851        if (!flag3)
    1852        {
    1853            this.clearOverrideBlockTexture();
    1854        }
    1855
    1856        tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    1857        float f5 = 1.0F;
    1858
    1859        if (Block.lightValue[par1Block.blockID] > 0)
    1860        {
    1861            f5 = 1.0F;
    1862        }
    1863
    1864        tessellator.setColorOpaque_F(f5, f5, f5);
    1865        Icon icon = this.getBlockIconFromSide(par1Block, 0);
    1866
    1867        if (this.hasOverrideBlockTexture())
    1868        {
    1869            icon = this.overrideBlockTexture;
    1870        }
    1871
    1872        double d0 = (double)icon.getMinU();
    1873        double d1 = (double)icon.getMinV();
    1874        double d2 = (double)icon.getMaxU();
    1875        double d3 = (double)icon.getMaxV();
    1876        Vec3[] avec3 = new Vec3[8];
    1877        float f6 = 0.046875F;
    1878        float f7 = 0.046875F;
    1879        float f8 = 0.3125F;
    1880        avec3[0] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-f6), 0.0D, (double)(-f7));
    1881        avec3[1] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)f6, 0.0D, (double)(-f7));
    1882        avec3[2] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)f6, 0.0D, (double)f7);
    1883        avec3[3] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-f6), 0.0D, (double)f7);
    1884        avec3[4] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-f6), (double)f8, (double)(-f7));
    1885        avec3[5] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)f6, (double)f8, (double)(-f7));
    1886        avec3[6] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)f6, (double)f8, (double)f7);
    1887        avec3[7] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-f6), (double)f8, (double)f7);
    1888
    1889        for (int j1 = 0; j1 < 8; ++j1)
    1890        {
    1891            avec3[j1].zCoord += 0.0625D;
    1892
    1893            if (flag1)
    1894            {
    1895                avec3[j1].rotateAroundX(0.5235988F);
    1896                avec3[j1].yCoord -= 0.4375D;
    1897            }
    1898            else if (flag)
    1899            {
    1900                avec3[j1].rotateAroundX(0.08726647F);
    1901                avec3[j1].yCoord -= 0.4375D;
    1902            }
    1903            else
    1904            {
    1905                avec3[j1].rotateAroundX(-((float)Math.PI * 2F / 9F));
    1906                avec3[j1].yCoord -= 0.375D;
    1907            }
    1908
    1909            avec3[j1].rotateAroundX(((float)Math.PI / 2F));
    1910
    1911            if (i1 == 2)
    1912            {
    1913                avec3[j1].rotateAroundY(0.0F);
    1914            }
    1915
    1916            if (i1 == 0)
    1917            {
    1918                avec3[j1].rotateAroundY((float)Math.PI);
    1919            }
    1920
    1921            if (i1 == 1)
    1922            {
    1923                avec3[j1].rotateAroundY(((float)Math.PI / 2F));
    1924            }
    1925
    1926            if (i1 == 3)
    1927            {
    1928                avec3[j1].rotateAroundY(-((float)Math.PI / 2F));
    1929            }
    1930
    1931            avec3[j1].xCoord += (double)par2 + 0.5D;
    1932            avec3[j1].yCoord += (double)((float)par3 + 0.3125F);
    1933            avec3[j1].zCoord += (double)par4 + 0.5D;
    1934        }
    1935
    1936        Vec3 vec3 = null;
    1937        Vec3 vec31 = null;
    1938        Vec3 vec32 = null;
    1939        Vec3 vec33 = null;
    1940        byte b0 = 7;
    1941        byte b1 = 9;
    1942        byte b2 = 9;
    1943        byte b3 = 16;
    1944
    1945        for (int k1 = 0; k1 < 6; ++k1)
    1946        {
    1947            if (k1 == 0)
    1948            {
    1949                vec3 = avec3[0];
    1950                vec31 = avec3[1];
    1951                vec32 = avec3[2];
    1952                vec33 = avec3[3];
    1953                d0 = (double)icon.getInterpolatedU((double)b0);
    1954                d1 = (double)icon.getInterpolatedV((double)b2);
    1955                d2 = (double)icon.getInterpolatedU((double)b1);
    1956                d3 = (double)icon.getInterpolatedV((double)(b2 + 2));
    1957            }
    1958            else if (k1 == 1)
    1959            {
    1960                vec3 = avec3[7];
    1961                vec31 = avec3[6];
    1962                vec32 = avec3[5];
    1963                vec33 = avec3[4];
    1964            }
    1965            else if (k1 == 2)
    1966            {
    1967                vec3 = avec3[1];
    1968                vec31 = avec3[0];
    1969                vec32 = avec3[4];
    1970                vec33 = avec3[5];
    1971                d0 = (double)icon.getInterpolatedU((double)b0);
    1972                d1 = (double)icon.getInterpolatedV((double)b2);
    1973                d2 = (double)icon.getInterpolatedU((double)b1);
    1974                d3 = (double)icon.getInterpolatedV((double)b3);
    1975            }
    1976            else if (k1 == 3)
    1977            {
    1978                vec3 = avec3[2];
    1979                vec31 = avec3[1];
    1980                vec32 = avec3[5];
    1981                vec33 = avec3[6];
    1982            }
    1983            else if (k1 == 4)
    1984            {
    1985                vec3 = avec3[3];
    1986                vec31 = avec3[2];
    1987                vec32 = avec3[6];
    1988                vec33 = avec3[7];
    1989            }
    1990            else if (k1 == 5)
    1991            {
    1992                vec3 = avec3[0];
    1993                vec31 = avec3[3];
    1994                vec32 = avec3[7];
    1995                vec33 = avec3[4];
    1996            }
    1997
    1998            tessellator.addVertexWithUV(vec3.xCoord, vec3.yCoord, vec3.zCoord, d0, d3);
    1999            tessellator.addVertexWithUV(vec31.xCoord, vec31.yCoord, vec31.zCoord, d2, d3);
    2000            tessellator.addVertexWithUV(vec32.xCoord, vec32.yCoord, vec32.zCoord, d2, d1);
    2001            tessellator.addVertexWithUV(vec33.xCoord, vec33.yCoord, vec33.zCoord, d0, d1);
    2002        }
    2003
    2004        float f9 = 0.09375F;
    2005        float f10 = 0.09375F;
    2006        float f11 = 0.03125F;
    2007        avec3[0] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-f9), 0.0D, (double)(-f10));
    2008        avec3[1] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)f9, 0.0D, (double)(-f10));
    2009        avec3[2] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)f9, 0.0D, (double)f10);
    2010        avec3[3] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-f9), 0.0D, (double)f10);
    2011        avec3[4] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-f9), (double)f11, (double)(-f10));
    2012        avec3[5] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)f9, (double)f11, (double)(-f10));
    2013        avec3[6] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)f9, (double)f11, (double)f10);
    2014        avec3[7] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-f9), (double)f11, (double)f10);
    2015
    2016        for (int l1 = 0; l1 < 8; ++l1)
    2017        {
    2018            avec3[l1].zCoord += 0.21875D;
    2019
    2020            if (flag1)
    2021            {
    2022                avec3[l1].yCoord -= 0.09375D;
    2023                avec3[l1].zCoord -= 0.1625D;
    2024                avec3[l1].rotateAroundX(0.0F);
    2025            }
    2026            else if (flag)
    2027            {
    2028                avec3[l1].yCoord += 0.015625D;
    2029                avec3[l1].zCoord -= 0.171875D;
    2030                avec3[l1].rotateAroundX(0.17453294F);
    2031            }
    2032            else
    2033            {
    2034                avec3[l1].rotateAroundX(0.87266463F);
    2035            }
    2036
    2037            if (i1 == 2)
    2038            {
    2039                avec3[l1].rotateAroundY(0.0F);
    2040            }
    2041
    2042            if (i1 == 0)
    2043            {
    2044                avec3[l1].rotateAroundY((float)Math.PI);
    2045            }
    2046
    2047            if (i1 == 1)
    2048            {
    2049                avec3[l1].rotateAroundY(((float)Math.PI / 2F));
    2050            }
    2051
    2052            if (i1 == 3)
    2053            {
    2054                avec3[l1].rotateAroundY(-((float)Math.PI / 2F));
    2055            }
    2056
    2057            avec3[l1].xCoord += (double)par2 + 0.5D;
    2058            avec3[l1].yCoord += (double)((float)par3 + 0.3125F);
    2059            avec3[l1].zCoord += (double)par4 + 0.5D;
    2060        }
    2061
    2062        byte b4 = 5;
    2063        byte b5 = 11;
    2064        byte b6 = 3;
    2065        byte b7 = 9;
    2066
    2067        for (int i2 = 0; i2 < 6; ++i2)
    2068        {
    2069            if (i2 == 0)
    2070            {
    2071                vec3 = avec3[0];
    2072                vec31 = avec3[1];
    2073                vec32 = avec3[2];
    2074                vec33 = avec3[3];
    2075                d0 = (double)icon.getInterpolatedU((double)b4);
    2076                d1 = (double)icon.getInterpolatedV((double)b6);
    2077                d2 = (double)icon.getInterpolatedU((double)b5);
    2078                d3 = (double)icon.getInterpolatedV((double)b7);
    2079            }
    2080            else if (i2 == 1)
    2081            {
    2082                vec3 = avec3[7];
    2083                vec31 = avec3[6];
    2084                vec32 = avec3[5];
    2085                vec33 = avec3[4];
    2086            }
    2087            else if (i2 == 2)
    2088            {
    2089                vec3 = avec3[1];
    2090                vec31 = avec3[0];
    2091                vec32 = avec3[4];
    2092                vec33 = avec3[5];
    2093                d0 = (double)icon.getInterpolatedU((double)b4);
    2094                d1 = (double)icon.getInterpolatedV((double)b6);
    2095                d2 = (double)icon.getInterpolatedU((double)b5);
    2096                d3 = (double)icon.getInterpolatedV((double)(b6 + 2));
    2097            }
    2098            else if (i2 == 3)
    2099            {
    2100                vec3 = avec3[2];
    2101                vec31 = avec3[1];
    2102                vec32 = avec3[5];
    2103                vec33 = avec3[6];
    2104            }
    2105            else if (i2 == 4)
    2106            {
    2107                vec3 = avec3[3];
    2108                vec31 = avec3[2];
    2109                vec32 = avec3[6];
    2110                vec33 = avec3[7];
    2111            }
    2112            else if (i2 == 5)
    2113            {
    2114                vec3 = avec3[0];
    2115                vec31 = avec3[3];
    2116                vec32 = avec3[7];
    2117                vec33 = avec3[4];
    2118            }
    2119
    2120            tessellator.addVertexWithUV(vec3.xCoord, vec3.yCoord, vec3.zCoord, d0, d3);
    2121            tessellator.addVertexWithUV(vec31.xCoord, vec31.yCoord, vec31.zCoord, d2, d3);
    2122            tessellator.addVertexWithUV(vec32.xCoord, vec32.yCoord, vec32.zCoord, d2, d1);
    2123            tessellator.addVertexWithUV(vec33.xCoord, vec33.yCoord, vec33.zCoord, d0, d1);
    2124        }
    2125
    2126        if (flag)
    2127        {
    2128            double d4 = avec3[0].yCoord;
    2129            float f12 = 0.03125F;
    2130            float f13 = 0.5F - f12 / 2.0F;
    2131            float f14 = f13 + f12;
    2132            Icon icon1 = this.getBlockIcon(Block.tripWire);
    2133            double d5 = (double)icon.getMinU();
    2134            double d6 = (double)icon.getInterpolatedV(flag ? 2.0D : 0.0D);
    2135            double d7 = (double)icon.getMaxU();
    2136            double d8 = (double)icon.getInterpolatedV(flag ? 4.0D : 2.0D);
    2137            double d9 = (double)(flag2 ? 3.5F : 1.5F) / 16.0D;
    2138            f5 = par1Block.getBlockBrightness(this.blockAccess, par2, par3, par4) * 0.75F;
    2139            tessellator.setColorOpaque_F(f5, f5, f5);
    2140
    2141            if (i1 == 2)
    2142            {
    2143                tessellator.addVertexWithUV((double)((float)par2 + f13), (double)par3 + d9, (double)par4 + 0.25D, d5, d6);
    2144                tessellator.addVertexWithUV((double)((float)par2 + f14), (double)par3 + d9, (double)par4 + 0.25D, d5, d8);
    2145                tessellator.addVertexWithUV((double)((float)par2 + f14), (double)par3 + d9, (double)par4, d7, d8);
    2146                tessellator.addVertexWithUV((double)((float)par2 + f13), (double)par3 + d9, (double)par4, d7, d6);
    2147                tessellator.addVertexWithUV((double)((float)par2 + f13), d4, (double)par4 + 0.5D, d5, d6);
    2148                tessellator.addVertexWithUV((double)((float)par2 + f14), d4, (double)par4 + 0.5D, d5, d8);
    2149                tessellator.addVertexWithUV((double)((float)par2 + f14), (double)par3 + d9, (double)par4 + 0.25D, d7, d8);
    2150                tessellator.addVertexWithUV((double)((float)par2 + f13), (double)par3 + d9, (double)par4 + 0.25D, d7, d6);
    2151            }
    2152            else if (i1 == 0)
    2153            {
    2154                tessellator.addVertexWithUV((double)((float)par2 + f13), (double)par3 + d9, (double)par4 + 0.75D, d5, d6);
    2155                tessellator.addVertexWithUV((double)((float)par2 + f14), (double)par3 + d9, (double)par4 + 0.75D, d5, d8);
    2156                tessellator.addVertexWithUV((double)((float)par2 + f14), d4, (double)par4 + 0.5D, d7, d8);
    2157                tessellator.addVertexWithUV((double)((float)par2 + f13), d4, (double)par4 + 0.5D, d7, d6);
    2158                tessellator.addVertexWithUV((double)((float)par2 + f13), (double)par3 + d9, (double)(par4 + 1), d5, d6);
    2159                tessellator.addVertexWithUV((double)((float)par2 + f14), (double)par3 + d9, (double)(par4 + 1), d5, d8);
    2160                tessellator.addVertexWithUV((double)((float)par2 + f14), (double)par3 + d9, (double)par4 + 0.75D, d7, d8);
    2161                tessellator.addVertexWithUV((double)((float)par2 + f13), (double)par3 + d9, (double)par4 + 0.75D, d7, d6);
    2162            }
    2163            else if (i1 == 1)
    2164            {
    2165                tessellator.addVertexWithUV((double)par2, (double)par3 + d9, (double)((float)par4 + f14), d5, d8);
    2166                tessellator.addVertexWithUV((double)par2 + 0.25D, (double)par3 + d9, (double)((float)par4 + f14), d7, d8);
    2167                tessellator.addVertexWithUV((double)par2 + 0.25D, (double)par3 + d9, (double)((float)par4 + f13), d7, d6);
    2168                tessellator.addVertexWithUV((double)par2, (double)par3 + d9, (double)((float)par4 + f13), d5, d6);
    2169                tessellator.addVertexWithUV((double)par2 + 0.25D, (double)par3 + d9, (double)((float)par4 + f14), d5, d8);
    2170                tessellator.addVertexWithUV((double)par2 + 0.5D, d4, (double)((float)par4 + f14), d7, d8);
    2171                tessellator.addVertexWithUV((double)par2 + 0.5D, d4, (double)((float)par4 + f13), d7, d6);
    2172                tessellator.addVertexWithUV((double)par2 + 0.25D, (double)par3 + d9, (double)((float)par4 + f13), d5, d6);
    2173            }
    2174            else
    2175            {
    2176                tessellator.addVertexWithUV((double)par2 + 0.5D, d4, (double)((float)par4 + f14), d5, d8);
    2177                tessellator.addVertexWithUV((double)par2 + 0.75D, (double)par3 + d9, (double)((float)par4 + f14), d7, d8);
    2178                tessellator.addVertexWithUV((double)par2 + 0.75D, (double)par3 + d9, (double)((float)par4 + f13), d7, d6);
    2179                tessellator.addVertexWithUV((double)par2 + 0.5D, d4, (double)((float)par4 + f13), d5, d6);
    2180                tessellator.addVertexWithUV((double)par2 + 0.75D, (double)par3 + d9, (double)((float)par4 + f14), d5, d8);
    2181                tessellator.addVertexWithUV((double)(par2 + 1), (double)par3 + d9, (double)((float)par4 + f14), d7, d8);
    2182                tessellator.addVertexWithUV((double)(par2 + 1), (double)par3 + d9, (double)((float)par4 + f13), d7, d6);
    2183                tessellator.addVertexWithUV((double)par2 + 0.75D, (double)par3 + d9, (double)((float)par4 + f13), d5, d6);
    2184            }
    2185        }
    2186
    2187        return true;
    2188    }
    2189
    2190    /**
    2191     * Renders a trip wire block at the given coordinates
    2192     */
    2193    public boolean renderBlockTripWire(Block par1Block, int par2, int par3, int par4)
    2194    {
    2195        Tessellator tessellator = Tessellator.instance;
    2196        Icon icon = this.getBlockIconFromSide(par1Block, 0);
    2197        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    2198        boolean flag = (l & 4) == 4;
    2199        boolean flag1 = (l & 2) == 2;
    2200
    2201        if (this.hasOverrideBlockTexture())
    2202        {
    2203            icon = this.overrideBlockTexture;
    2204        }
    2205
    2206        tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    2207        float f = par1Block.getBlockBrightness(this.blockAccess, par2, par3, par4) * 0.75F;
    2208        tessellator.setColorOpaque_F(f, f, f);
    2209        double d0 = (double)icon.getMinU();
    2210        double d1 = (double)icon.getInterpolatedV(flag ? 2.0D : 0.0D);
    2211        double d2 = (double)icon.getMaxU();
    2212        double d3 = (double)icon.getInterpolatedV(flag ? 4.0D : 2.0D);
    2213        double d4 = (double)(flag1 ? 3.5F : 1.5F) / 16.0D;
    2214        boolean flag2 = BlockTripWire.func_72148_a(this.blockAccess, par2, par3, par4, l, 1);
    2215        boolean flag3 = BlockTripWire.func_72148_a(this.blockAccess, par2, par3, par4, l, 3);
    2216        boolean flag4 = BlockTripWire.func_72148_a(this.blockAccess, par2, par3, par4, l, 2);
    2217        boolean flag5 = BlockTripWire.func_72148_a(this.blockAccess, par2, par3, par4, l, 0);
    2218        float f1 = 0.03125F;
    2219        float f2 = 0.5F - f1 / 2.0F;
    2220        float f3 = f2 + f1;
    2221
    2222        if (!flag4 && !flag3 && !flag5 && !flag2)
    2223        {
    2224            flag4 = true;
    2225            flag5 = true;
    2226        }
    2227
    2228        if (flag4)
    2229        {
    2230            tessellator.addVertexWithUV((double)((float)par2 + f2), (double)par3 + d4, (double)par4 + 0.25D, d0, d1);
    2231            tessellator.addVertexWithUV((double)((float)par2 + f3), (double)par3 + d4, (double)par4 + 0.25D, d0, d3);
    2232            tessellator.addVertexWithUV((double)((float)par2 + f3), (double)par3 + d4, (double)par4, d2, d3);
    2233            tessellator.addVertexWithUV((double)((float)par2 + f2), (double)par3 + d4, (double)par4, d2, d1);
    2234            tessellator.addVertexWithUV((double)((float)par2 + f2), (double)par3 + d4, (double)par4, d2, d1);
    2235            tessellator.addVertexWithUV((double)((float)par2 + f3), (double)par3 + d4, (double)par4, d2, d3);
    2236            tessellator.addVertexWithUV((double)((float)par2 + f3), (double)par3 + d4, (double)par4 + 0.25D, d0, d3);
    2237            tessellator.addVertexWithUV((double)((float)par2 + f2), (double)par3 + d4, (double)par4 + 0.25D, d0, d1);
    2238        }
    2239
    2240        if (flag4 || flag5 && !flag3 && !flag2)
    2241        {
    2242            tessellator.addVertexWithUV((double)((float)par2 + f2), (double)par3 + d4, (double)par4 + 0.5D, d0, d1);
    2243            tessellator.addVertexWithUV((double)((float)par2 + f3), (double)par3 + d4, (double)par4 + 0.5D, d0, d3);
    2244            tessellator.addVertexWithUV((double)((float)par2 + f3), (double)par3 + d4, (double)par4 + 0.25D, d2, d3);
    2245            tessellator.addVertexWithUV((double)((float)par2 + f2), (double)par3 + d4, (double)par4 + 0.25D, d2, d1);
    2246            tessellator.addVertexWithUV((double)((float)par2 + f2), (double)par3 + d4, (double)par4 + 0.25D, d2, d1);
    2247            tessellator.addVertexWithUV((double)((float)par2 + f3), (double)par3 + d4, (double)par4 + 0.25D, d2, d3);
    2248            tessellator.addVertexWithUV((double)((float)par2 + f3), (double)par3 + d4, (double)par4 + 0.5D, d0, d3);
    2249            tessellator.addVertexWithUV((double)((float)par2 + f2), (double)par3 + d4, (double)par4 + 0.5D, d0, d1);
    2250        }
    2251
    2252        if (flag5 || flag4 && !flag3 && !flag2)
    2253        {
    2254            tessellator.addVertexWithUV((double)((float)par2 + f2), (double)par3 + d4, (double)par4 + 0.75D, d0, d1);
    2255            tessellator.addVertexWithUV((double)((float)par2 + f3), (double)par3 + d4, (double)par4 + 0.75D, d0, d3);
    2256            tessellator.addVertexWithUV((double)((float)par2 + f3), (double)par3 + d4, (double)par4 + 0.5D, d2, d3);
    2257            tessellator.addVertexWithUV((double)((float)par2 + f2), (double)par3 + d4, (double)par4 + 0.5D, d2, d1);
    2258            tessellator.addVertexWithUV((double)((float)par2 + f2), (double)par3 + d4, (double)par4 + 0.5D, d2, d1);
    2259            tessellator.addVertexWithUV((double)((float)par2 + f3), (double)par3 + d4, (double)par4 + 0.5D, d2, d3);
    2260            tessellator.addVertexWithUV((double)((float)par2 + f3), (double)par3 + d4, (double)par4 + 0.75D, d0, d3);
    2261            tessellator.addVertexWithUV((double)((float)par2 + f2), (double)par3 + d4, (double)par4 + 0.75D, d0, d1);
    2262        }
    2263
    2264        if (flag5)
    2265        {
    2266            tessellator.addVertexWithUV((double)((float)par2 + f2), (double)par3 + d4, (double)(par4 + 1), d0, d1);
    2267            tessellator.addVertexWithUV((double)((float)par2 + f3), (double)par3 + d4, (double)(par4 + 1), d0, d3);
    2268            tessellator.addVertexWithUV((double)((float)par2 + f3), (double)par3 + d4, (double)par4 + 0.75D, d2, d3);
    2269            tessellator.addVertexWithUV((double)((float)par2 + f2), (double)par3 + d4, (double)par4 + 0.75D, d2, d1);
    2270            tessellator.addVertexWithUV((double)((float)par2 + f2), (double)par3 + d4, (double)par4 + 0.75D, d2, d1);
    2271            tessellator.addVertexWithUV((double)((float)par2 + f3), (double)par3 + d4, (double)par4 + 0.75D, d2, d3);
    2272            tessellator.addVertexWithUV((double)((float)par2 + f3), (double)par3 + d4, (double)(par4 + 1), d0, d3);
    2273            tessellator.addVertexWithUV((double)((float)par2 + f2), (double)par3 + d4, (double)(par4 + 1), d0, d1);
    2274        }
    2275
    2276        if (flag2)
    2277        {
    2278            tessellator.addVertexWithUV((double)par2, (double)par3 + d4, (double)((float)par4 + f3), d0, d3);
    2279            tessellator.addVertexWithUV((double)par2 + 0.25D, (double)par3 + d4, (double)((float)par4 + f3), d2, d3);
    2280            tessellator.addVertexWithUV((double)par2 + 0.25D, (double)par3 + d4, (double)((float)par4 + f2), d2, d1);
    2281            tessellator.addVertexWithUV((double)par2, (double)par3 + d4, (double)((float)par4 + f2), d0, d1);
    2282            tessellator.addVertexWithUV((double)par2, (double)par3 + d4, (double)((float)par4 + f2), d0, d1);
    2283            tessellator.addVertexWithUV((double)par2 + 0.25D, (double)par3 + d4, (double)((float)par4 + f2), d2, d1);
    2284            tessellator.addVertexWithUV((double)par2 + 0.25D, (double)par3 + d4, (double)((float)par4 + f3), d2, d3);
    2285            tessellator.addVertexWithUV((double)par2, (double)par3 + d4, (double)((float)par4 + f3), d0, d3);
    2286        }
    2287
    2288        if (flag2 || flag3 && !flag4 && !flag5)
    2289        {
    2290            tessellator.addVertexWithUV((double)par2 + 0.25D, (double)par3 + d4, (double)((float)par4 + f3), d0, d3);
    2291            tessellator.addVertexWithUV((double)par2 + 0.5D, (double)par3 + d4, (double)((float)par4 + f3), d2, d3);
    2292            tessellator.addVertexWithUV((double)par2 + 0.5D, (double)par3 + d4, (double)((float)par4 + f2), d2, d1);
    2293            tessellator.addVertexWithUV((double)par2 + 0.25D, (double)par3 + d4, (double)((float)par4 + f2), d0, d1);
    2294            tessellator.addVertexWithUV((double)par2 + 0.25D, (double)par3 + d4, (double)((float)par4 + f2), d0, d1);
    2295            tessellator.addVertexWithUV((double)par2 + 0.5D, (double)par3 + d4, (double)((float)par4 + f2), d2, d1);
    2296            tessellator.addVertexWithUV((double)par2 + 0.5D, (double)par3 + d4, (double)((float)par4 + f3), d2, d3);
    2297            tessellator.addVertexWithUV((double)par2 + 0.25D, (double)par3 + d4, (double)((float)par4 + f3), d0, d3);
    2298        }
    2299
    2300        if (flag3 || flag2 && !flag4 && !flag5)
    2301        {
    2302            tessellator.addVertexWithUV((double)par2 + 0.5D, (double)par3 + d4, (double)((float)par4 + f3), d0, d3);
    2303            tessellator.addVertexWithUV((double)par2 + 0.75D, (double)par3 + d4, (double)((float)par4 + f3), d2, d3);
    2304            tessellator.addVertexWithUV((double)par2 + 0.75D, (double)par3 + d4, (double)((float)par4 + f2), d2, d1);
    2305            tessellator.addVertexWithUV((double)par2 + 0.5D, (double)par3 + d4, (double)((float)par4 + f2), d0, d1);
    2306            tessellator.addVertexWithUV((double)par2 + 0.5D, (double)par3 + d4, (double)((float)par4 + f2), d0, d1);
    2307            tessellator.addVertexWithUV((double)par2 + 0.75D, (double)par3 + d4, (double)((float)par4 + f2), d2, d1);
    2308            tessellator.addVertexWithUV((double)par2 + 0.75D, (double)par3 + d4, (double)((float)par4 + f3), d2, d3);
    2309            tessellator.addVertexWithUV((double)par2 + 0.5D, (double)par3 + d4, (double)((float)par4 + f3), d0, d3);
    2310        }
    2311
    2312        if (flag3)
    2313        {
    2314            tessellator.addVertexWithUV((double)par2 + 0.75D, (double)par3 + d4, (double)((float)par4 + f3), d0, d3);
    2315            tessellator.addVertexWithUV((double)(par2 + 1), (double)par3 + d4, (double)((float)par4 + f3), d2, d3);
    2316            tessellator.addVertexWithUV((double)(par2 + 1), (double)par3 + d4, (double)((float)par4 + f2), d2, d1);
    2317            tessellator.addVertexWithUV((double)par2 + 0.75D, (double)par3 + d4, (double)((float)par4 + f2), d0, d1);
    2318            tessellator.addVertexWithUV((double)par2 + 0.75D, (double)par3 + d4, (double)((float)par4 + f2), d0, d1);
    2319            tessellator.addVertexWithUV((double)(par2 + 1), (double)par3 + d4, (double)((float)par4 + f2), d2, d1);
    2320            tessellator.addVertexWithUV((double)(par2 + 1), (double)par3 + d4, (double)((float)par4 + f3), d2, d3);
    2321            tessellator.addVertexWithUV((double)par2 + 0.75D, (double)par3 + d4, (double)((float)par4 + f3), d0, d3);
    2322        }
    2323
    2324        return true;
    2325    }
    2326
    2327    /**
    2328     * Renders a fire block at the given coordinates
    2329     */
    2330    public boolean renderBlockFire(BlockFire par1BlockFire, int par2, int par3, int par4)
    2331    {
    2332        Tessellator tessellator = Tessellator.instance;
    2333        Icon icon = par1BlockFire.func_94438_c(0);
    2334        Icon icon1 = par1BlockFire.func_94438_c(1);
    2335        Icon icon2 = icon;
    2336
    2337        if (this.hasOverrideBlockTexture())
    2338        {
    2339            icon2 = this.overrideBlockTexture;
    2340        }
    2341
    2342        tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
    2343        tessellator.setBrightness(par1BlockFire.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    2344        double d0 = (double)icon2.getMinU();
    2345        double d1 = (double)icon2.getMinV();
    2346        double d2 = (double)icon2.getMaxU();
    2347        double d3 = (double)icon2.getMaxV();
    2348        float f = 1.4F;
    2349        double d4;
    2350        double d5;
    2351        double d6;
    2352        double d7;
    2353        double d8;
    2354        double d9;
    2355        double d10;
    2356
    2357        if (!this.blockAccess.doesBlockHaveSolidTopSurface(par2, par3 - 1, par4) && !Block.fire.canBlockCatchFire(this.blockAccess, par2, par3 - 1, par4, UP))
    2358        {
    2359            float f1 = 0.2F;
    2360            float f2 = 0.0625F;
    2361
    2362            if ((par2 + par3 + par4 & 1) == 1)
    2363            {
    2364                d0 = (double)icon1.getMinU();
    2365                d1 = (double)icon1.getMinV();
    2366                d2 = (double)icon1.getMaxU();
    2367                d3 = (double)icon1.getMaxV();
    2368            }
    2369
    2370            if ((par2 / 2 + par3 / 2 + par4 / 2 & 1) == 1)
    2371            {
    2372                d5 = d2;
    2373                d2 = d0;
    2374                d0 = d5;
    2375            }
    2376
    2377            if (Block.fire.canBlockCatchFire(this.blockAccess, par2 - 1, par3, par4, EAST))
    2378            {
    2379                tessellator.addVertexWithUV((double)((float)par2 + f1), (double)((float)par3 + f + f2), (double)(par4 + 1), d2, d1);
    2380                tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)(par3 + 0) + f2), (double)(par4 + 1), d2, d3);
    2381                tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)(par3 + 0) + f2), (double)(par4 + 0), d0, d3);
    2382                tessellator.addVertexWithUV((double)((float)par2 + f1), (double)((float)par3 + f + f2), (double)(par4 + 0), d0, d1);
    2383                tessellator.addVertexWithUV((double)((float)par2 + f1), (double)((float)par3 + f + f2), (double)(par4 + 0), d0, d1);
    2384                tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)(par3 + 0) + f2), (double)(par4 + 0), d0, d3);
    2385                tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)(par3 + 0) + f2), (double)(par4 + 1), d2, d3);
    2386                tessellator.addVertexWithUV((double)((float)par2 + f1), (double)((float)par3 + f + f2), (double)(par4 + 1), d2, d1);
    2387            }
    2388
    2389            if (Block.fire.canBlockCatchFire(this.blockAccess, par2 + 1, par3, par4, WEST))
    2390            {
    2391                tessellator.addVertexWithUV((double)((float)(par2 + 1) - f1), (double)((float)par3 + f + f2), (double)(par4 + 0), d0, d1);
    2392                tessellator.addVertexWithUV((double)(par2 + 1 - 0), (double)((float)(par3 + 0) + f2), (double)(par4 + 0), d0, d3);
    2393                tessellator.addVertexWithUV((double)(par2 + 1 - 0), (double)((float)(par3 + 0) + f2), (double)(par4 + 1), d2, d3);
    2394                tessellator.addVertexWithUV((double)((float)(par2 + 1) - f1), (double)((float)par3 + f + f2), (double)(par4 + 1), d2, d1);
    2395                tessellator.addVertexWithUV((double)((float)(par2 + 1) - f1), (double)((float)par3 + f + f2), (double)(par4 + 1), d2, d1);
    2396                tessellator.addVertexWithUV((double)(par2 + 1 - 0), (double)((float)(par3 + 0) + f2), (double)(par4 + 1), d2, d3);
    2397                tessellator.addVertexWithUV((double)(par2 + 1 - 0), (double)((float)(par3 + 0) + f2), (double)(par4 + 0), d0, d3);
    2398                tessellator.addVertexWithUV((double)((float)(par2 + 1) - f1), (double)((float)par3 + f + f2), (double)(par4 + 0), d0, d1);
    2399            }
    2400
    2401            if (Block.fire.canBlockCatchFire(this.blockAccess, par2, par3, par4 - 1, SOUTH))
    2402            {
    2403                tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)par3 + f + f2), (double)((float)par4 + f1), d2, d1);
    2404                tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)(par3 + 0) + f2), (double)(par4 + 0), d2, d3);
    2405                tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)(par3 + 0) + f2), (double)(par4 + 0), d0, d3);
    2406                tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)par3 + f + f2), (double)((float)par4 + f1), d0, d1);
    2407                tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)par3 + f + f2), (double)((float)par4 + f1), d0, d1);
    2408                tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)(par3 + 0) + f2), (double)(par4 + 0), d0, d3);
    2409                tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)(par3 + 0) + f2), (double)(par4 + 0), d2, d3);
    2410                tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)par3 + f + f2), (double)((float)par4 + f1), d2, d1);
    2411            }
    2412
    2413            if (Block.fire.canBlockCatchFire(this.blockAccess, par2, par3, par4 + 1, NORTH))
    2414            {
    2415                tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)par3 + f + f2), (double)((float)(par4 + 1) - f1), d0, d1);
    2416                tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)(par3 + 0) + f2), (double)(par4 + 1 - 0), d0, d3);
    2417                tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)(par3 + 0) + f2), (double)(par4 + 1 - 0), d2, d3);
    2418                tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)par3 + f + f2), (double)((float)(par4 + 1) - f1), d2, d1);
    2419                tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)par3 + f + f2), (double)((float)(par4 + 1) - f1), d2, d1);
    2420                tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)(par3 + 0) + f2), (double)(par4 + 1 - 0), d2, d3);
    2421                tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)(par3 + 0) + f2), (double)(par4 + 1 - 0), d0, d3);
    2422                tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)par3 + f + f2), (double)((float)(par4 + 1) - f1), d0, d1);
    2423            }
    2424
    2425            if (Block.fire.canBlockCatchFire(this.blockAccess, par2, par3 + 1, par4, DOWN))
    2426            {
    2427                d5 = (double)par2 + 0.5D + 0.5D;
    2428                d6 = (double)par2 + 0.5D - 0.5D;
    2429                d7 = (double)par4 + 0.5D + 0.5D;
    2430                d8 = (double)par4 + 0.5D - 0.5D;
    2431                d9 = (double)par2 + 0.5D - 0.5D;
    2432                d10 = (double)par2 + 0.5D + 0.5D;
    2433                d4 = (double)par4 + 0.5D - 0.5D;
    2434                double d11 = (double)par4 + 0.5D + 0.5D;
    2435                d0 = (double)icon.getMinU();
    2436                d1 = (double)icon.getMinV();
    2437                d2 = (double)icon.getMaxU();
    2438                d3 = (double)icon.getMaxV();
    2439                ++par3;
    2440                f = -0.2F;
    2441
    2442                if ((par2 + par3 + par4 & 1) == 0)
    2443                {
    2444                    tessellator.addVertexWithUV(d9, (double)((float)par3 + f), (double)(par4 + 0), d2, d1);
    2445                    tessellator.addVertexWithUV(d5, (double)(par3 + 0), (double)(par4 + 0), d2, d3);
    2446                    tessellator.addVertexWithUV(d5, (double)(par3 + 0), (double)(par4 + 1), d0, d3);
    2447                    tessellator.addVertexWithUV(d9, (double)((float)par3 + f), (double)(par4 + 1), d0, d1);
    2448                    d0 = (double)icon1.getMinU();
    2449                    d1 = (double)icon1.getMinV();
    2450                    d2 = (double)icon1.getMaxU();
    2451                    d3 = (double)icon1.getMaxV();
    2452                    tessellator.addVertexWithUV(d10, (double)((float)par3 + f), (double)(par4 + 1), d2, d1);
    2453                    tessellator.addVertexWithUV(d6, (double)(par3 + 0), (double)(par4 + 1), d2, d3);
    2454                    tessellator.addVertexWithUV(d6, (double)(par3 + 0), (double)(par4 + 0), d0, d3);
    2455                    tessellator.addVertexWithUV(d10, (double)((float)par3 + f), (double)(par4 + 0), d0, d1);
    2456                }
    2457                else
    2458                {
    2459                    tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)par3 + f), d11, d2, d1);
    2460                    tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 0), d8, d2, d3);
    2461                    tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 0), d8, d0, d3);
    2462                    tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)par3 + f), d11, d0, d1);
    2463                    d0 = (double)icon1.getMinU();
    2464                    d1 = (double)icon1.getMinV();
    2465                    d2 = (double)icon1.getMaxU();
    2466                    d3 = (double)icon1.getMaxV();
    2467                    tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)par3 + f), d4, d2, d1);
    2468                    tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 0), d7, d2, d3);
    2469                    tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 0), d7, d0, d3);
    2470                    tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)par3 + f), d4, d0, d1);
    2471                }
    2472            }
    2473        }
    2474        else
    2475        {
    2476            double d12 = (double)par2 + 0.5D + 0.2D;
    2477            d5 = (double)par2 + 0.5D - 0.2D;
    2478            d6 = (double)par4 + 0.5D + 0.2D;
    2479            d7 = (double)par4 + 0.5D - 0.2D;
    2480            d8 = (double)par2 + 0.5D - 0.3D;
    2481            d9 = (double)par2 + 0.5D + 0.3D;
    2482            d10 = (double)par4 + 0.5D - 0.3D;
    2483            d4 = (double)par4 + 0.5D + 0.3D;
    2484            tessellator.addVertexWithUV(d8, (double)((float)par3 + f), (double)(par4 + 1), d2, d1);
    2485            tessellator.addVertexWithUV(d12, (double)(par3 + 0), (double)(par4 + 1), d2, d3);
    2486            tessellator.addVertexWithUV(d12, (double)(par3 + 0), (double)(par4 + 0), d0, d3);
    2487            tessellator.addVertexWithUV(d8, (double)((float)par3 + f), (double)(par4 + 0), d0, d1);
    2488            tessellator.addVertexWithUV(d9, (double)((float)par3 + f), (double)(par4 + 0), d2, d1);
    2489            tessellator.addVertexWithUV(d5, (double)(par3 + 0), (double)(par4 + 0), d2, d3);
    2490            tessellator.addVertexWithUV(d5, (double)(par3 + 0), (double)(par4 + 1), d0, d3);
    2491            tessellator.addVertexWithUV(d9, (double)((float)par3 + f), (double)(par4 + 1), d0, d1);
    2492            d0 = (double)icon1.getMinU();
    2493            d1 = (double)icon1.getMinV();
    2494            d2 = (double)icon1.getMaxU();
    2495            d3 = (double)icon1.getMaxV();
    2496            tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)par3 + f), d4, d2, d1);
    2497            tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 0), d7, d2, d3);
    2498            tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 0), d7, d0, d3);
    2499            tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)par3 + f), d4, d0, d1);
    2500            tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)par3 + f), d10, d2, d1);
    2501            tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 0), d6, d2, d3);
    2502            tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 0), d6, d0, d3);
    2503            tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)par3 + f), d10, d0, d1);
    2504            d12 = (double)par2 + 0.5D - 0.5D;
    2505            d5 = (double)par2 + 0.5D + 0.5D;
    2506            d6 = (double)par4 + 0.5D - 0.5D;
    2507            d7 = (double)par4 + 0.5D + 0.5D;
    2508            d8 = (double)par2 + 0.5D - 0.4D;
    2509            d9 = (double)par2 + 0.5D + 0.4D;
    2510            d10 = (double)par4 + 0.5D - 0.4D;
    2511            d4 = (double)par4 + 0.5D + 0.4D;
    2512            tessellator.addVertexWithUV(d8, (double)((float)par3 + f), (double)(par4 + 0), d0, d1);
    2513            tessellator.addVertexWithUV(d12, (double)(par3 + 0), (double)(par4 + 0), d0, d3);
    2514            tessellator.addVertexWithUV(d12, (double)(par3 + 0), (double)(par4 + 1), d2, d3);
    2515            tessellator.addVertexWithUV(d8, (double)((float)par3 + f), (double)(par4 + 1), d2, d1);
    2516            tessellator.addVertexWithUV(d9, (double)((float)par3 + f), (double)(par4 + 1), d0, d1);
    2517            tessellator.addVertexWithUV(d5, (double)(par3 + 0), (double)(par4 + 1), d0, d3);
    2518            tessellator.addVertexWithUV(d5, (double)(par3 + 0), (double)(par4 + 0), d2, d3);
    2519            tessellator.addVertexWithUV(d9, (double)((float)par3 + f), (double)(par4 + 0), d2, d1);
    2520            d0 = (double)icon.getMinU();
    2521            d1 = (double)icon.getMinV();
    2522            d2 = (double)icon.getMaxU();
    2523            d3 = (double)icon.getMaxV();
    2524            tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)par3 + f), d4, d0, d1);
    2525            tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 0), d7, d0, d3);
    2526            tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 0), d7, d2, d3);
    2527            tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)par3 + f), d4, d2, d1);
    2528            tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)par3 + f), d10, d0, d1);
    2529            tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 0), d6, d0, d3);
    2530            tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 0), d6, d2, d3);
    2531            tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)par3 + f), d10, d2, d1);
    2532        }
    2533
    2534        return true;
    2535    }
    2536
    2537    /**
    2538     * Renders a redstone wire block at the given coordinates
    2539     */
    2540    public boolean renderBlockRedstoneWire(Block par1Block, int par2, int par3, int par4)
    2541    {
    2542        Tessellator tessellator = Tessellator.instance;
    2543        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    2544        Icon icon = BlockRedstoneWire.func_94409_b("redstoneDust_cross");
    2545        Icon icon1 = BlockRedstoneWire.func_94409_b("redstoneDust_line");
    2546        Icon icon2 = BlockRedstoneWire.func_94409_b("redstoneDust_cross_overlay");
    2547        Icon icon3 = BlockRedstoneWire.func_94409_b("redstoneDust_line_overlay");
    2548        tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    2549        float f = 1.0F;
    2550        float f1 = (float)l / 15.0F;
    2551        float f2 = f1 * 0.6F + 0.4F;
    2552
    2553        if (l == 0)
    2554        {
    2555            f2 = 0.3F;
    2556        }
    2557
    2558        float f3 = f1 * f1 * 0.7F - 0.5F;
    2559        float f4 = f1 * f1 * 0.6F - 0.7F;
    2560
    2561        if (f3 < 0.0F)
    2562        {
    2563            f3 = 0.0F;
    2564        }
    2565
    2566        if (f4 < 0.0F)
    2567        {
    2568            f4 = 0.0F;
    2569        }
    2570
    2571        tessellator.setColorOpaque_F(f2, f3, f4);
    2572        boolean flag = BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, par2 - 1, par3, par4, 1) || !this.blockAccess.isBlockNormalCube(par2 - 1, par3, par4) && BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, par2 - 1, par3 - 1, par4, -1);
    2573        boolean flag1 = BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, par2 + 1, par3, par4, 3) || !this.blockAccess.isBlockNormalCube(par2 + 1, par3, par4) && BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, par2 + 1, par3 - 1, par4, -1);
    2574        boolean flag2 = BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, par2, par3, par4 - 1, 2) || !this.blockAccess.isBlockNormalCube(par2, par3, par4 - 1) && BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, par2, par3 - 1, par4 - 1, -1);
    2575        boolean flag3 = BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, par2, par3, par4 + 1, 0) || !this.blockAccess.isBlockNormalCube(par2, par3, par4 + 1) && BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, par2, par3 - 1, par4 + 1, -1);
    2576
    2577        if (!this.blockAccess.isBlockNormalCube(par2, par3 + 1, par4))
    2578        {
    2579            if (this.blockAccess.isBlockNormalCube(par2 - 1, par3, par4) && BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, par2 - 1, par3 + 1, par4, -1))
    2580            {
    2581                flag = true;
    2582            }
    2583
    2584            if (this.blockAccess.isBlockNormalCube(par2 + 1, par3, par4) && BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, par2 + 1, par3 + 1, par4, -1))
    2585            {
    2586                flag1 = true;
    2587            }
    2588
    2589            if (this.blockAccess.isBlockNormalCube(par2, par3, par4 - 1) && BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, par2, par3 + 1, par4 - 1, -1))
    2590            {
    2591                flag2 = true;
    2592            }
    2593
    2594            if (this.blockAccess.isBlockNormalCube(par2, par3, par4 + 1) && BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, par2, par3 + 1, par4 + 1, -1))
    2595            {
    2596                flag3 = true;
    2597            }
    2598        }
    2599
    2600        float f5 = (float)(par2 + 0);
    2601        float f6 = (float)(par2 + 1);
    2602        float f7 = (float)(par4 + 0);
    2603        float f8 = (float)(par4 + 1);
    2604        int i1 = 0;
    2605
    2606        if ((flag || flag1) && !flag2 && !flag3)
    2607        {
    2608            i1 = 1;
    2609        }
    2610
    2611        if ((flag2 || flag3) && !flag1 && !flag)
    2612        {
    2613            i1 = 2;
    2614        }
    2615
    2616        if (i1 == 0)
    2617        {
    2618            int j1 = 0;
    2619            int k1 = 0;
    2620            int l1 = 16;
    2621            int i2 = 16;
    2622
    2623            if (!flag)
    2624            {
    2625                f5 += 0.3125F;
    2626            }
    2627
    2628            if (!flag)
    2629            {
    2630                j1 += 5;
    2631            }
    2632
    2633            if (!flag1)
    2634            {
    2635                f6 -= 0.3125F;
    2636            }
    2637
    2638            if (!flag1)
    2639            {
    2640                l1 -= 5;
    2641            }
    2642
    2643            if (!flag2)
    2644            {
    2645                f7 += 0.3125F;
    2646            }
    2647
    2648            if (!flag2)
    2649            {
    2650                k1 += 5;
    2651            }
    2652
    2653            if (!flag3)
    2654            {
    2655                f8 -= 0.3125F;
    2656            }
    2657
    2658            if (!flag3)
    2659            {
    2660                i2 -= 5;
    2661            }
    2662
    2663            tessellator.addVertexWithUV((double)f6, (double)par3 + 0.015625D, (double)f8, (double)icon.getInterpolatedU((double)l1), (double)icon.getInterpolatedV((double)i2));
    2664            tessellator.addVertexWithUV((double)f6, (double)par3 + 0.015625D, (double)f7, (double)icon.getInterpolatedU((double)l1), (double)icon.getInterpolatedV((double)k1));
    2665            tessellator.addVertexWithUV((double)f5, (double)par3 + 0.015625D, (double)f7, (double)icon.getInterpolatedU((double)j1), (double)icon.getInterpolatedV((double)k1));
    2666            tessellator.addVertexWithUV((double)f5, (double)par3 + 0.015625D, (double)f8, (double)icon.getInterpolatedU((double)j1), (double)icon.getInterpolatedV((double)i2));
    2667            tessellator.setColorOpaque_F(f, f, f);
    2668            tessellator.addVertexWithUV((double)f6, (double)par3 + 0.015625D, (double)f8, (double)icon2.getInterpolatedU((double)l1), (double)icon2.getInterpolatedV((double)i2));
    2669            tessellator.addVertexWithUV((double)f6, (double)par3 + 0.015625D, (double)f7, (double)icon2.getInterpolatedU((double)l1), (double)icon2.getInterpolatedV((double)k1));
    2670            tessellator.addVertexWithUV((double)f5, (double)par3 + 0.015625D, (double)f7, (double)icon2.getInterpolatedU((double)j1), (double)icon2.getInterpolatedV((double)k1));
    2671            tessellator.addVertexWithUV((double)f5, (double)par3 + 0.015625D, (double)f8, (double)icon2.getInterpolatedU((double)j1), (double)icon2.getInterpolatedV((double)i2));
    2672        }
    2673        else if (i1 == 1)
    2674        {
    2675            tessellator.addVertexWithUV((double)f6, (double)par3 + 0.015625D, (double)f8, (double)icon1.getMaxU(), (double)icon1.getMaxV());
    2676            tessellator.addVertexWithUV((double)f6, (double)par3 + 0.015625D, (double)f7, (double)icon1.getMaxU(), (double)icon1.getMinV());
    2677            tessellator.addVertexWithUV((double)f5, (double)par3 + 0.015625D, (double)f7, (double)icon1.getMinU(), (double)icon1.getMinV());
    2678            tessellator.addVertexWithUV((double)f5, (double)par3 + 0.015625D, (double)f8, (double)icon1.getMinU(), (double)icon1.getMaxV());
    2679            tessellator.setColorOpaque_F(f, f, f);
    2680            tessellator.addVertexWithUV((double)f6, (double)par3 + 0.015625D, (double)f8, (double)icon3.getMaxU(), (double)icon3.getMaxV());
    2681            tessellator.addVertexWithUV((double)f6, (double)par3 + 0.015625D, (double)f7, (double)icon3.getMaxU(), (double)icon3.getMinV());
    2682            tessellator.addVertexWithUV((double)f5, (double)par3 + 0.015625D, (double)f7, (double)icon3.getMinU(), (double)icon3.getMinV());
    2683            tessellator.addVertexWithUV((double)f5, (double)par3 + 0.015625D, (double)f8, (double)icon3.getMinU(), (double)icon3.getMaxV());
    2684        }
    2685        else
    2686        {
    2687            tessellator.addVertexWithUV((double)f6, (double)par3 + 0.015625D, (double)f8, (double)icon1.getMaxU(), (double)icon1.getMaxV());
    2688            tessellator.addVertexWithUV((double)f6, (double)par3 + 0.015625D, (double)f7, (double)icon1.getMinU(), (double)icon1.getMaxV());
    2689            tessellator.addVertexWithUV((double)f5, (double)par3 + 0.015625D, (double)f7, (double)icon1.getMinU(), (double)icon1.getMinV());
    2690            tessellator.addVertexWithUV((double)f5, (double)par3 + 0.015625D, (double)f8, (double)icon1.getMaxU(), (double)icon1.getMinV());
    2691            tessellator.setColorOpaque_F(f, f, f);
    2692            tessellator.addVertexWithUV((double)f6, (double)par3 + 0.015625D, (double)f8, (double)icon3.getMaxU(), (double)icon3.getMaxV());
    2693            tessellator.addVertexWithUV((double)f6, (double)par3 + 0.015625D, (double)f7, (double)icon3.getMinU(), (double)icon3.getMaxV());
    2694            tessellator.addVertexWithUV((double)f5, (double)par3 + 0.015625D, (double)f7, (double)icon3.getMinU(), (double)icon3.getMinV());
    2695            tessellator.addVertexWithUV((double)f5, (double)par3 + 0.015625D, (double)f8, (double)icon3.getMaxU(), (double)icon3.getMinV());
    2696        }
    2697
    2698        if (!this.blockAccess.isBlockNormalCube(par2, par3 + 1, par4))
    2699        {
    2700            if (this.blockAccess.isBlockNormalCube(par2 - 1, par3, par4) && this.blockAccess.getBlockId(par2 - 1, par3 + 1, par4) == Block.redstoneWire.blockID)
    2701            {
    2702                tessellator.setColorOpaque_F(f * f2, f * f3, f * f4);
    2703                tessellator.addVertexWithUV((double)par2 + 0.015625D, (double)((float)(par3 + 1) + 0.021875F), (double)(par4 + 1), (double)icon1.getMaxU(), (double)icon1.getMinV());
    2704                tessellator.addVertexWithUV((double)par2 + 0.015625D, (double)(par3 + 0), (double)(par4 + 1), (double)icon1.getMinU(), (double)icon1.getMinV());
    2705                tessellator.addVertexWithUV((double)par2 + 0.015625D, (double)(par3 + 0), (double)(par4 + 0), (double)icon1.getMinU(), (double)icon1.getMaxV());
    2706                tessellator.addVertexWithUV((double)par2 + 0.015625D, (double)((float)(par3 + 1) + 0.021875F), (double)(par4 + 0), (double)icon1.getMaxU(), (double)icon1.getMaxV());
    2707                tessellator.setColorOpaque_F(f, f, f);
    2708                tessellator.addVertexWithUV((double)par2 + 0.015625D, (double)((float)(par3 + 1) + 0.021875F), (double)(par4 + 1), (double)icon3.getMaxU(), (double)icon3.getMinV());
    2709                tessellator.addVertexWithUV((double)par2 + 0.015625D, (double)(par3 + 0), (double)(par4 + 1), (double)icon3.getMinU(), (double)icon3.getMinV());
    2710                tessellator.addVertexWithUV((double)par2 + 0.015625D, (double)(par3 + 0), (double)(par4 + 0), (double)icon3.getMinU(), (double)icon3.getMaxV());
    2711                tessellator.addVertexWithUV((double)par2 + 0.015625D, (double)((float)(par3 + 1) + 0.021875F), (double)(par4 + 0), (double)icon3.getMaxU(), (double)icon3.getMaxV());
    2712            }
    2713
    2714            if (this.blockAccess.isBlockNormalCube(par2 + 1, par3, par4) && this.blockAccess.getBlockId(par2 + 1, par3 + 1, par4) == Block.redstoneWire.blockID)
    2715            {
    2716                tessellator.setColorOpaque_F(f * f2, f * f3, f * f4);
    2717                tessellator.addVertexWithUV((double)(par2 + 1) - 0.015625D, (double)(par3 + 0), (double)(par4 + 1), (double)icon1.getMinU(), (double)icon1.getMaxV());
    2718                tessellator.addVertexWithUV((double)(par2 + 1) - 0.015625D, (double)((float)(par3 + 1) + 0.021875F), (double)(par4 + 1), (double)icon1.getMaxU(), (double)icon1.getMaxV());
    2719                tessellator.addVertexWithUV((double)(par2 + 1) - 0.015625D, (double)((float)(par3 + 1) + 0.021875F), (double)(par4 + 0), (double)icon1.getMaxU(), (double)icon1.getMinV());
    2720                tessellator.addVertexWithUV((double)(par2 + 1) - 0.015625D, (double)(par3 + 0), (double)(par4 + 0), (double)icon1.getMinU(), (double)icon1.getMinV());
    2721                tessellator.setColorOpaque_F(f, f, f);
    2722                tessellator.addVertexWithUV((double)(par2 + 1) - 0.015625D, (double)(par3 + 0), (double)(par4 + 1), (double)icon3.getMinU(), (double)icon3.getMaxV());
    2723                tessellator.addVertexWithUV((double)(par2 + 1) - 0.015625D, (double)((float)(par3 + 1) + 0.021875F), (double)(par4 + 1), (double)icon3.getMaxU(), (double)icon3.getMaxV());
    2724                tessellator.addVertexWithUV((double)(par2 + 1) - 0.015625D, (double)((float)(par3 + 1) + 0.021875F), (double)(par4 + 0), (double)icon3.getMaxU(), (double)icon3.getMinV());
    2725                tessellator.addVertexWithUV((double)(par2 + 1) - 0.015625D, (double)(par3 + 0), (double)(par4 + 0), (double)icon3.getMinU(), (double)icon3.getMinV());
    2726            }
    2727
    2728            if (this.blockAccess.isBlockNormalCube(par2, par3, par4 - 1) && this.blockAccess.getBlockId(par2, par3 + 1, par4 - 1) == Block.redstoneWire.blockID)
    2729            {
    2730                tessellator.setColorOpaque_F(f * f2, f * f3, f * f4);
    2731                tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 0), (double)par4 + 0.015625D, (double)icon1.getMinU(), (double)icon1.getMaxV());
    2732                tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)(par3 + 1) + 0.021875F), (double)par4 + 0.015625D, (double)icon1.getMaxU(), (double)icon1.getMaxV());
    2733                tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)(par3 + 1) + 0.021875F), (double)par4 + 0.015625D, (double)icon1.getMaxU(), (double)icon1.getMinV());
    2734                tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 0), (double)par4 + 0.015625D, (double)icon1.getMinU(), (double)icon1.getMinV());
    2735                tessellator.setColorOpaque_F(f, f, f);
    2736                tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 0), (double)par4 + 0.015625D, (double)icon3.getMinU(), (double)icon3.getMaxV());
    2737                tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)(par3 + 1) + 0.021875F), (double)par4 + 0.015625D, (double)icon3.getMaxU(), (double)icon3.getMaxV());
    2738                tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)(par3 + 1) + 0.021875F), (double)par4 + 0.015625D, (double)icon3.getMaxU(), (double)icon3.getMinV());
    2739                tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 0), (double)par4 + 0.015625D, (double)icon3.getMinU(), (double)icon3.getMinV());
    2740            }
    2741
    2742            if (this.blockAccess.isBlockNormalCube(par2, par3, par4 + 1) && this.blockAccess.getBlockId(par2, par3 + 1, par4 + 1) == Block.redstoneWire.blockID)
    2743            {
    2744                tessellator.setColorOpaque_F(f * f2, f * f3, f * f4);
    2745                tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)(par3 + 1) + 0.021875F), (double)(par4 + 1) - 0.015625D, (double)icon1.getMaxU(), (double)icon1.getMinV());
    2746                tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 0), (double)(par4 + 1) - 0.015625D, (double)icon1.getMinU(), (double)icon1.getMinV());
    2747                tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 0), (double)(par4 + 1) - 0.015625D, (double)icon1.getMinU(), (double)icon1.getMaxV());
    2748                tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)(par3 + 1) + 0.021875F), (double)(par4 + 1) - 0.015625D, (double)icon1.getMaxU(), (double)icon1.getMaxV());
    2749                tessellator.setColorOpaque_F(f, f, f);
    2750                tessellator.addVertexWithUV((double)(par2 + 1), (double)((float)(par3 + 1) + 0.021875F), (double)(par4 + 1) - 0.015625D, (double)icon3.getMaxU(), (double)icon3.getMinV());
    2751                tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 0), (double)(par4 + 1) - 0.015625D, (double)icon3.getMinU(), (double)icon3.getMinV());
    2752                tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 0), (double)(par4 + 1) - 0.015625D, (double)icon3.getMinU(), (double)icon3.getMaxV());
    2753                tessellator.addVertexWithUV((double)(par2 + 0), (double)((float)(par3 + 1) + 0.021875F), (double)(par4 + 1) - 0.015625D, (double)icon3.getMaxU(), (double)icon3.getMaxV());
    2754            }
    2755        }
    2756
    2757        return true;
    2758    }
    2759
    2760    /**
    2761     * Renders a minecart track block at the given coordinates
    2762     */
    2763    public boolean renderBlockMinecartTrack(BlockRailBase par1BlockRailBase, int par2, int par3, int par4)
    2764    {
    2765        Tessellator tessellator = Tessellator.instance;
    2766        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    2767        Icon icon = this.getBlockIconFromSideAndMetadata(par1BlockRailBase, 0, l);
    2768
    2769        if (this.hasOverrideBlockTexture())
    2770        {
    2771            icon = this.overrideBlockTexture;
    2772        }
    2773
    2774        if (par1BlockRailBase.isPowered())
    2775        {
    2776            l &= 7;
    2777        }
    2778
    2779        tessellator.setBrightness(par1BlockRailBase.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    2780        tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
    2781        double d0 = (double)icon.getMinU();
    2782        double d1 = (double)icon.getMinV();
    2783        double d2 = (double)icon.getMaxU();
    2784        double d3 = (double)icon.getMaxV();
    2785        double d4 = 0.0625D;
    2786        double d5 = (double)(par2 + 1);
    2787        double d6 = (double)(par2 + 1);
    2788        double d7 = (double)(par2 + 0);
    2789        double d8 = (double)(par2 + 0);
    2790        double d9 = (double)(par4 + 0);
    2791        double d10 = (double)(par4 + 1);
    2792        double d11 = (double)(par4 + 1);
    2793        double d12 = (double)(par4 + 0);
    2794        double d13 = (double)par3 + d4;
    2795        double d14 = (double)par3 + d4;
    2796        double d15 = (double)par3 + d4;
    2797        double d16 = (double)par3 + d4;
    2798
    2799        if (l != 1 && l != 2 && l != 3 && l != 7)
    2800        {
    2801            if (l == 8)
    2802            {
    2803                d5 = d6 = (double)(par2 + 0);
    2804                d7 = d8 = (double)(par2 + 1);
    2805                d9 = d12 = (double)(par4 + 1);
    2806                d10 = d11 = (double)(par4 + 0);
    2807            }
    2808            else if (l == 9)
    2809            {
    2810                d5 = d8 = (double)(par2 + 0);
    2811                d6 = d7 = (double)(par2 + 1);
    2812                d9 = d10 = (double)(par4 + 0);
    2813                d11 = d12 = (double)(par4 + 1);
    2814            }
    2815        }
    2816        else
    2817        {
    2818            d5 = d8 = (double)(par2 + 1);
    2819            d6 = d7 = (double)(par2 + 0);
    2820            d9 = d10 = (double)(par4 + 1);
    2821            d11 = d12 = (double)(par4 + 0);
    2822        }
    2823
    2824        if (l != 2 && l != 4)
    2825        {
    2826            if (l == 3 || l == 5)
    2827            {
    2828                ++d14;
    2829                ++d15;
    2830            }
    2831        }
    2832        else
    2833        {
    2834            ++d13;
    2835            ++d16;
    2836        }
    2837
    2838        tessellator.addVertexWithUV(d5, d13, d9, d2, d1);
    2839        tessellator.addVertexWithUV(d6, d14, d10, d2, d3);
    2840        tessellator.addVertexWithUV(d7, d15, d11, d0, d3);
    2841        tessellator.addVertexWithUV(d8, d16, d12, d0, d1);
    2842        tessellator.addVertexWithUV(d8, d16, d12, d0, d1);
    2843        tessellator.addVertexWithUV(d7, d15, d11, d0, d3);
    2844        tessellator.addVertexWithUV(d6, d14, d10, d2, d3);
    2845        tessellator.addVertexWithUV(d5, d13, d9, d2, d1);
    2846        return true;
    2847    }
    2848
    2849    /**
    2850     * Renders a ladder block at the given coordinates
    2851     */
    2852    public boolean renderBlockLadder(Block par1Block, int par2, int par3, int par4)
    2853    {
    2854        Tessellator tessellator = Tessellator.instance;
    2855        Icon icon = this.getBlockIconFromSide(par1Block, 0);
    2856
    2857        if (this.hasOverrideBlockTexture())
    2858        {
    2859            icon = this.overrideBlockTexture;
    2860        }
    2861
    2862        tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    2863        float f = 1.0F;
    2864        tessellator.setColorOpaque_F(f, f, f);
    2865        double d0 = (double)icon.getMinU();
    2866        double d1 = (double)icon.getMinV();
    2867        double d2 = (double)icon.getMaxU();
    2868        double d3 = (double)icon.getMaxV();
    2869        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    2870        double d4 = 0.0D;
    2871        double d5 = 0.05000000074505806D;
    2872
    2873        if (l == 5)
    2874        {
    2875            tessellator.addVertexWithUV((double)par2 + d5, (double)(par3 + 1) + d4, (double)(par4 + 1) + d4, d0, d1);
    2876            tessellator.addVertexWithUV((double)par2 + d5, (double)(par3 + 0) - d4, (double)(par4 + 1) + d4, d0, d3);
    2877            tessellator.addVertexWithUV((double)par2 + d5, (double)(par3 + 0) - d4, (double)(par4 + 0) - d4, d2, d3);
    2878            tessellator.addVertexWithUV((double)par2 + d5, (double)(par3 + 1) + d4, (double)(par4 + 0) - d4, d2, d1);
    2879        }
    2880
    2881        if (l == 4)
    2882        {
    2883            tessellator.addVertexWithUV((double)(par2 + 1) - d5, (double)(par3 + 0) - d4, (double)(par4 + 1) + d4, d2, d3);
    2884            tessellator.addVertexWithUV((double)(par2 + 1) - d5, (double)(par3 + 1) + d4, (double)(par4 + 1) + d4, d2, d1);
    2885            tessellator.addVertexWithUV((double)(par2 + 1) - d5, (double)(par3 + 1) + d4, (double)(par4 + 0) - d4, d0, d1);
    2886            tessellator.addVertexWithUV((double)(par2 + 1) - d5, (double)(par3 + 0) - d4, (double)(par4 + 0) - d4, d0, d3);
    2887        }
    2888
    2889        if (l == 3)
    2890        {
    2891            tessellator.addVertexWithUV((double)(par2 + 1) + d4, (double)(par3 + 0) - d4, (double)par4 + d5, d2, d3);
    2892            tessellator.addVertexWithUV((double)(par2 + 1) + d4, (double)(par3 + 1) + d4, (double)par4 + d5, d2, d1);
    2893            tessellator.addVertexWithUV((double)(par2 + 0) - d4, (double)(par3 + 1) + d4, (double)par4 + d5, d0, d1);
    2894            tessellator.addVertexWithUV((double)(par2 + 0) - d4, (double)(par3 + 0) - d4, (double)par4 + d5, d0, d3);
    2895        }
    2896
    2897        if (l == 2)
    2898        {
    2899            tessellator.addVertexWithUV((double)(par2 + 1) + d4, (double)(par3 + 1) + d4, (double)(par4 + 1) - d5, d0, d1);
    2900            tessellator.addVertexWithUV((double)(par2 + 1) + d4, (double)(par3 + 0) - d4, (double)(par4 + 1) - d5, d0, d3);
    2901            tessellator.addVertexWithUV((double)(par2 + 0) - d4, (double)(par3 + 0) - d4, (double)(par4 + 1) - d5, d2, d3);
    2902            tessellator.addVertexWithUV((double)(par2 + 0) - d4, (double)(par3 + 1) + d4, (double)(par4 + 1) - d5, d2, d1);
    2903        }
    2904
    2905        return true;
    2906    }
    2907
    2908    /**
    2909     * Render block vine
    2910     */
    2911    public boolean renderBlockVine(Block par1Block, int par2, int par3, int par4)
    2912    {
    2913        Tessellator tessellator = Tessellator.instance;
    2914        Icon icon = this.getBlockIconFromSide(par1Block, 0);
    2915
    2916        if (this.hasOverrideBlockTexture())
    2917        {
    2918            icon = this.overrideBlockTexture;
    2919        }
    2920
    2921        float f = 1.0F;
    2922        tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    2923        int l = par1Block.colorMultiplier(this.blockAccess, par2, par3, par4);
    2924        float f1 = (float)(l >> 16 & 255) / 255.0F;
    2925        float f2 = (float)(l >> 8 & 255) / 255.0F;
    2926        float f3 = (float)(l & 255) / 255.0F;
    2927        tessellator.setColorOpaque_F(f * f1, f * f2, f * f3);
    2928        double d0 = (double)icon.getMinU();
    2929        double d1 = (double)icon.getMinV();
    2930        double d2 = (double)icon.getMaxU();
    2931        double d3 = (double)icon.getMaxV();
    2932        double d4 = 0.05000000074505806D;
    2933        int i1 = this.blockAccess.getBlockMetadata(par2, par3, par4);
    2934
    2935        if ((i1 & 2) != 0)
    2936        {
    2937            tessellator.addVertexWithUV((double)par2 + d4, (double)(par3 + 1), (double)(par4 + 1), d0, d1);
    2938            tessellator.addVertexWithUV((double)par2 + d4, (double)(par3 + 0), (double)(par4 + 1), d0, d3);
    2939            tessellator.addVertexWithUV((double)par2 + d4, (double)(par3 + 0), (double)(par4 + 0), d2, d3);
    2940            tessellator.addVertexWithUV((double)par2 + d4, (double)(par3 + 1), (double)(par4 + 0), d2, d1);
    2941            tessellator.addVertexWithUV((double)par2 + d4, (double)(par3 + 1), (double)(par4 + 0), d2, d1);
    2942            tessellator.addVertexWithUV((double)par2 + d4, (double)(par3 + 0), (double)(par4 + 0), d2, d3);
    2943            tessellator.addVertexWithUV((double)par2 + d4, (double)(par3 + 0), (double)(par4 + 1), d0, d3);
    2944            tessellator.addVertexWithUV((double)par2 + d4, (double)(par3 + 1), (double)(par4 + 1), d0, d1);
    2945        }
    2946
    2947        if ((i1 & 8) != 0)
    2948        {
    2949            tessellator.addVertexWithUV((double)(par2 + 1) - d4, (double)(par3 + 0), (double)(par4 + 1), d2, d3);
    2950            tessellator.addVertexWithUV((double)(par2 + 1) - d4, (double)(par3 + 1), (double)(par4 + 1), d2, d1);
    2951            tessellator.addVertexWithUV((double)(par2 + 1) - d4, (double)(par3 + 1), (double)(par4 + 0), d0, d1);
    2952            tessellator.addVertexWithUV((double)(par2 + 1) - d4, (double)(par3 + 0), (double)(par4 + 0), d0, d3);
    2953            tessellator.addVertexWithUV((double)(par2 + 1) - d4, (double)(par3 + 0), (double)(par4 + 0), d0, d3);
    2954            tessellator.addVertexWithUV((double)(par2 + 1) - d4, (double)(par3 + 1), (double)(par4 + 0), d0, d1);
    2955            tessellator.addVertexWithUV((double)(par2 + 1) - d4, (double)(par3 + 1), (double)(par4 + 1), d2, d1);
    2956            tessellator.addVertexWithUV((double)(par2 + 1) - d4, (double)(par3 + 0), (double)(par4 + 1), d2, d3);
    2957        }
    2958
    2959        if ((i1 & 4) != 0)
    2960        {
    2961            tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 0), (double)par4 + d4, d2, d3);
    2962            tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 1), (double)par4 + d4, d2, d1);
    2963            tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 1), (double)par4 + d4, d0, d1);
    2964            tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 0), (double)par4 + d4, d0, d3);
    2965            tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 0), (double)par4 + d4, d0, d3);
    2966            tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 1), (double)par4 + d4, d0, d1);
    2967            tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 1), (double)par4 + d4, d2, d1);
    2968            tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 0), (double)par4 + d4, d2, d3);
    2969        }
    2970
    2971        if ((i1 & 1) != 0)
    2972        {
    2973            tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 1), (double)(par4 + 1) - d4, d0, d1);
    2974            tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 0), (double)(par4 + 1) - d4, d0, d3);
    2975            tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 0), (double)(par4 + 1) - d4, d2, d3);
    2976            tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 1), (double)(par4 + 1) - d4, d2, d1);
    2977            tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 1), (double)(par4 + 1) - d4, d2, d1);
    2978            tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 0), (double)(par4 + 1) - d4, d2, d3);
    2979            tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 0), (double)(par4 + 1) - d4, d0, d3);
    2980            tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 1), (double)(par4 + 1) - d4, d0, d1);
    2981        }
    2982
    2983        if (this.blockAccess.isBlockNormalCube(par2, par3 + 1, par4))
    2984        {
    2985            tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 1) - d4, (double)(par4 + 0), d0, d1);
    2986            tessellator.addVertexWithUV((double)(par2 + 1), (double)(par3 + 1) - d4, (double)(par4 + 1), d0, d3);
    2987            tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 1) - d4, (double)(par4 + 1), d2, d3);
    2988            tessellator.addVertexWithUV((double)(par2 + 0), (double)(par3 + 1) - d4, (double)(par4 + 0), d2, d1);
    2989        }
    2990
    2991        return true;
    2992    }
    2993
    2994    public boolean renderBlockPane(BlockPane par1BlockPane, int par2, int par3, int par4)
    2995    {
    2996        int l = this.blockAccess.getHeight();
    2997        Tessellator tessellator = Tessellator.instance;
    2998        tessellator.setBrightness(par1BlockPane.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    2999        float f = 1.0F;
    3000        int i1 = par1BlockPane.colorMultiplier(this.blockAccess, par2, par3, par4);
    3001        float f1 = (float)(i1 >> 16 & 255) / 255.0F;
    3002        float f2 = (float)(i1 >> 8 & 255) / 255.0F;
    3003        float f3 = (float)(i1 & 255) / 255.0F;
    3004
    3005        if (EntityRenderer.anaglyphEnable)
    3006        {
    3007            float f4 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F;
    3008            float f5 = (f1 * 30.0F + f2 * 70.0F) / 100.0F;
    3009            float f6 = (f1 * 30.0F + f3 * 70.0F) / 100.0F;
    3010            f1 = f4;
    3011            f2 = f5;
    3012            f3 = f6;
    3013        }
    3014
    3015        tessellator.setColorOpaque_F(f * f1, f * f2, f * f3);
    3016        Icon icon;
    3017        Icon icon1;
    3018        int j1;
    3019
    3020        if (this.hasOverrideBlockTexture())
    3021        {
    3022            icon = this.overrideBlockTexture;
    3023            icon1 = this.overrideBlockTexture;
    3024        }
    3025        else
    3026        {
    3027            j1 = this.blockAccess.getBlockMetadata(par2, par3, par4);
    3028            icon = this.getBlockIconFromSideAndMetadata(par1BlockPane, 0, j1);
    3029            icon1 = par1BlockPane.getSideTextureIndex();
    3030        }
    3031
    3032        j1 = icon.getOriginX();
    3033        int k1 = icon.getOriginY();
    3034        double d0 = (double)icon.getMinU();
    3035        double d1 = (double)icon.getInterpolatedU(8.0D);
    3036        double d2 = (double)icon.getMaxU();
    3037        double d3 = (double)icon.getMinV();
    3038        double d4 = (double)icon.getMaxV();
    3039        int l1 = icon1.getOriginX();
    3040        int i2 = icon1.getOriginY();
    3041        double d5 = (double)icon1.getInterpolatedU(7.0D);
    3042        double d6 = (double)icon1.getInterpolatedU(9.0D);
    3043        double d7 = (double)icon1.getMinV();
    3044        double d8 = (double)icon1.getInterpolatedV(8.0D);
    3045        double d9 = (double)icon1.getMaxV();
    3046        double d10 = (double)par2;
    3047        double d11 = (double)par2 + 0.5D;
    3048        double d12 = (double)(par2 + 1);
    3049        double d13 = (double)par4;
    3050        double d14 = (double)par4 + 0.5D;
    3051        double d15 = (double)(par4 + 1);
    3052        double d16 = (double)par2 + 0.5D - 0.0625D;
    3053        double d17 = (double)par2 + 0.5D + 0.0625D;
    3054        double d18 = (double)par4 + 0.5D - 0.0625D;
    3055        double d19 = (double)par4 + 0.5D + 0.0625D;
    3056        boolean flag = par1BlockPane.canThisPaneConnectToThisBlockID(this.blockAccess.getBlockId(par2, par3, par4 - 1));
    3057        boolean flag1 = par1BlockPane.canThisPaneConnectToThisBlockID(this.blockAccess.getBlockId(par2, par3, par4 + 1));
    3058        boolean flag2 = par1BlockPane.canThisPaneConnectToThisBlockID(this.blockAccess.getBlockId(par2 - 1, par3, par4));
    3059        boolean flag3 = par1BlockPane.canThisPaneConnectToThisBlockID(this.blockAccess.getBlockId(par2 + 1, par3, par4));
    3060        boolean flag4 = par1BlockPane.shouldSideBeRendered(this.blockAccess, par2, par3 + 1, par4, 1);
    3061        boolean flag5 = par1BlockPane.shouldSideBeRendered(this.blockAccess, par2, par3 - 1, par4, 0);
    3062
    3063        if ((!flag2 || !flag3) && (flag2 || flag3 || flag || flag1))
    3064        {
    3065            if (flag2 && !flag3)
    3066            {
    3067                tessellator.addVertexWithUV(d10, (double)(par3 + 1), d14, d0, d3);
    3068                tessellator.addVertexWithUV(d10, (double)(par3 + 0), d14, d0, d4);
    3069                tessellator.addVertexWithUV(d11, (double)(par3 + 0), d14, d1, d4);
    3070                tessellator.addVertexWithUV(d11, (double)(par3 + 1), d14, d1, d3);
    3071                tessellator.addVertexWithUV(d11, (double)(par3 + 1), d14, d0, d3);
    3072                tessellator.addVertexWithUV(d11, (double)(par3 + 0), d14, d0, d4);
    3073                tessellator.addVertexWithUV(d10, (double)(par3 + 0), d14, d1, d4);
    3074                tessellator.addVertexWithUV(d10, (double)(par3 + 1), d14, d1, d3);
    3075
    3076                if (!flag1 && !flag)
    3077                {
    3078                    tessellator.addVertexWithUV(d11, (double)(par3 + 1), d19, d5, d7);
    3079                    tessellator.addVertexWithUV(d11, (double)(par3 + 0), d19, d5, d9);
    3080                    tessellator.addVertexWithUV(d11, (double)(par3 + 0), d18, d6, d9);
    3081                    tessellator.addVertexWithUV(d11, (double)(par3 + 1), d18, d6, d7);
    3082                    tessellator.addVertexWithUV(d11, (double)(par3 + 1), d18, d5, d7);
    3083                    tessellator.addVertexWithUV(d11, (double)(par3 + 0), d18, d5, d9);
    3084                    tessellator.addVertexWithUV(d11, (double)(par3 + 0), d19, d6, d9);
    3085                    tessellator.addVertexWithUV(d11, (double)(par3 + 1), d19, d6, d7);
    3086                }
    3087
    3088                if (flag4 || par3 < l - 1 && this.blockAccess.isAirBlock(par2 - 1, par3 + 1, par4))
    3089                {
    3090                    tessellator.addVertexWithUV(d10, (double)(par3 + 1) + 0.01D, d19, d6, d8);
    3091                    tessellator.addVertexWithUV(d11, (double)(par3 + 1) + 0.01D, d19, d6, d9);
    3092                    tessellator.addVertexWithUV(d11, (double)(par3 + 1) + 0.01D, d18, d5, d9);
    3093                    tessellator.addVertexWithUV(d10, (double)(par3 + 1) + 0.01D, d18, d5, d8);
    3094                    tessellator.addVertexWithUV(d11, (double)(par3 + 1) + 0.01D, d19, d6, d8);
    3095                    tessellator.addVertexWithUV(d10, (double)(par3 + 1) + 0.01D, d19, d6, d9);
    3096                    tessellator.addVertexWithUV(d10, (double)(par3 + 1) + 0.01D, d18, d5, d9);
    3097                    tessellator.addVertexWithUV(d11, (double)(par3 + 1) + 0.01D, d18, d5, d8);
    3098                }
    3099
    3100                if (flag5 || par3 > 1 && this.blockAccess.isAirBlock(par2 - 1, par3 - 1, par4))
    3101                {
    3102                    tessellator.addVertexWithUV(d10, (double)par3 - 0.01D, d19, d6, d8);
    3103                    tessellator.addVertexWithUV(d11, (double)par3 - 0.01D, d19, d6, d9);
    3104                    tessellator.addVertexWithUV(d11, (double)par3 - 0.01D, d18, d5, d9);
    3105                    tessellator.addVertexWithUV(d10, (double)par3 - 0.01D, d18, d5, d8);
    3106                    tessellator.addVertexWithUV(d11, (double)par3 - 0.01D, d19, d6, d8);
    3107                    tessellator.addVertexWithUV(d10, (double)par3 - 0.01D, d19, d6, d9);
    3108                    tessellator.addVertexWithUV(d10, (double)par3 - 0.01D, d18, d5, d9);
    3109                    tessellator.addVertexWithUV(d11, (double)par3 - 0.01D, d18, d5, d8);
    3110                }
    3111            }
    3112            else if (!flag2 && flag3)
    3113            {
    3114                tessellator.addVertexWithUV(d11, (double)(par3 + 1), d14, d1, d3);
    3115                tessellator.addVertexWithUV(d11, (double)(par3 + 0), d14, d1, d4);
    3116                tessellator.addVertexWithUV(d12, (double)(par3 + 0), d14, d2, d4);
    3117                tessellator.addVertexWithUV(d12, (double)(par3 + 1), d14, d2, d3);
    3118                tessellator.addVertexWithUV(d12, (double)(par3 + 1), d14, d1, d3);
    3119                tessellator.addVertexWithUV(d12, (double)(par3 + 0), d14, d1, d4);
    3120                tessellator.addVertexWithUV(d11, (double)(par3 + 0), d14, d2, d4);
    3121                tessellator.addVertexWithUV(d11, (double)(par3 + 1), d14, d2, d3);
    3122
    3123                if (!flag1 && !flag)
    3124                {
    3125                    tessellator.addVertexWithUV(d11, (double)(par3 + 1), d18, d5, d7);
    3126                    tessellator.addVertexWithUV(d11, (double)(par3 + 0), d18, d5, d9);
    3127                    tessellator.addVertexWithUV(d11, (double)(par3 + 0), d19, d6, d9);
    3128                    tessellator.addVertexWithUV(d11, (double)(par3 + 1), d19, d6, d7);
    3129                    tessellator.addVertexWithUV(d11, (double)(par3 + 1), d19, d5, d7);
    3130                    tessellator.addVertexWithUV(d11, (double)(par3 + 0), d19, d5, d9);
    3131                    tessellator.addVertexWithUV(d11, (double)(par3 + 0), d18, d6, d9);
    3132                    tessellator.addVertexWithUV(d11, (double)(par3 + 1), d18, d6, d7);
    3133                }
    3134
    3135                if (flag4 || par3 < l - 1 && this.blockAccess.isAirBlock(par2 + 1, par3 + 1, par4))
    3136                {
    3137                    tessellator.addVertexWithUV(d11, (double)(par3 + 1) + 0.01D, d19, d6, d7);
    3138                    tessellator.addVertexWithUV(d12, (double)(par3 + 1) + 0.01D, d19, d6, d8);
    3139                    tessellator.addVertexWithUV(d12, (double)(par3 + 1) + 0.01D, d18, d5, d8);
    3140                    tessellator.addVertexWithUV(d11, (double)(par3 + 1) + 0.01D, d18, d5, d7);
    3141                    tessellator.addVertexWithUV(d12, (double)(par3 + 1) + 0.01D, d19, d6, d7);
    3142                    tessellator.addVertexWithUV(d11, (double)(par3 + 1) + 0.01D, d19, d6, d8);
    3143                    tessellator.addVertexWithUV(d11, (double)(par3 + 1) + 0.01D, d18, d5, d8);
    3144                    tessellator.addVertexWithUV(d12, (double)(par3 + 1) + 0.01D, d18, d5, d7);
    3145                }
    3146
    3147                if (flag5 || par3 > 1 && this.blockAccess.isAirBlock(par2 + 1, par3 - 1, par4))
    3148                {
    3149                    tessellator.addVertexWithUV(d11, (double)par3 - 0.01D, d19, d6, d7);
    3150                    tessellator.addVertexWithUV(d12, (double)par3 - 0.01D, d19, d6, d8);
    3151                    tessellator.addVertexWithUV(d12, (double)par3 - 0.01D, d18, d5, d8);
    3152                    tessellator.addVertexWithUV(d11, (double)par3 - 0.01D, d18, d5, d7);
    3153                    tessellator.addVertexWithUV(d12, (double)par3 - 0.01D, d19, d6, d7);
    3154                    tessellator.addVertexWithUV(d11, (double)par3 - 0.01D, d19, d6, d8);
    3155                    tessellator.addVertexWithUV(d11, (double)par3 - 0.01D, d18, d5, d8);
    3156                    tessellator.addVertexWithUV(d12, (double)par3 - 0.01D, d18, d5, d7);
    3157                }
    3158            }
    3159        }
    3160        else
    3161        {
    3162            tessellator.addVertexWithUV(d10, (double)(par3 + 1), d14, d0, d3);
    3163            tessellator.addVertexWithUV(d10, (double)(par3 + 0), d14, d0, d4);
    3164            tessellator.addVertexWithUV(d12, (double)(par3 + 0), d14, d2, d4);
    3165            tessellator.addVertexWithUV(d12, (double)(par3 + 1), d14, d2, d3);
    3166            tessellator.addVertexWithUV(d12, (double)(par3 + 1), d14, d0, d3);
    3167            tessellator.addVertexWithUV(d12, (double)(par3 + 0), d14, d0, d4);
    3168            tessellator.addVertexWithUV(d10, (double)(par3 + 0), d14, d2, d4);
    3169            tessellator.addVertexWithUV(d10, (double)(par3 + 1), d14, d2, d3);
    3170
    3171            if (flag4)
    3172            {
    3173                tessellator.addVertexWithUV(d10, (double)(par3 + 1) + 0.01D, d19, d6, d9);
    3174                tessellator.addVertexWithUV(d12, (double)(par3 + 1) + 0.01D, d19, d6, d7);
    3175                tessellator.addVertexWithUV(d12, (double)(par3 + 1) + 0.01D, d18, d5, d7);
    3176                tessellator.addVertexWithUV(d10, (double)(par3 + 1) + 0.01D, d18, d5, d9);
    3177                tessellator.addVertexWithUV(d12, (double)(par3 + 1) + 0.01D, d19, d6, d9);
    3178                tessellator.addVertexWithUV(d10, (double)(par3 + 1) + 0.01D, d19, d6, d7);
    3179                tessellator.addVertexWithUV(d10, (double)(par3 + 1) + 0.01D, d18, d5, d7);
    3180                tessellator.addVertexWithUV(d12, (double)(par3 + 1) + 0.01D, d18, d5, d9);
    3181            }
    3182            else
    3183            {
    3184                if (par3 < l - 1 && this.blockAccess.isAirBlock(par2 - 1, par3 + 1, par4))
    3185                {
    3186                    tessellator.addVertexWithUV(d10, (double)(par3 + 1) + 0.01D, d19, d6, d8);
    3187                    tessellator.addVertexWithUV(d11, (double)(par3 + 1) + 0.01D, d19, d6, d9);
    3188                    tessellator.addVertexWithUV(d11, (double)(par3 + 1) + 0.01D, d18, d5, d9);
    3189                    tessellator.addVertexWithUV(d10, (double)(par3 + 1) + 0.01D, d18, d5, d8);
    3190                    tessellator.addVertexWithUV(d11, (double)(par3 + 1) + 0.01D, d19, d6, d8);
    3191                    tessellator.addVertexWithUV(d10, (double)(par3 + 1) + 0.01D, d19, d6, d9);
    3192                    tessellator.addVertexWithUV(d10, (double)(par3 + 1) + 0.01D, d18, d5, d9);
    3193                    tessellator.addVertexWithUV(d11, (double)(par3 + 1) + 0.01D, d18, d5, d8);
    3194                }
    3195
    3196                if (par3 < l - 1 && this.blockAccess.isAirBlock(par2 + 1, par3 + 1, par4))
    3197                {
    3198                    tessellator.addVertexWithUV(d11, (double)(par3 + 1) + 0.01D, d19, d6, d7);
    3199                    tessellator.addVertexWithUV(d12, (double)(par3 + 1) + 0.01D, d19, d6, d8);
    3200                    tessellator.addVertexWithUV(d12, (double)(par3 + 1) + 0.01D, d18, d5, d8);
    3201                    tessellator.addVertexWithUV(d11, (double)(par3 + 1) + 0.01D, d18, d5, d7);
    3202                    tessellator.addVertexWithUV(d12, (double)(par3 + 1) + 0.01D, d19, d6, d7);
    3203                    tessellator.addVertexWithUV(d11, (double)(par3 + 1) + 0.01D, d19, d6, d8);
    3204                    tessellator.addVertexWithUV(d11, (double)(par3 + 1) + 0.01D, d18, d5, d8);
    3205                    tessellator.addVertexWithUV(d12, (double)(par3 + 1) + 0.01D, d18, d5, d7);
    3206                }
    3207            }
    3208
    3209            if (flag5)
    3210            {
    3211                tessellator.addVertexWithUV(d10, (double)par3 - 0.01D, d19, d6, d9);
    3212                tessellator.addVertexWithUV(d12, (double)par3 - 0.01D, d19, d6, d7);
    3213                tessellator.addVertexWithUV(d12, (double)par3 - 0.01D, d18, d5, d7);
    3214                tessellator.addVertexWithUV(d10, (double)par3 - 0.01D, d18, d5, d9);
    3215                tessellator.addVertexWithUV(d12, (double)par3 - 0.01D, d19, d6, d9);
    3216                tessellator.addVertexWithUV(d10, (double)par3 - 0.01D, d19, d6, d7);
    3217                tessellator.addVertexWithUV(d10, (double)par3 - 0.01D, d18, d5, d7);
    3218                tessellator.addVertexWithUV(d12, (double)par3 - 0.01D, d18, d5, d9);
    3219            }
    3220            else
    3221            {
    3222                if (par3 > 1 && this.blockAccess.isAirBlock(par2 - 1, par3 - 1, par4))
    3223                {
    3224                    tessellator.addVertexWithUV(d10, (double)par3 - 0.01D, d19, d6, d8);
    3225                    tessellator.addVertexWithUV(d11, (double)par3 - 0.01D, d19, d6, d9);
    3226                    tessellator.addVertexWithUV(d11, (double)par3 - 0.01D, d18, d5, d9);
    3227                    tessellator.addVertexWithUV(d10, (double)par3 - 0.01D, d18, d5, d8);
    3228                    tessellator.addVertexWithUV(d11, (double)par3 - 0.01D, d19, d6, d8);
    3229                    tessellator.addVertexWithUV(d10, (double)par3 - 0.01D, d19, d6, d9);
    3230                    tessellator.addVertexWithUV(d10, (double)par3 - 0.01D, d18, d5, d9);
    3231                    tessellator.addVertexWithUV(d11, (double)par3 - 0.01D, d18, d5, d8);
    3232                }
    3233
    3234                if (par3 > 1 && this.blockAccess.isAirBlock(par2 + 1, par3 - 1, par4))
    3235                {
    3236                    tessellator.addVertexWithUV(d11, (double)par3 - 0.01D, d19, d6, d7);
    3237                    tessellator.addVertexWithUV(d12, (double)par3 - 0.01D, d19, d6, d8);
    3238                    tessellator.addVertexWithUV(d12, (double)par3 - 0.01D, d18, d5, d8);
    3239                    tessellator.addVertexWithUV(d11, (double)par3 - 0.01D, d18, d5, d7);
    3240                    tessellator.addVertexWithUV(d12, (double)par3 - 0.01D, d19, d6, d7);
    3241                    tessellator.addVertexWithUV(d11, (double)par3 - 0.01D, d19, d6, d8);
    3242                    tessellator.addVertexWithUV(d11, (double)par3 - 0.01D, d18, d5, d8);
    3243                    tessellator.addVertexWithUV(d12, (double)par3 - 0.01D, d18, d5, d7);
    3244                }
    3245            }
    3246        }
    3247
    3248        if ((!flag || !flag1) && (flag2 || flag3 || flag || flag1))
    3249        {
    3250            if (flag && !flag1)
    3251            {
    3252                tessellator.addVertexWithUV(d11, (double)(par3 + 1), d13, d0, d3);
    3253                tessellator.addVertexWithUV(d11, (double)(par3 + 0), d13, d0, d4);
    3254                tessellator.addVertexWithUV(d11, (double)(par3 + 0), d14, d1, d4);
    3255                tessellator.addVertexWithUV(d11, (double)(par3 + 1), d14, d1, d3);
    3256                tessellator.addVertexWithUV(d11, (double)(par3 + 1), d14, d0, d3);
    3257                tessellator.addVertexWithUV(d11, (double)(par3 + 0), d14, d0, d4);
    3258                tessellator.addVertexWithUV(d11, (double)(par3 + 0), d13, d1, d4);
    3259                tessellator.addVertexWithUV(d11, (double)(par3 + 1), d13, d1, d3);
    3260
    3261                if (!flag3 && !flag2)
    3262                {
    3263                    tessellator.addVertexWithUV(d16, (double)(par3 + 1), d14, d5, d7);
    3264                    tessellator.addVertexWithUV(d16, (double)(par3 + 0), d14, d5, d9);
    3265                    tessellator.addVertexWithUV(d17, (double)(par3 + 0), d14, d6, d9);
    3266                    tessellator.addVertexWithUV(d17, (double)(par3 + 1), d14, d6, d7);
    3267                    tessellator.addVertexWithUV(d17, (double)(par3 + 1), d14, d5, d7);
    3268                    tessellator.addVertexWithUV(d17, (double)(par3 + 0), d14, d5, d9);
    3269                    tessellator.addVertexWithUV(d16, (double)(par3 + 0), d14, d6, d9);
    3270                    tessellator.addVertexWithUV(d16, (double)(par3 + 1), d14, d6, d7);
    3271                }
    3272
    3273                if (flag4 || par3 < l - 1 && this.blockAccess.isAirBlock(par2, par3 + 1, par4 - 1))
    3274                {
    3275                    tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d13, d6, d7);
    3276                    tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d14, d6, d8);
    3277                    tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d14, d5, d8);
    3278                    tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d13, d5, d7);
    3279                    tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d14, d6, d7);
    3280                    tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d13, d6, d8);
    3281                    tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d13, d5, d8);
    3282                    tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d14, d5, d7);
    3283                }
    3284
    3285                if (flag5 || par3 > 1 && this.blockAccess.isAirBlock(par2, par3 - 1, par4 - 1))
    3286                {
    3287                    tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d13, d6, d7);
    3288                    tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d14, d6, d8);
    3289                    tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d14, d5, d8);
    3290                    tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d13, d5, d7);
    3291                    tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d14, d6, d7);
    3292                    tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d13, d6, d8);
    3293                    tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d13, d5, d8);
    3294                    tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d14, d5, d7);
    3295                }
    3296            }
    3297            else if (!flag && flag1)
    3298            {
    3299                tessellator.addVertexWithUV(d11, (double)(par3 + 1), d14, d1, d3);
    3300                tessellator.addVertexWithUV(d11, (double)(par3 + 0), d14, d1, d4);
    3301                tessellator.addVertexWithUV(d11, (double)(par3 + 0), d15, d2, d4);
    3302                tessellator.addVertexWithUV(d11, (double)(par3 + 1), d15, d2, d3);
    3303                tessellator.addVertexWithUV(d11, (double)(par3 + 1), d15, d1, d3);
    3304                tessellator.addVertexWithUV(d11, (double)(par3 + 0), d15, d1, d4);
    3305                tessellator.addVertexWithUV(d11, (double)(par3 + 0), d14, d2, d4);
    3306                tessellator.addVertexWithUV(d11, (double)(par3 + 1), d14, d2, d3);
    3307
    3308                if (!flag3 && !flag2)
    3309                {
    3310                    tessellator.addVertexWithUV(d17, (double)(par3 + 1), d14, d5, d7);
    3311                    tessellator.addVertexWithUV(d17, (double)(par3 + 0), d14, d5, d9);
    3312                    tessellator.addVertexWithUV(d16, (double)(par3 + 0), d14, d6, d9);
    3313                    tessellator.addVertexWithUV(d16, (double)(par3 + 1), d14, d6, d7);
    3314                    tessellator.addVertexWithUV(d16, (double)(par3 + 1), d14, d5, d7);
    3315                    tessellator.addVertexWithUV(d16, (double)(par3 + 0), d14, d5, d9);
    3316                    tessellator.addVertexWithUV(d17, (double)(par3 + 0), d14, d6, d9);
    3317                    tessellator.addVertexWithUV(d17, (double)(par3 + 1), d14, d6, d7);
    3318                }
    3319
    3320                if (flag4 || par3 < l - 1 && this.blockAccess.isAirBlock(par2, par3 + 1, par4 + 1))
    3321                {
    3322                    tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d14, d5, d8);
    3323                    tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d15, d5, d9);
    3324                    tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d15, d6, d9);
    3325                    tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d14, d6, d8);
    3326                    tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d15, d5, d8);
    3327                    tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d14, d5, d9);
    3328                    tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d14, d6, d9);
    3329                    tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d15, d6, d8);
    3330                }
    3331
    3332                if (flag5 || par3 > 1 && this.blockAccess.isAirBlock(par2, par3 - 1, par4 + 1))
    3333                {
    3334                    tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d14, d5, d8);
    3335                    tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d15, d5, d9);
    3336                    tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d15, d6, d9);
    3337                    tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d14, d6, d8);
    3338                    tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d15, d5, d8);
    3339                    tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d14, d5, d9);
    3340                    tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d14, d6, d9);
    3341                    tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d15, d6, d8);
    3342                }
    3343            }
    3344        }
    3345        else
    3346        {
    3347            tessellator.addVertexWithUV(d11, (double)(par3 + 1), d15, d0, d3);
    3348            tessellator.addVertexWithUV(d11, (double)(par3 + 0), d15, d0, d4);
    3349            tessellator.addVertexWithUV(d11, (double)(par3 + 0), d13, d2, d4);
    3350            tessellator.addVertexWithUV(d11, (double)(par3 + 1), d13, d2, d3);
    3351            tessellator.addVertexWithUV(d11, (double)(par3 + 1), d13, d0, d3);
    3352            tessellator.addVertexWithUV(d11, (double)(par3 + 0), d13, d0, d4);
    3353            tessellator.addVertexWithUV(d11, (double)(par3 + 0), d15, d2, d4);
    3354            tessellator.addVertexWithUV(d11, (double)(par3 + 1), d15, d2, d3);
    3355
    3356            if (flag4)
    3357            {
    3358                tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d15, d6, d9);
    3359                tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d13, d6, d7);
    3360                tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d13, d5, d7);
    3361                tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d15, d5, d9);
    3362                tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d13, d6, d9);
    3363                tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d15, d6, d7);
    3364                tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d15, d5, d7);
    3365                tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d13, d5, d9);
    3366            }
    3367            else
    3368            {
    3369                if (par3 < l - 1 && this.blockAccess.isAirBlock(par2, par3 + 1, par4 - 1))
    3370                {
    3371                    tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d13, d6, d7);
    3372                    tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d14, d6, d8);
    3373                    tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d14, d5, d8);
    3374                    tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d13, d5, d7);
    3375                    tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d14, d6, d7);
    3376                    tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d13, d6, d8);
    3377                    tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d13, d5, d8);
    3378                    tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d14, d5, d7);
    3379                }
    3380
    3381                if (par3 < l - 1 && this.blockAccess.isAirBlock(par2, par3 + 1, par4 + 1))
    3382                {
    3383                    tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d14, d5, d8);
    3384                    tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d15, d5, d9);
    3385                    tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d15, d6, d9);
    3386                    tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d14, d6, d8);
    3387                    tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d15, d5, d8);
    3388                    tessellator.addVertexWithUV(d16, (double)(par3 + 1) + 0.005D, d14, d5, d9);
    3389                    tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d14, d6, d9);
    3390                    tessellator.addVertexWithUV(d17, (double)(par3 + 1) + 0.005D, d15, d6, d8);
    3391                }
    3392            }
    3393
    3394            if (flag5)
    3395            {
    3396                tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d15, d6, d9);
    3397                tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d13, d6, d7);
    3398                tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d13, d5, d7);
    3399                tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d15, d5, d9);
    3400                tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d13, d6, d9);
    3401                tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d15, d6, d7);
    3402                tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d15, d5, d7);
    3403                tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d13, d5, d9);
    3404            }
    3405            else
    3406            {
    3407                if (par3 > 1 && this.blockAccess.isAirBlock(par2, par3 - 1, par4 - 1))
    3408                {
    3409                    tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d13, d6, d7);
    3410                    tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d14, d6, d8);
    3411                    tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d14, d5, d8);
    3412                    tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d13, d5, d7);
    3413                    tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d14, d6, d7);
    3414                    tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d13, d6, d8);
    3415                    tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d13, d5, d8);
    3416                    tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d14, d5, d7);
    3417                }
    3418
    3419                if (par3 > 1 && this.blockAccess.isAirBlock(par2, par3 - 1, par4 + 1))
    3420                {
    3421                    tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d14, d5, d8);
    3422                    tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d15, d5, d9);
    3423                    tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d15, d6, d9);
    3424                    tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d14, d6, d8);
    3425                    tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d15, d5, d8);
    3426                    tessellator.addVertexWithUV(d16, (double)par3 - 0.005D, d14, d5, d9);
    3427                    tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d14, d6, d9);
    3428                    tessellator.addVertexWithUV(d17, (double)par3 - 0.005D, d15, d6, d8);
    3429                }
    3430            }
    3431        }
    3432
    3433        return true;
    3434    }
    3435
    3436    /**
    3437     * Renders any block requiring croseed squares such as reeds, flowers, and mushrooms
    3438     */
    3439    public boolean renderCrossedSquares(Block par1Block, int par2, int par3, int par4)
    3440    {
    3441        Tessellator tessellator = Tessellator.instance;
    3442        tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    3443        float f = 1.0F;
    3444        int l = par1Block.colorMultiplier(this.blockAccess, par2, par3, par4);
    3445        float f1 = (float)(l >> 16 & 255) / 255.0F;
    3446        float f2 = (float)(l >> 8 & 255) / 255.0F;
    3447        float f3 = (float)(l & 255) / 255.0F;
    3448
    3449        if (EntityRenderer.anaglyphEnable)
    3450        {
    3451            float f4 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F;
    3452            float f5 = (f1 * 30.0F + f2 * 70.0F) / 100.0F;
    3453            float f6 = (f1 * 30.0F + f3 * 70.0F) / 100.0F;
    3454            f1 = f4;
    3455            f2 = f5;
    3456            f3 = f6;
    3457        }
    3458
    3459        tessellator.setColorOpaque_F(f * f1, f * f2, f * f3);
    3460        double d0 = (double)par2;
    3461        double d1 = (double)par3;
    3462        double d2 = (double)par4;
    3463
    3464        if (par1Block == Block.tallGrass)
    3465        {
    3466            long i1 = (long)(par2 * 3129871) ^ (long)par4 * 116129781L ^ (long)par3;
    3467            i1 = i1 * i1 * 42317861L + i1 * 11L;
    3468            d0 += ((double)((float)(i1 >> 16 & 15L) / 15.0F) - 0.5D) * 0.5D;
    3469            d1 += ((double)((float)(i1 >> 20 & 15L) / 15.0F) - 1.0D) * 0.2D;
    3470            d2 += ((double)((float)(i1 >> 24 & 15L) / 15.0F) - 0.5D) * 0.5D;
    3471        }
    3472
    3473        this.drawCrossedSquares(par1Block, this.blockAccess.getBlockMetadata(par2, par3, par4), d0, d1, d2, 1.0F);
    3474        return true;
    3475    }
    3476
    3477    /**
    3478     * Render block stem
    3479     */
    3480    public boolean renderBlockStem(Block par1Block, int par2, int par3, int par4)
    3481    {
    3482        BlockStem blockstem = (BlockStem)par1Block;
    3483        Tessellator tessellator = Tessellator.instance;
    3484        tessellator.setBrightness(blockstem.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    3485        float f = 1.0F;
    3486        int l = blockstem.colorMultiplier(this.blockAccess, par2, par3, par4);
    3487        float f1 = (float)(l >> 16 & 255) / 255.0F;
    3488        float f2 = (float)(l >> 8 & 255) / 255.0F;
    3489        float f3 = (float)(l & 255) / 255.0F;
    3490
    3491        if (EntityRenderer.anaglyphEnable)
    3492        {
    3493            float f4 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F;
    3494            float f5 = (f1 * 30.0F + f2 * 70.0F) / 100.0F;
    3495            float f6 = (f1 * 30.0F + f3 * 70.0F) / 100.0F;
    3496            f1 = f4;
    3497            f2 = f5;
    3498            f3 = f6;
    3499        }
    3500
    3501        tessellator.setColorOpaque_F(f * f1, f * f2, f * f3);
    3502        blockstem.setBlockBoundsBasedOnState(this.blockAccess, par2, par3, par4);
    3503        int i1 = blockstem.getState(this.blockAccess, par2, par3, par4);
    3504
    3505        if (i1 < 0)
    3506        {
    3507            this.renderBlockStemSmall(blockstem, this.blockAccess.getBlockMetadata(par2, par3, par4), this.renderMaxY, (double)par2, (double)((float)par3 - 0.0625F), (double)par4);
    3508        }
    3509        else
    3510        {
    3511            this.renderBlockStemSmall(blockstem, this.blockAccess.getBlockMetadata(par2, par3, par4), 0.5D, (double)par2, (double)((float)par3 - 0.0625F), (double)par4);
    3512            this.renderBlockStemBig(blockstem, this.blockAccess.getBlockMetadata(par2, par3, par4), i1, this.renderMaxY, (double)par2, (double)((float)par3 - 0.0625F), (double)par4);
    3513        }
    3514
    3515        return true;
    3516    }
    3517
    3518    /**
    3519     * Render block crops
    3520     */
    3521    public boolean renderBlockCrops(Block par1Block, int par2, int par3, int par4)
    3522    {
    3523        Tessellator tessellator = Tessellator.instance;
    3524        tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    3525        tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
    3526        this.renderBlockCropsImpl(par1Block, this.blockAccess.getBlockMetadata(par2, par3, par4), (double)par2, (double)((float)par3 - 0.0625F), (double)par4);
    3527        return true;
    3528    }
    3529
    3530    /**
    3531     * Renders a torch at the given coordinates, with the base slanting at the given delta
    3532     */
    3533    public void renderTorchAtAngle(Block par1Block, double par2, double par4, double par6, double par8, double par10, int par12)
    3534    {
    3535        Tessellator tessellator = Tessellator.instance;
    3536        Icon icon = this.getBlockIconFromSideAndMetadata(par1Block, 0, par12);
    3537
    3538        if (this.hasOverrideBlockTexture())
    3539        {
    3540            icon = this.overrideBlockTexture;
    3541        }
    3542
    3543        double d5 = (double)icon.getMinU();
    3544        double d6 = (double)icon.getMinV();
    3545        double d7 = (double)icon.getMaxU();
    3546        double d8 = (double)icon.getMaxV();
    3547        double d9 = (double)icon.getInterpolatedU(7.0D);
    3548        double d10 = (double)icon.getInterpolatedV(6.0D);
    3549        double d11 = (double)icon.getInterpolatedU(9.0D);
    3550        double d12 = (double)icon.getInterpolatedV(8.0D);
    3551        double d13 = (double)icon.getInterpolatedU(7.0D);
    3552        double d14 = (double)icon.getInterpolatedV(13.0D);
    3553        double d15 = (double)icon.getInterpolatedU(9.0D);
    3554        double d16 = (double)icon.getInterpolatedV(15.0D);
    3555        par2 += 0.5D;
    3556        par6 += 0.5D;
    3557        double d17 = par2 - 0.5D;
    3558        double d18 = par2 + 0.5D;
    3559        double d19 = par6 - 0.5D;
    3560        double d20 = par6 + 0.5D;
    3561        double d21 = 0.0625D;
    3562        double d22 = 0.625D;
    3563        tessellator.addVertexWithUV(par2 + par8 * (1.0D - d22) - d21, par4 + d22, par6 + par10 * (1.0D - d22) - d21, d9, d10);
    3564        tessellator.addVertexWithUV(par2 + par8 * (1.0D - d22) - d21, par4 + d22, par6 + par10 * (1.0D - d22) + d21, d9, d12);
    3565        tessellator.addVertexWithUV(par2 + par8 * (1.0D - d22) + d21, par4 + d22, par6 + par10 * (1.0D - d22) + d21, d11, d12);
    3566        tessellator.addVertexWithUV(par2 + par8 * (1.0D - d22) + d21, par4 + d22, par6 + par10 * (1.0D - d22) - d21, d11, d10);
    3567        tessellator.addVertexWithUV(par2 + d21 + par8, par4, par6 - d21 + par10, d15, d14);
    3568        tessellator.addVertexWithUV(par2 + d21 + par8, par4, par6 + d21 + par10, d15, d16);
    3569        tessellator.addVertexWithUV(par2 - d21 + par8, par4, par6 + d21 + par10, d13, d16);
    3570        tessellator.addVertexWithUV(par2 - d21 + par8, par4, par6 - d21 + par10, d13, d14);
    3571        tessellator.addVertexWithUV(par2 - d21, par4 + 1.0D, d19, d5, d6);
    3572        tessellator.addVertexWithUV(par2 - d21 + par8, par4 + 0.0D, d19 + par10, d5, d8);
    3573        tessellator.addVertexWithUV(par2 - d21 + par8, par4 + 0.0D, d20 + par10, d7, d8);
    3574        tessellator.addVertexWithUV(par2 - d21, par4 + 1.0D, d20, d7, d6);
    3575        tessellator.addVertexWithUV(par2 + d21, par4 + 1.0D, d20, d5, d6);
    3576        tessellator.addVertexWithUV(par2 + par8 + d21, par4 + 0.0D, d20 + par10, d5, d8);
    3577        tessellator.addVertexWithUV(par2 + par8 + d21, par4 + 0.0D, d19 + par10, d7, d8);
    3578        tessellator.addVertexWithUV(par2 + d21, par4 + 1.0D, d19, d7, d6);
    3579        tessellator.addVertexWithUV(d17, par4 + 1.0D, par6 + d21, d5, d6);
    3580        tessellator.addVertexWithUV(d17 + par8, par4 + 0.0D, par6 + d21 + par10, d5, d8);
    3581        tessellator.addVertexWithUV(d18 + par8, par4 + 0.0D, par6 + d21 + par10, d7, d8);
    3582        tessellator.addVertexWithUV(d18, par4 + 1.0D, par6 + d21, d7, d6);
    3583        tessellator.addVertexWithUV(d18, par4 + 1.0D, par6 - d21, d5, d6);
    3584        tessellator.addVertexWithUV(d18 + par8, par4 + 0.0D, par6 - d21 + par10, d5, d8);
    3585        tessellator.addVertexWithUV(d17 + par8, par4 + 0.0D, par6 - d21 + par10, d7, d8);
    3586        tessellator.addVertexWithUV(d17, par4 + 1.0D, par6 - d21, d7, d6);
    3587    }
    3588
    3589    /**
    3590     * Utility function to draw crossed swuares
    3591     */
    3592    public void drawCrossedSquares(Block par1Block, int par2, double par3, double par5, double par7, float par9)
    3593    {
    3594        Tessellator tessellator = Tessellator.instance;
    3595        Icon icon = this.getBlockIconFromSideAndMetadata(par1Block, 0, par2);
    3596
    3597        if (this.hasOverrideBlockTexture())
    3598        {
    3599            icon = this.overrideBlockTexture;
    3600        }
    3601
    3602        double d3 = (double)icon.getMinU();
    3603        double d4 = (double)icon.getMinV();
    3604        double d5 = (double)icon.getMaxU();
    3605        double d6 = (double)icon.getMaxV();
    3606        double d7 = 0.45D * (double)par9;
    3607        double d8 = par3 + 0.5D - d7;
    3608        double d9 = par3 + 0.5D + d7;
    3609        double d10 = par7 + 0.5D - d7;
    3610        double d11 = par7 + 0.5D + d7;
    3611        tessellator.addVertexWithUV(d8, par5 + (double)par9, d10, d3, d4);
    3612        tessellator.addVertexWithUV(d8, par5 + 0.0D, d10, d3, d6);
    3613        tessellator.addVertexWithUV(d9, par5 + 0.0D, d11, d5, d6);
    3614        tessellator.addVertexWithUV(d9, par5 + (double)par9, d11, d5, d4);
    3615        tessellator.addVertexWithUV(d9, par5 + (double)par9, d11, d3, d4);
    3616        tessellator.addVertexWithUV(d9, par5 + 0.0D, d11, d3, d6);
    3617        tessellator.addVertexWithUV(d8, par5 + 0.0D, d10, d5, d6);
    3618        tessellator.addVertexWithUV(d8, par5 + (double)par9, d10, d5, d4);
    3619        tessellator.addVertexWithUV(d8, par5 + (double)par9, d11, d3, d4);
    3620        tessellator.addVertexWithUV(d8, par5 + 0.0D, d11, d3, d6);
    3621        tessellator.addVertexWithUV(d9, par5 + 0.0D, d10, d5, d6);
    3622        tessellator.addVertexWithUV(d9, par5 + (double)par9, d10, d5, d4);
    3623        tessellator.addVertexWithUV(d9, par5 + (double)par9, d10, d3, d4);
    3624        tessellator.addVertexWithUV(d9, par5 + 0.0D, d10, d3, d6);
    3625        tessellator.addVertexWithUV(d8, par5 + 0.0D, d11, d5, d6);
    3626        tessellator.addVertexWithUV(d8, par5 + (double)par9, d11, d5, d4);
    3627    }
    3628
    3629    /**
    3630     * Render block stem small
    3631     */
    3632    public void renderBlockStemSmall(Block par1Block, int par2, double par3, double par5, double par7, double par9)
    3633    {
    3634        Tessellator tessellator = Tessellator.instance;
    3635        Icon icon = this.getBlockIconFromSideAndMetadata(par1Block, 0, par2);
    3636
    3637        if (this.hasOverrideBlockTexture())
    3638        {
    3639            icon = this.overrideBlockTexture;
    3640        }
    3641
    3642        double d4 = (double)icon.getMinU();
    3643        double d5 = (double)icon.getMinV();
    3644        double d6 = (double)icon.getMaxU();
    3645        double d7 = (double)icon.getInterpolatedV(par3 * 16.0D);
    3646        double d8 = par5 + 0.5D - 0.44999998807907104D;
    3647        double d9 = par5 + 0.5D + 0.44999998807907104D;
    3648        double d10 = par9 + 0.5D - 0.44999998807907104D;
    3649        double d11 = par9 + 0.5D + 0.44999998807907104D;
    3650        tessellator.addVertexWithUV(d8, par7 + par3, d10, d4, d5);
    3651        tessellator.addVertexWithUV(d8, par7 + 0.0D, d10, d4, d7);
    3652        tessellator.addVertexWithUV(d9, par7 + 0.0D, d11, d6, d7);
    3653        tessellator.addVertexWithUV(d9, par7 + par3, d11, d6, d5);
    3654        tessellator.addVertexWithUV(d9, par7 + par3, d11, d4, d5);
    3655        tessellator.addVertexWithUV(d9, par7 + 0.0D, d11, d4, d7);
    3656        tessellator.addVertexWithUV(d8, par7 + 0.0D, d10, d6, d7);
    3657        tessellator.addVertexWithUV(d8, par7 + par3, d10, d6, d5);
    3658        tessellator.addVertexWithUV(d8, par7 + par3, d11, d4, d5);
    3659        tessellator.addVertexWithUV(d8, par7 + 0.0D, d11, d4, d7);
    3660        tessellator.addVertexWithUV(d9, par7 + 0.0D, d10, d6, d7);
    3661        tessellator.addVertexWithUV(d9, par7 + par3, d10, d6, d5);
    3662        tessellator.addVertexWithUV(d9, par7 + par3, d10, d4, d5);
    3663        tessellator.addVertexWithUV(d9, par7 + 0.0D, d10, d4, d7);
    3664        tessellator.addVertexWithUV(d8, par7 + 0.0D, d11, d6, d7);
    3665        tessellator.addVertexWithUV(d8, par7 + par3, d11, d6, d5);
    3666    }
    3667
    3668    /**
    3669     * Render BlockLilyPad
    3670     */
    3671    public boolean renderBlockLilyPad(Block par1Block, int par2, int par3, int par4)
    3672    {
    3673        Tessellator tessellator = Tessellator.instance;
    3674        Icon icon = this.getBlockIconFromSide(par1Block, 1);
    3675
    3676        if (this.hasOverrideBlockTexture())
    3677        {
    3678            icon = this.overrideBlockTexture;
    3679        }
    3680
    3681        float f = 0.015625F;
    3682        double d0 = (double)icon.getMinU();
    3683        double d1 = (double)icon.getMinV();
    3684        double d2 = (double)icon.getMaxU();
    3685        double d3 = (double)icon.getMaxV();
    3686        long l = (long)(par2 * 3129871) ^ (long)par4 * 116129781L ^ (long)par3;
    3687        l = l * l * 42317861L + l * 11L;
    3688        int i1 = (int)(l >> 16 & 3L);
    3689        tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    3690        float f1 = (float)par2 + 0.5F;
    3691        float f2 = (float)par4 + 0.5F;
    3692        float f3 = (float)(i1 & 1) * 0.5F * (float)(1 - i1 / 2 % 2 * 2);
    3693        float f4 = (float)(i1 + 1 & 1) * 0.5F * (float)(1 - (i1 + 1) / 2 % 2 * 2);
    3694        tessellator.setColorOpaque_I(par1Block.getBlockColor());
    3695        tessellator.addVertexWithUV((double)(f1 + f3 - f4), (double)((float)par3 + f), (double)(f2 + f3 + f4), d0, d1);
    3696        tessellator.addVertexWithUV((double)(f1 + f3 + f4), (double)((float)par3 + f), (double)(f2 - f3 + f4), d2, d1);
    3697        tessellator.addVertexWithUV((double)(f1 - f3 + f4), (double)((float)par3 + f), (double)(f2 - f3 - f4), d2, d3);
    3698        tessellator.addVertexWithUV((double)(f1 - f3 - f4), (double)((float)par3 + f), (double)(f2 + f3 - f4), d0, d3);
    3699        tessellator.setColorOpaque_I((par1Block.getBlockColor() & 16711422) >> 1);
    3700        tessellator.addVertexWithUV((double)(f1 - f3 - f4), (double)((float)par3 + f), (double)(f2 + f3 - f4), d0, d3);
    3701        tessellator.addVertexWithUV((double)(f1 - f3 + f4), (double)((float)par3 + f), (double)(f2 - f3 - f4), d2, d3);
    3702        tessellator.addVertexWithUV((double)(f1 + f3 + f4), (double)((float)par3 + f), (double)(f2 - f3 + f4), d2, d1);
    3703        tessellator.addVertexWithUV((double)(f1 + f3 - f4), (double)((float)par3 + f), (double)(f2 + f3 + f4), d0, d1);
    3704        return true;
    3705    }
    3706
    3707    /**
    3708     * Render block stem big
    3709     */
    3710    public void renderBlockStemBig(BlockStem par1BlockStem, int par2, int par3, double par4, double par6, double par8, double par10)
    3711    {
    3712        Tessellator tessellator = Tessellator.instance;
    3713        Icon icon = par1BlockStem.func_94368_p();
    3714
    3715        if (this.hasOverrideBlockTexture())
    3716        {
    3717            icon = this.overrideBlockTexture;
    3718        }
    3719
    3720        double d4 = (double)icon.getMinU();
    3721        double d5 = (double)icon.getMinV();
    3722        double d6 = (double)icon.getMaxU();
    3723        double d7 = (double)icon.getMaxV();
    3724        double d8 = par6 + 0.5D - 0.5D;
    3725        double d9 = par6 + 0.5D + 0.5D;
    3726        double d10 = par10 + 0.5D - 0.5D;
    3727        double d11 = par10 + 0.5D + 0.5D;
    3728        double d12 = par6 + 0.5D;
    3729        double d13 = par10 + 0.5D;
    3730
    3731        if ((par3 + 1) / 2 % 2 == 1)
    3732        {
    3733            double d14 = d6;
    3734            d6 = d4;
    3735            d4 = d14;
    3736        }
    3737
    3738        if (par3 < 2)
    3739        {
    3740            tessellator.addVertexWithUV(d8, par8 + par4, d13, d4, d5);
    3741            tessellator.addVertexWithUV(d8, par8 + 0.0D, d13, d4, d7);
    3742            tessellator.addVertexWithUV(d9, par8 + 0.0D, d13, d6, d7);
    3743            tessellator.addVertexWithUV(d9, par8 + par4, d13, d6, d5);
    3744            tessellator.addVertexWithUV(d9, par8 + par4, d13, d6, d5);
    3745            tessellator.addVertexWithUV(d9, par8 + 0.0D, d13, d6, d7);
    3746            tessellator.addVertexWithUV(d8, par8 + 0.0D, d13, d4, d7);
    3747            tessellator.addVertexWithUV(d8, par8 + par4, d13, d4, d5);
    3748        }
    3749        else
    3750        {
    3751            tessellator.addVertexWithUV(d12, par8 + par4, d11, d4, d5);
    3752            tessellator.addVertexWithUV(d12, par8 + 0.0D, d11, d4, d7);
    3753            tessellator.addVertexWithUV(d12, par8 + 0.0D, d10, d6, d7);
    3754            tessellator.addVertexWithUV(d12, par8 + par4, d10, d6, d5);
    3755            tessellator.addVertexWithUV(d12, par8 + par4, d10, d6, d5);
    3756            tessellator.addVertexWithUV(d12, par8 + 0.0D, d10, d6, d7);
    3757            tessellator.addVertexWithUV(d12, par8 + 0.0D, d11, d4, d7);
    3758            tessellator.addVertexWithUV(d12, par8 + par4, d11, d4, d5);
    3759        }
    3760    }
    3761
    3762    /**
    3763     * Render block crops implementation
    3764     */
    3765    public void renderBlockCropsImpl(Block par1Block, int par2, double par3, double par5, double par7)
    3766    {
    3767        Tessellator tessellator = Tessellator.instance;
    3768        Icon icon = this.getBlockIconFromSideAndMetadata(par1Block, 0, par2);
    3769
    3770        if (this.hasOverrideBlockTexture())
    3771        {
    3772            icon = this.overrideBlockTexture;
    3773        }
    3774
    3775        double d3 = (double)icon.getMinU();
    3776        double d4 = (double)icon.getMinV();
    3777        double d5 = (double)icon.getMaxU();
    3778        double d6 = (double)icon.getMaxV();
    3779        double d7 = par3 + 0.5D - 0.25D;
    3780        double d8 = par3 + 0.5D + 0.25D;
    3781        double d9 = par7 + 0.5D - 0.5D;
    3782        double d10 = par7 + 0.5D + 0.5D;
    3783        tessellator.addVertexWithUV(d7, par5 + 1.0D, d9, d3, d4);
    3784        tessellator.addVertexWithUV(d7, par5 + 0.0D, d9, d3, d6);
    3785        tessellator.addVertexWithUV(d7, par5 + 0.0D, d10, d5, d6);
    3786        tessellator.addVertexWithUV(d7, par5 + 1.0D, d10, d5, d4);
    3787        tessellator.addVertexWithUV(d7, par5 + 1.0D, d10, d3, d4);
    3788        tessellator.addVertexWithUV(d7, par5 + 0.0D, d10, d3, d6);
    3789        tessellator.addVertexWithUV(d7, par5 + 0.0D, d9, d5, d6);
    3790        tessellator.addVertexWithUV(d7, par5 + 1.0D, d9, d5, d4);
    3791        tessellator.addVertexWithUV(d8, par5 + 1.0D, d10, d3, d4);
    3792        tessellator.addVertexWithUV(d8, par5 + 0.0D, d10, d3, d6);
    3793        tessellator.addVertexWithUV(d8, par5 + 0.0D, d9, d5, d6);
    3794        tessellator.addVertexWithUV(d8, par5 + 1.0D, d9, d5, d4);
    3795        tessellator.addVertexWithUV(d8, par5 + 1.0D, d9, d3, d4);
    3796        tessellator.addVertexWithUV(d8, par5 + 0.0D, d9, d3, d6);
    3797        tessellator.addVertexWithUV(d8, par5 + 0.0D, d10, d5, d6);
    3798        tessellator.addVertexWithUV(d8, par5 + 1.0D, d10, d5, d4);
    3799        d7 = par3 + 0.5D - 0.5D;
    3800        d8 = par3 + 0.5D + 0.5D;
    3801        d9 = par7 + 0.5D - 0.25D;
    3802        d10 = par7 + 0.5D + 0.25D;
    3803        tessellator.addVertexWithUV(d7, par5 + 1.0D, d9, d3, d4);
    3804        tessellator.addVertexWithUV(d7, par5 + 0.0D, d9, d3, d6);
    3805        tessellator.addVertexWithUV(d8, par5 + 0.0D, d9, d5, d6);
    3806        tessellator.addVertexWithUV(d8, par5 + 1.0D, d9, d5, d4);
    3807        tessellator.addVertexWithUV(d8, par5 + 1.0D, d9, d3, d4);
    3808        tessellator.addVertexWithUV(d8, par5 + 0.0D, d9, d3, d6);
    3809        tessellator.addVertexWithUV(d7, par5 + 0.0D, d9, d5, d6);
    3810        tessellator.addVertexWithUV(d7, par5 + 1.0D, d9, d5, d4);
    3811        tessellator.addVertexWithUV(d8, par5 + 1.0D, d10, d3, d4);
    3812        tessellator.addVertexWithUV(d8, par5 + 0.0D, d10, d3, d6);
    3813        tessellator.addVertexWithUV(d7, par5 + 0.0D, d10, d5, d6);
    3814        tessellator.addVertexWithUV(d7, par5 + 1.0D, d10, d5, d4);
    3815        tessellator.addVertexWithUV(d7, par5 + 1.0D, d10, d3, d4);
    3816        tessellator.addVertexWithUV(d7, par5 + 0.0D, d10, d3, d6);
    3817        tessellator.addVertexWithUV(d8, par5 + 0.0D, d10, d5, d6);
    3818        tessellator.addVertexWithUV(d8, par5 + 1.0D, d10, d5, d4);
    3819    }
    3820
    3821    /**
    3822     * Renders a block based on the BlockFluids class at the given coordinates
    3823     */
    3824    public boolean renderBlockFluids(Block par1Block, int par2, int par3, int par4)
    3825    {
    3826        Tessellator tessellator = Tessellator.instance;
    3827        int l = par1Block.colorMultiplier(this.blockAccess, par2, par3, par4);
    3828        float f = (float)(l >> 16 & 255) / 255.0F;
    3829        float f1 = (float)(l >> 8 & 255) / 255.0F;
    3830        float f2 = (float)(l & 255) / 255.0F;
    3831        boolean flag = par1Block.shouldSideBeRendered(this.blockAccess, par2, par3 + 1, par4, 1);
    3832        boolean flag1 = par1Block.shouldSideBeRendered(this.blockAccess, par2, par3 - 1, par4, 0);
    3833        boolean[] aboolean = new boolean[] {par1Block.shouldSideBeRendered(this.blockAccess, par2, par3, par4 - 1, 2), par1Block.shouldSideBeRendered(this.blockAccess, par2, par3, par4 + 1, 3), par1Block.shouldSideBeRendered(this.blockAccess, par2 - 1, par3, par4, 4), par1Block.shouldSideBeRendered(this.blockAccess, par2 + 1, par3, par4, 5)};
    3834
    3835        if (!flag && !flag1 && !aboolean[0] && !aboolean[1] && !aboolean[2] && !aboolean[3])
    3836        {
    3837            return false;
    3838        }
    3839        else
    3840        {
    3841            boolean flag2 = false;
    3842            float f3 = 0.5F;
    3843            float f4 = 1.0F;
    3844            float f5 = 0.8F;
    3845            float f6 = 0.6F;
    3846            double d0 = 0.0D;
    3847            double d1 = 1.0D;
    3848            Material material = par1Block.blockMaterial;
    3849            int i1 = this.blockAccess.getBlockMetadata(par2, par3, par4);
    3850            double d2 = (double)this.getFluidHeight(par2, par3, par4, material);
    3851            double d3 = (double)this.getFluidHeight(par2, par3, par4 + 1, material);
    3852            double d4 = (double)this.getFluidHeight(par2 + 1, par3, par4 + 1, material);
    3853            double d5 = (double)this.getFluidHeight(par2 + 1, par3, par4, material);
    3854            double d6 = 0.0010000000474974513D;
    3855            float f7;
    3856            float f8;
    3857
    3858            if (this.renderAllFaces || flag)
    3859            {
    3860                flag2 = true;
    3861                Icon icon = this.getBlockIconFromSideAndMetadata(par1Block, 1, i1);
    3862                float f9 = (float)BlockFluid.getFlowDirection(this.blockAccess, par2, par3, par4, material);
    3863
    3864                if (f9 > -999.0F)
    3865                {
    3866                    icon = this.getBlockIconFromSideAndMetadata(par1Block, 2, i1);
    3867                }
    3868
    3869                d2 -= d6;
    3870                d3 -= d6;
    3871                d4 -= d6;
    3872                d5 -= d6;
    3873                double d7;
    3874                double d8;
    3875                double d9;
    3876                double d10;
    3877                double d11;
    3878                double d12;
    3879                double d13;
    3880                double d14;
    3881
    3882                if (f9 < -999.0F)
    3883                {
    3884                    d8 = (double)icon.getInterpolatedU(0.0D);
    3885                    d12 = (double)icon.getInterpolatedV(0.0D);
    3886                    d7 = d8;
    3887                    d11 = (double)icon.getInterpolatedV(16.0D);
    3888                    d10 = (double)icon.getInterpolatedU(16.0D);
    3889                    d14 = d11;
    3890                    d9 = d10;
    3891                    d13 = d12;
    3892                }
    3893                else
    3894                {
    3895                    f8 = MathHelper.sin(f9) * 0.25F;
    3896                    f7 = MathHelper.cos(f9) * 0.25F;
    3897                    d8 = (double)icon.getInterpolatedU((double)(8.0F + (-f7 - f8) * 16.0F));
    3898                    d12 = (double)icon.getInterpolatedV((double)(8.0F + (-f7 + f8) * 16.0F));
    3899                    d7 = (double)icon.getInterpolatedU((double)(8.0F + (-f7 + f8) * 16.0F));
    3900                    d11 = (double)icon.getInterpolatedV((double)(8.0F + (f7 + f8) * 16.0F));
    3901                    d10 = (double)icon.getInterpolatedU((double)(8.0F + (f7 + f8) * 16.0F));
    3902                    d14 = (double)icon.getInterpolatedV((double)(8.0F + (f7 - f8) * 16.0F));
    3903                    d9 = (double)icon.getInterpolatedU((double)(8.0F + (f7 - f8) * 16.0F));
    3904                    d13 = (double)icon.getInterpolatedV((double)(8.0F + (-f7 - f8) * 16.0F));
    3905                }
    3906
    3907                tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    3908                f8 = 1.0F;
    3909                tessellator.setColorOpaque_F(f4 * f8 * f, f4 * f8 * f1, f4 * f8 * f2);
    3910                tessellator.addVertexWithUV((double)(par2 + 0), (double)par3 + d2, (double)(par4 + 0), d8, d12);
    3911                tessellator.addVertexWithUV((double)(par2 + 0), (double)par3 + d3, (double)(par4 + 1), d7, d11);
    3912                tessellator.addVertexWithUV((double)(par2 + 1), (double)par3 + d4, (double)(par4 + 1), d10, d14);
    3913                tessellator.addVertexWithUV((double)(par2 + 1), (double)par3 + d5, (double)(par4 + 0), d9, d13);
    3914            }
    3915
    3916            if (this.renderAllFaces || flag1)
    3917            {
    3918                tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4));
    3919                float f10 = 1.0F;
    3920                tessellator.setColorOpaque_F(f3 * f10, f3 * f10, f3 * f10);
    3921                this.renderBottomFace(par1Block, (double)par2, (double)par3 + d6, (double)par4, this.getBlockIconFromSide(par1Block, 0));
    3922                flag2 = true;
    3923            }
    3924
    3925            for (int j1 = 0; j1 < 4; ++j1)
    3926            {
    3927                int k1 = par2;
    3928                int l1 = par4;
    3929
    3930                if (j1 == 0)
    3931                {
    3932                    l1 = par4 - 1;
    3933                }
    3934
    3935                if (j1 == 1)
    3936                {
    3937                    ++l1;
    3938                }
    3939
    3940                if (j1 == 2)
    3941                {
    3942                    k1 = par2 - 1;
    3943                }
    3944
    3945                if (j1 == 3)
    3946                {
    3947                    ++k1;
    3948                }
    3949
    3950                Icon icon1 = this.getBlockIconFromSideAndMetadata(par1Block, j1 + 2, i1);
    3951
    3952                if (this.renderAllFaces || aboolean[j1])
    3953                {
    3954                    double d15;
    3955                    double d16;
    3956                    double d17;
    3957                    double d18;
    3958                    double d19;
    3959                    double d20;
    3960
    3961                    if (j1 == 0)
    3962                    {
    3963                        d15 = d2;
    3964                        d17 = d5;
    3965                        d16 = (double)par2;
    3966                        d18 = (double)(par2 + 1);
    3967                        d19 = (double)par4 + d6;
    3968                        d20 = (double)par4 + d6;
    3969                    }
    3970                    else if (j1 == 1)
    3971                    {
    3972                        d15 = d4;
    3973                        d17 = d3;
    3974                        d16 = (double)(par2 + 1);
    3975                        d18 = (double)par2;
    3976                        d19 = (double)(par4 + 1) - d6;
    3977                        d20 = (double)(par4 + 1) - d6;
    3978                    }
    3979                    else if (j1 == 2)
    3980                    {
    3981                        d15 = d3;
    3982                        d17 = d2;
    3983                        d16 = (double)par2 + d6;
    3984                        d18 = (double)par2 + d6;
    3985                        d19 = (double)(par4 + 1);
    3986                        d20 = (double)par4;
    3987                    }
    3988                    else
    3989                    {
    3990                        d15 = d5;
    3991                        d17 = d4;
    3992                        d16 = (double)(par2 + 1) - d6;
    3993                        d18 = (double)(par2 + 1) - d6;
    3994                        d19 = (double)par4;
    3995                        d20 = (double)(par4 + 1);
    3996                    }
    3997
    3998                    flag2 = true;
    3999                    float f11 = icon1.getInterpolatedU(0.0D);
    4000                    f8 = icon1.getInterpolatedU(8.0D);
    4001                    f7 = icon1.getInterpolatedV((1.0D - d15) * 16.0D * 0.5D);
    4002                    float f12 = icon1.getInterpolatedV((1.0D - d17) * 16.0D * 0.5D);
    4003                    float f13 = icon1.getInterpolatedV(8.0D);
    4004                    tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, k1, par3, l1));
    4005                    float f14 = 1.0F;
    4006
    4007                    if (j1 < 2)
    4008                    {
    4009                        f14 *= f5;
    4010                    }
    4011                    else
    4012                    {
    4013                        f14 *= f6;
    4014                    }
    4015
    4016                    tessellator.setColorOpaque_F(f4 * f14 * f, f4 * f14 * f1, f4 * f14 * f2);
    4017                    tessellator.addVertexWithUV(d16, (double)par3 + d15, d19, (double)f11, (double)f7);
    4018                    tessellator.addVertexWithUV(d18, (double)par3 + d17, d20, (double)f8, (double)f12);
    4019                    tessellator.addVertexWithUV(d18, (double)(par3 + 0), d20, (double)f8, (double)f13);
    4020                    tessellator.addVertexWithUV(d16, (double)(par3 + 0), d19, (double)f11, (double)f13);
    4021                }
    4022            }
    4023
    4024            this.renderMinY = d0;
    4025            this.renderMaxY = d1;
    4026            return flag2;
    4027        }
    4028    }
    4029
    4030    /**
    4031     * Get fluid height
    4032     */
    4033    public float getFluidHeight(int par1, int par2, int par3, Material par4Material)
    4034    {
    4035        int l = 0;
    4036        float f = 0.0F;
    4037
    4038        for (int i1 = 0; i1 < 4; ++i1)
    4039        {
    4040            int j1 = par1 - (i1 & 1);
    4041            int k1 = par3 - (i1 >> 1 & 1);
    4042
    4043            if (this.blockAccess.getBlockMaterial(j1, par2 + 1, k1) == par4Material)
    4044            {
    4045                return 1.0F;
    4046            }
    4047
    4048            Material material1 = this.blockAccess.getBlockMaterial(j1, par2, k1);
    4049
    4050            if (material1 == par4Material)
    4051            {
    4052                int l1 = this.blockAccess.getBlockMetadata(j1, par2, k1);
    4053
    4054                if (l1 >= 8 || l1 == 0)
    4055                {
    4056                    f += BlockFluid.getFluidHeightPercent(l1) * 10.0F;
    4057                    l += 10;
    4058                }
    4059
    4060                f += BlockFluid.getFluidHeightPercent(l1);
    4061                ++l;
    4062            }
    4063            else if (!material1.isSolid())
    4064            {
    4065                ++f;
    4066                ++l;
    4067            }
    4068        }
    4069
    4070        return 1.0F - f / (float)l;
    4071    }
    4072
    4073    /**
    4074     * Renders a falling sand block
    4075     */
    4076    public void renderBlockSandFalling(Block par1Block, World par2World, int par3, int par4, int par5, int par6)
    4077    {
    4078        float f = 0.5F;
    4079        float f1 = 1.0F;
    4080        float f2 = 0.8F;
    4081        float f3 = 0.6F;
    4082        Tessellator tessellator = Tessellator.instance;
    4083        tessellator.startDrawingQuads();
    4084        tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(par2World, par3, par4, par5));
    4085        float f4 = 1.0F;
    4086        float f5 = 1.0F;
    4087
    4088        if (f5 < f4)
    4089        {
    4090            f5 = f4;
    4091        }
    4092
    4093        tessellator.setColorOpaque_F(f * f5, f * f5, f * f5);
    4094        this.renderBottomFace(par1Block, -0.5D, -0.5D, -0.5D, this.getBlockIconFromSideAndMetadata(par1Block, 0, par6));
    4095        f5 = 1.0F;
    4096
    4097        if (f5 < f4)
    4098        {
    4099            f5 = f4;
    4100        }
    4101
    4102        tessellator.setColorOpaque_F(f1 * f5, f1 * f5, f1 * f5);
    4103        this.renderTopFace(par1Block, -0.5D, -0.5D, -0.5D, this.getBlockIconFromSideAndMetadata(par1Block, 1, par6));
    4104        f5 = 1.0F;
    4105
    4106        if (f5 < f4)
    4107        {
    4108            f5 = f4;
    4109        }
    4110
    4111        tessellator.setColorOpaque_F(f2 * f5, f2 * f5, f2 * f5);
    4112        this.renderEastFace(par1Block, -0.5D, -0.5D, -0.5D, this.getBlockIconFromSideAndMetadata(par1Block, 2, par6));
    4113        f5 = 1.0F;
    4114
    4115        if (f5 < f4)
    4116        {
    4117            f5 = f4;
    4118        }
    4119
    4120        tessellator.setColorOpaque_F(f2 * f5, f2 * f5, f2 * f5);
    4121        this.renderWestFace(par1Block, -0.5D, -0.5D, -0.5D, this.getBlockIconFromSideAndMetadata(par1Block, 3, par6));
    4122        f5 = 1.0F;
    4123
    4124        if (f5 < f4)
    4125        {
    4126            f5 = f4;
    4127        }
    4128
    4129        tessellator.setColorOpaque_F(f3 * f5, f3 * f5, f3 * f5);
    4130        this.renderNorthFace(par1Block, -0.5D, -0.5D, -0.5D, this.getBlockIconFromSideAndMetadata(par1Block, 4, par6));
    4131        f5 = 1.0F;
    4132
    4133        if (f5 < f4)
    4134        {
    4135            f5 = f4;
    4136        }
    4137
    4138        tessellator.setColorOpaque_F(f3 * f5, f3 * f5, f3 * f5);
    4139        this.renderSouthFace(par1Block, -0.5D, -0.5D, -0.5D, this.getBlockIconFromSideAndMetadata(par1Block, 5, par6));
    4140        tessellator.draw();
    4141    }
    4142
    4143    /**
    4144     * Renders a standard cube block at the given coordinates
    4145     */
    4146    public boolean renderStandardBlock(Block par1Block, int par2, int par3, int par4)
    4147    {
    4148        int l = par1Block.colorMultiplier(this.blockAccess, par2, par3, par4);
    4149        float f = (float)(l >> 16 & 255) / 255.0F;
    4150        float f1 = (float)(l >> 8 & 255) / 255.0F;
    4151        float f2 = (float)(l & 255) / 255.0F;
    4152
    4153        if (EntityRenderer.anaglyphEnable)
    4154        {
    4155            float f3 = (f * 30.0F + f1 * 59.0F + f2 * 11.0F) / 100.0F;
    4156            float f4 = (f * 30.0F + f1 * 70.0F) / 100.0F;
    4157            float f5 = (f * 30.0F + f2 * 70.0F) / 100.0F;
    4158            f = f3;
    4159            f1 = f4;
    4160            f2 = f5;
    4161        }
    4162
    4163        return Minecraft.isAmbientOcclusionEnabled() && Block.lightValue[par1Block.blockID] == 0 ? (this.partialRenderBounds ? this.func_102027_b(par1Block, par2, par3, par4, f, f1, f2) : this.renderStandardBlockWithAmbientOcclusion(par1Block, par2, par3, par4, f, f1, f2)) : this.renderStandardBlockWithColorMultiplier(par1Block, par2, par3, par4, f, f1, f2);
    4164    }
    4165
    4166    /**
    4167     * Renders a log block at the given coordinates
    4168     */
    4169    public boolean renderBlockLog(Block par1Block, int par2, int par3, int par4)
    4170    {
    4171        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    4172        int i1 = l & 12;
    4173
    4174        if (i1 == 4)
    4175        {
    4176            this.uvRotateEast = 1;
    4177            this.uvRotateWest = 1;
    4178            this.uvRotateTop = 1;
    4179            this.uvRotateBottom = 1;
    4180        }
    4181        else if (i1 == 8)
    4182        {
    4183            this.uvRotateSouth = 1;
    4184            this.uvRotateNorth = 1;
    4185        }
    4186
    4187        boolean flag = this.renderStandardBlock(par1Block, par2, par3, par4);
    4188        this.uvRotateSouth = 0;
    4189        this.uvRotateEast = 0;
    4190        this.uvRotateWest = 0;
    4191        this.uvRotateNorth = 0;
    4192        this.uvRotateTop = 0;
    4193        this.uvRotateBottom = 0;
    4194        return flag;
    4195    }
    4196
    4197    public boolean renderBlockQuartz(Block par1Block, int par2, int par3, int par4)
    4198    {
    4199        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    4200
    4201        if (l == 3)
    4202        {
    4203            this.uvRotateEast = 1;
    4204            this.uvRotateWest = 1;
    4205            this.uvRotateTop = 1;
    4206            this.uvRotateBottom = 1;
    4207        }
    4208        else if (l == 4)
    4209        {
    4210            this.uvRotateSouth = 1;
    4211            this.uvRotateNorth = 1;
    4212        }
    4213
    4214        boolean flag = this.renderStandardBlock(par1Block, par2, par3, par4);
    4215        this.uvRotateSouth = 0;
    4216        this.uvRotateEast = 0;
    4217        this.uvRotateWest = 0;
    4218        this.uvRotateNorth = 0;
    4219        this.uvRotateTop = 0;
    4220        this.uvRotateBottom = 0;
    4221        return flag;
    4222    }
    4223
    4224    public boolean renderStandardBlockWithAmbientOcclusion(Block par1Block, int par2, int par3, int par4, float par5, float par6, float par7)
    4225    {
    4226        this.enableAO = true;
    4227        boolean flag = false;
    4228        float f3 = 0.0F;
    4229        float f4 = 0.0F;
    4230        float f5 = 0.0F;
    4231        float f6 = 0.0F;
    4232        boolean flag1 = true;
    4233        int l = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4);
    4234        Tessellator tessellator = Tessellator.instance;
    4235        tessellator.setBrightness(983055);
    4236
    4237        if (this.getBlockIcon(par1Block).getIconName().equals("grass_top"))
    4238        {
    4239            flag1 = false;
    4240        }
    4241        else if (this.hasOverrideBlockTexture())
    4242        {
    4243            flag1 = false;
    4244        }
    4245
    4246        boolean flag2;
    4247        boolean flag3;
    4248        boolean flag4;
    4249        boolean flag5;
    4250        float f7;
    4251        int i1;
    4252
    4253        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3 - 1, par4, 0))
    4254        {
    4255            if (this.renderMinY <= 0.0D)
    4256            {
    4257                --par3;
    4258            }
    4259
    4260            this.aoBrightnessXYNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4);
    4261            this.aoBrightnessYZNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 - 1);
    4262            this.aoBrightnessYZNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 + 1);
    4263            this.aoBrightnessXYPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4);
    4264            this.aoLightValueScratchXYNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4);
    4265            this.aoLightValueScratchYZNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 - 1);
    4266            this.aoLightValueScratchYZNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 + 1);
    4267            this.aoLightValueScratchXYPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4);
    4268            flag3 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 + 1, par3 - 1, par4)];
    4269            flag2 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 - 1, par3 - 1, par4)];
    4270            flag5 = Block.canBlockGrass[this.blockAccess.getBlockId(par2, par3 - 1, par4 + 1)];
    4271            flag4 = Block.canBlockGrass[this.blockAccess.getBlockId(par2, par3 - 1, par4 - 1)];
    4272
    4273            if (!flag4 && !flag2)
    4274            {
    4275                this.aoLightValueScratchXYZNNN = this.aoLightValueScratchXYNN;
    4276                this.aoBrightnessXYZNNN = this.aoBrightnessXYNN;
    4277            }
    4278            else
    4279            {
    4280                this.aoLightValueScratchXYZNNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4 - 1);
    4281                this.aoBrightnessXYZNNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4 - 1);
    4282            }
    4283
    4284            if (!flag5 && !flag2)
    4285            {
    4286                this.aoLightValueScratchXYZNNP = this.aoLightValueScratchXYNN;
    4287                this.aoBrightnessXYZNNP = this.aoBrightnessXYNN;
    4288            }
    4289            else
    4290            {
    4291                this.aoLightValueScratchXYZNNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4 + 1);
    4292                this.aoBrightnessXYZNNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4 + 1);
    4293            }
    4294
    4295            if (!flag4 && !flag3)
    4296            {
    4297                this.aoLightValueScratchXYZPNN = this.aoLightValueScratchXYPN;
    4298                this.aoBrightnessXYZPNN = this.aoBrightnessXYPN;
    4299            }
    4300            else
    4301            {
    4302                this.aoLightValueScratchXYZPNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4 - 1);
    4303                this.aoBrightnessXYZPNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4 - 1);
    4304            }
    4305
    4306            if (!flag5 && !flag3)
    4307            {
    4308                this.aoLightValueScratchXYZPNP = this.aoLightValueScratchXYPN;
    4309                this.aoBrightnessXYZPNP = this.aoBrightnessXYPN;
    4310            }
    4311            else
    4312            {
    4313                this.aoLightValueScratchXYZPNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4 + 1);
    4314                this.aoBrightnessXYZPNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4 + 1);
    4315            }
    4316
    4317            if (this.renderMinY <= 0.0D)
    4318            {
    4319                ++par3;
    4320            }
    4321
    4322            i1 = l;
    4323
    4324            if (this.renderMinY <= 0.0D || !this.blockAccess.isBlockOpaqueCube(par2, par3 - 1, par4))
    4325            {
    4326                i1 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4);
    4327            }
    4328
    4329            f7 = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4);
    4330            f3 = (this.aoLightValueScratchXYZNNP + this.aoLightValueScratchXYNN + this.aoLightValueScratchYZNP + f7) / 4.0F;
    4331            f6 = (this.aoLightValueScratchYZNP + f7 + this.aoLightValueScratchXYZPNP + this.aoLightValueScratchXYPN) / 4.0F;
    4332            f5 = (f7 + this.aoLightValueScratchYZNN + this.aoLightValueScratchXYPN + this.aoLightValueScratchXYZPNN) / 4.0F;
    4333            f4 = (this.aoLightValueScratchXYNN + this.aoLightValueScratchXYZNNN + f7 + this.aoLightValueScratchYZNN) / 4.0F;
    4334            this.brightnessTopLeft = this.getAoBrightness(this.aoBrightnessXYZNNP, this.aoBrightnessXYNN, this.aoBrightnessYZNP, i1);
    4335            this.brightnessTopRight = this.getAoBrightness(this.aoBrightnessYZNP, this.aoBrightnessXYZPNP, this.aoBrightnessXYPN, i1);
    4336            this.brightnessBottomRight = this.getAoBrightness(this.aoBrightnessYZNN, this.aoBrightnessXYPN, this.aoBrightnessXYZPNN, i1);
    4337            this.brightnessBottomLeft = this.getAoBrightness(this.aoBrightnessXYNN, this.aoBrightnessXYZNNN, this.aoBrightnessYZNN, i1);
    4338
    4339            if (flag1)
    4340            {
    4341                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = par5 * 0.5F;
    4342                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = par6 * 0.5F;
    4343                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = par7 * 0.5F;
    4344            }
    4345            else
    4346            {
    4347                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.5F;
    4348                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.5F;
    4349                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.5F;
    4350            }
    4351
    4352            this.colorRedTopLeft *= f3;
    4353            this.colorGreenTopLeft *= f3;
    4354            this.colorBlueTopLeft *= f3;
    4355            this.colorRedBottomLeft *= f4;
    4356            this.colorGreenBottomLeft *= f4;
    4357            this.colorBlueBottomLeft *= f4;
    4358            this.colorRedBottomRight *= f5;
    4359            this.colorGreenBottomRight *= f5;
    4360            this.colorBlueBottomRight *= f5;
    4361            this.colorRedTopRight *= f6;
    4362            this.colorGreenTopRight *= f6;
    4363            this.colorBlueTopRight *= f6;
    4364            this.renderBottomFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 0));
    4365            flag = true;
    4366        }
    4367
    4368        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3 + 1, par4, 1))
    4369        {
    4370            if (this.renderMaxY >= 1.0D)
    4371            {
    4372                ++par3;
    4373            }
    4374
    4375            this.aoBrightnessXYNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4);
    4376            this.aoBrightnessXYPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4);
    4377            this.aoBrightnessYZPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 - 1);
    4378            this.aoBrightnessYZPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 + 1);
    4379            this.aoLightValueScratchXYNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4);
    4380            this.aoLightValueScratchXYPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4);
    4381            this.aoLightValueScratchYZPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 - 1);
    4382            this.aoLightValueScratchYZPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 + 1);
    4383            flag3 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 + 1, par3 + 1, par4)];
    4384            flag2 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 - 1, par3 + 1, par4)];
    4385            flag5 = Block.canBlockGrass[this.blockAccess.getBlockId(par2, par3 + 1, par4 + 1)];
    4386            flag4 = Block.canBlockGrass[this.blockAccess.getBlockId(par2, par3 + 1, par4 - 1)];
    4387
    4388            if (!flag4 && !flag2)
    4389            {
    4390                this.aoLightValueScratchXYZNPN = this.aoLightValueScratchXYNP;
    4391                this.aoBrightnessXYZNPN = this.aoBrightnessXYNP;
    4392            }
    4393            else
    4394            {
    4395                this.aoLightValueScratchXYZNPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4 - 1);
    4396                this.aoBrightnessXYZNPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4 - 1);
    4397            }
    4398
    4399            if (!flag4 && !flag3)
    4400            {
    4401                this.aoLightValueScratchXYZPPN = this.aoLightValueScratchXYPP;
    4402                this.aoBrightnessXYZPPN = this.aoBrightnessXYPP;
    4403            }
    4404            else
    4405            {
    4406                this.aoLightValueScratchXYZPPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4 - 1);
    4407                this.aoBrightnessXYZPPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4 - 1);
    4408            }
    4409
    4410            if (!flag5 && !flag2)
    4411            {
    4412                this.aoLightValueScratchXYZNPP = this.aoLightValueScratchXYNP;
    4413                this.aoBrightnessXYZNPP = this.aoBrightnessXYNP;
    4414            }
    4415            else
    4416            {
    4417                this.aoLightValueScratchXYZNPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4 + 1);
    4418                this.aoBrightnessXYZNPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4 + 1);
    4419            }
    4420
    4421            if (!flag5 && !flag3)
    4422            {
    4423                this.aoLightValueScratchXYZPPP = this.aoLightValueScratchXYPP;
    4424                this.aoBrightnessXYZPPP = this.aoBrightnessXYPP;
    4425            }
    4426            else
    4427            {
    4428                this.aoLightValueScratchXYZPPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4 + 1);
    4429                this.aoBrightnessXYZPPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4 + 1);
    4430            }
    4431
    4432            if (this.renderMaxY >= 1.0D)
    4433            {
    4434                --par3;
    4435            }
    4436
    4437            i1 = l;
    4438
    4439            if (this.renderMaxY >= 1.0D || !this.blockAccess.isBlockOpaqueCube(par2, par3 + 1, par4))
    4440            {
    4441                i1 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4);
    4442            }
    4443
    4444            f7 = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4);
    4445            f6 = (this.aoLightValueScratchXYZNPP + this.aoLightValueScratchXYNP + this.aoLightValueScratchYZPP + f7) / 4.0F;
    4446            f3 = (this.aoLightValueScratchYZPP + f7 + this.aoLightValueScratchXYZPPP + this.aoLightValueScratchXYPP) / 4.0F;
    4447            f4 = (f7 + this.aoLightValueScratchYZPN + this.aoLightValueScratchXYPP + this.aoLightValueScratchXYZPPN) / 4.0F;
    4448            f5 = (this.aoLightValueScratchXYNP + this.aoLightValueScratchXYZNPN + f7 + this.aoLightValueScratchYZPN) / 4.0F;
    4449            this.brightnessTopRight = this.getAoBrightness(this.aoBrightnessXYZNPP, this.aoBrightnessXYNP, this.aoBrightnessYZPP, i1);
    4450            this.brightnessTopLeft = this.getAoBrightness(this.aoBrightnessYZPP, this.aoBrightnessXYZPPP, this.aoBrightnessXYPP, i1);
    4451            this.brightnessBottomLeft = this.getAoBrightness(this.aoBrightnessYZPN, this.aoBrightnessXYPP, this.aoBrightnessXYZPPN, i1);
    4452            this.brightnessBottomRight = this.getAoBrightness(this.aoBrightnessXYNP, this.aoBrightnessXYZNPN, this.aoBrightnessYZPN, i1);
    4453            this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = par5;
    4454            this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = par6;
    4455            this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = par7;
    4456            this.colorRedTopLeft *= f3;
    4457            this.colorGreenTopLeft *= f3;
    4458            this.colorBlueTopLeft *= f3;
    4459            this.colorRedBottomLeft *= f4;
    4460            this.colorGreenBottomLeft *= f4;
    4461            this.colorBlueBottomLeft *= f4;
    4462            this.colorRedBottomRight *= f5;
    4463            this.colorGreenBottomRight *= f5;
    4464            this.colorBlueBottomRight *= f5;
    4465            this.colorRedTopRight *= f6;
    4466            this.colorGreenTopRight *= f6;
    4467            this.colorBlueTopRight *= f6;
    4468            this.renderTopFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 1));
    4469            flag = true;
    4470        }
    4471
    4472        Icon icon;
    4473
    4474        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3, par4 - 1, 2))
    4475        {
    4476            if (this.renderMinZ <= 0.0D)
    4477            {
    4478                --par4;
    4479            }
    4480
    4481            this.aoLightValueScratchXZNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4);
    4482            this.aoLightValueScratchYZNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4);
    4483            this.aoLightValueScratchYZPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4);
    4484            this.aoLightValueScratchXZPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4);
    4485            this.aoBrightnessXZNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4);
    4486            this.aoBrightnessYZNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4);
    4487            this.aoBrightnessYZPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4);
    4488            this.aoBrightnessXZPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4);
    4489            flag3 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 + 1, par3, par4 - 1)];
    4490            flag2 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 - 1, par3, par4 - 1)];
    4491            flag5 = Block.canBlockGrass[this.blockAccess.getBlockId(par2, par3 + 1, par4 - 1)];
    4492            flag4 = Block.canBlockGrass[this.blockAccess.getBlockId(par2, par3 - 1, par4 - 1)];
    4493
    4494            if (!flag2 && !flag4)
    4495            {
    4496                this.aoLightValueScratchXYZNNN = this.aoLightValueScratchXZNN;
    4497                this.aoBrightnessXYZNNN = this.aoBrightnessXZNN;
    4498            }
    4499            else
    4500            {
    4501                this.aoLightValueScratchXYZNNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3 - 1, par4);
    4502                this.aoBrightnessXYZNNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3 - 1, par4);
    4503            }
    4504
    4505            if (!flag2 && !flag5)
    4506            {
    4507                this.aoLightValueScratchXYZNPN = this.aoLightValueScratchXZNN;
    4508                this.aoBrightnessXYZNPN = this.aoBrightnessXZNN;
    4509            }
    4510            else
    4511            {
    4512                this.aoLightValueScratchXYZNPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3 + 1, par4);
    4513                this.aoBrightnessXYZNPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3 + 1, par4);
    4514            }
    4515
    4516            if (!flag3 && !flag4)
    4517            {
    4518                this.aoLightValueScratchXYZPNN = this.aoLightValueScratchXZPN;
    4519                this.aoBrightnessXYZPNN = this.aoBrightnessXZPN;
    4520            }
    4521            else
    4522            {
    4523                this.aoLightValueScratchXYZPNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3 - 1, par4);
    4524                this.aoBrightnessXYZPNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3 - 1, par4);
    4525            }
    4526
    4527            if (!flag3 && !flag5)
    4528            {
    4529                this.aoLightValueScratchXYZPPN = this.aoLightValueScratchXZPN;
    4530                this.aoBrightnessXYZPPN = this.aoBrightnessXZPN;
    4531            }
    4532            else
    4533            {
    4534                this.aoLightValueScratchXYZPPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3 + 1, par4);
    4535                this.aoBrightnessXYZPPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3 + 1, par4);
    4536            }
    4537
    4538            if (this.renderMinZ <= 0.0D)
    4539            {
    4540                ++par4;
    4541            }
    4542
    4543            i1 = l;
    4544
    4545            if (this.renderMinZ <= 0.0D || !this.blockAccess.isBlockOpaqueCube(par2, par3, par4 - 1))
    4546            {
    4547                i1 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 - 1);
    4548            }
    4549
    4550            f7 = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 - 1);
    4551            f3 = (this.aoLightValueScratchXZNN + this.aoLightValueScratchXYZNPN + f7 + this.aoLightValueScratchYZPN) / 4.0F;
    4552            f4 = (f7 + this.aoLightValueScratchYZPN + this.aoLightValueScratchXZPN + this.aoLightValueScratchXYZPPN) / 4.0F;
    4553            f5 = (this.aoLightValueScratchYZNN + f7 + this.aoLightValueScratchXYZPNN + this.aoLightValueScratchXZPN) / 4.0F;
    4554            f6 = (this.aoLightValueScratchXYZNNN + this.aoLightValueScratchXZNN + this.aoLightValueScratchYZNN + f7) / 4.0F;
    4555            this.brightnessTopLeft = this.getAoBrightness(this.aoBrightnessXZNN, this.aoBrightnessXYZNPN, this.aoBrightnessYZPN, i1);
    4556            this.brightnessBottomLeft = this.getAoBrightness(this.aoBrightnessYZPN, this.aoBrightnessXZPN, this.aoBrightnessXYZPPN, i1);
    4557            this.brightnessBottomRight = this.getAoBrightness(this.aoBrightnessYZNN, this.aoBrightnessXYZPNN, this.aoBrightnessXZPN, i1);
    4558            this.brightnessTopRight = this.getAoBrightness(this.aoBrightnessXYZNNN, this.aoBrightnessXZNN, this.aoBrightnessYZNN, i1);
    4559
    4560            if (flag1)
    4561            {
    4562                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = par5 * 0.8F;
    4563                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = par6 * 0.8F;
    4564                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = par7 * 0.8F;
    4565            }
    4566            else
    4567            {
    4568                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.8F;
    4569                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.8F;
    4570                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.8F;
    4571            }
    4572
    4573            this.colorRedTopLeft *= f3;
    4574            this.colorGreenTopLeft *= f3;
    4575            this.colorBlueTopLeft *= f3;
    4576            this.colorRedBottomLeft *= f4;
    4577            this.colorGreenBottomLeft *= f4;
    4578            this.colorBlueBottomLeft *= f4;
    4579            this.colorRedBottomRight *= f5;
    4580            this.colorGreenBottomRight *= f5;
    4581            this.colorBlueBottomRight *= f5;
    4582            this.colorRedTopRight *= f6;
    4583            this.colorGreenTopRight *= f6;
    4584            this.colorBlueTopRight *= f6;
    4585            icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 2);
    4586            this.renderEastFace(par1Block, (double)par2, (double)par3, (double)par4, icon);
    4587
    4588            if (fancyGrass && icon.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture())
    4589            {
    4590                this.colorRedTopLeft *= par5;
    4591                this.colorRedBottomLeft *= par5;
    4592                this.colorRedBottomRight *= par5;
    4593                this.colorRedTopRight *= par5;
    4594                this.colorGreenTopLeft *= par6;
    4595                this.colorGreenBottomLeft *= par6;
    4596                this.colorGreenBottomRight *= par6;
    4597                this.colorGreenTopRight *= par6;
    4598                this.colorBlueTopLeft *= par7;
    4599                this.colorBlueBottomLeft *= par7;
    4600                this.colorBlueBottomRight *= par7;
    4601                this.colorBlueTopRight *= par7;
    4602                this.renderEastFace(par1Block, (double)par2, (double)par3, (double)par4, BlockGrass.getIconSideOverlay());
    4603            }
    4604
    4605            flag = true;
    4606        }
    4607
    4608        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3, par4 + 1, 3))
    4609        {
    4610            if (this.renderMaxZ >= 1.0D)
    4611            {
    4612                ++par4;
    4613            }
    4614
    4615            this.aoLightValueScratchXZNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4);
    4616            this.aoLightValueScratchXZPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4);
    4617            this.aoLightValueScratchYZNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4);
    4618            this.aoLightValueScratchYZPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4);
    4619            this.aoBrightnessXZNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4);
    4620            this.aoBrightnessXZPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4);
    4621            this.aoBrightnessYZNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4);
    4622            this.aoBrightnessYZPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4);
    4623            flag3 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 + 1, par3, par4 + 1)];
    4624            flag2 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 - 1, par3, par4 + 1)];
    4625            flag5 = Block.canBlockGrass[this.blockAccess.getBlockId(par2, par3 + 1, par4 + 1)];
    4626            flag4 = Block.canBlockGrass[this.blockAccess.getBlockId(par2, par3 - 1, par4 + 1)];
    4627
    4628            if (!flag2 && !flag4)
    4629            {
    4630                this.aoLightValueScratchXYZNNP = this.aoLightValueScratchXZNP;
    4631                this.aoBrightnessXYZNNP = this.aoBrightnessXZNP;
    4632            }
    4633            else
    4634            {
    4635                this.aoLightValueScratchXYZNNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3 - 1, par4);
    4636                this.aoBrightnessXYZNNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3 - 1, par4);
    4637            }
    4638
    4639            if (!flag2 && !flag5)
    4640            {
    4641                this.aoLightValueScratchXYZNPP = this.aoLightValueScratchXZNP;
    4642                this.aoBrightnessXYZNPP = this.aoBrightnessXZNP;
    4643            }
    4644            else
    4645            {
    4646                this.aoLightValueScratchXYZNPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3 + 1, par4);
    4647                this.aoBrightnessXYZNPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3 + 1, par4);
    4648            }
    4649
    4650            if (!flag3 && !flag4)
    4651            {
    4652                this.aoLightValueScratchXYZPNP = this.aoLightValueScratchXZPP;
    4653                this.aoBrightnessXYZPNP = this.aoBrightnessXZPP;
    4654            }
    4655            else
    4656            {
    4657                this.aoLightValueScratchXYZPNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3 - 1, par4);
    4658                this.aoBrightnessXYZPNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3 - 1, par4);
    4659            }
    4660
    4661            if (!flag3 && !flag5)
    4662            {
    4663                this.aoLightValueScratchXYZPPP = this.aoLightValueScratchXZPP;
    4664                this.aoBrightnessXYZPPP = this.aoBrightnessXZPP;
    4665            }
    4666            else
    4667            {
    4668                this.aoLightValueScratchXYZPPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3 + 1, par4);
    4669                this.aoBrightnessXYZPPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3 + 1, par4);
    4670            }
    4671
    4672            if (this.renderMaxZ >= 1.0D)
    4673            {
    4674                --par4;
    4675            }
    4676
    4677            i1 = l;
    4678
    4679            if (this.renderMaxZ >= 1.0D || !this.blockAccess.isBlockOpaqueCube(par2, par3, par4 + 1))
    4680            {
    4681                i1 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 + 1);
    4682            }
    4683
    4684            f7 = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 + 1);
    4685            f3 = (this.aoLightValueScratchXZNP + this.aoLightValueScratchXYZNPP + f7 + this.aoLightValueScratchYZPP) / 4.0F;
    4686            f6 = (f7 + this.aoLightValueScratchYZPP + this.aoLightValueScratchXZPP + this.aoLightValueScratchXYZPPP) / 4.0F;
    4687            f5 = (this.aoLightValueScratchYZNP + f7 + this.aoLightValueScratchXYZPNP + this.aoLightValueScratchXZPP) / 4.0F;
    4688            f4 = (this.aoLightValueScratchXYZNNP + this.aoLightValueScratchXZNP + this.aoLightValueScratchYZNP + f7) / 4.0F;
    4689            this.brightnessTopLeft = this.getAoBrightness(this.aoBrightnessXZNP, this.aoBrightnessXYZNPP, this.aoBrightnessYZPP, i1);
    4690            this.brightnessTopRight = this.getAoBrightness(this.aoBrightnessYZPP, this.aoBrightnessXZPP, this.aoBrightnessXYZPPP, i1);
    4691            this.brightnessBottomRight = this.getAoBrightness(this.aoBrightnessYZNP, this.aoBrightnessXYZPNP, this.aoBrightnessXZPP, i1);
    4692            this.brightnessBottomLeft = this.getAoBrightness(this.aoBrightnessXYZNNP, this.aoBrightnessXZNP, this.aoBrightnessYZNP, i1);
    4693
    4694            if (flag1)
    4695            {
    4696                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = par5 * 0.8F;
    4697                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = par6 * 0.8F;
    4698                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = par7 * 0.8F;
    4699            }
    4700            else
    4701            {
    4702                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.8F;
    4703                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.8F;
    4704                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.8F;
    4705            }
    4706
    4707            this.colorRedTopLeft *= f3;
    4708            this.colorGreenTopLeft *= f3;
    4709            this.colorBlueTopLeft *= f3;
    4710            this.colorRedBottomLeft *= f4;
    4711            this.colorGreenBottomLeft *= f4;
    4712            this.colorBlueBottomLeft *= f4;
    4713            this.colorRedBottomRight *= f5;
    4714            this.colorGreenBottomRight *= f5;
    4715            this.colorBlueBottomRight *= f5;
    4716            this.colorRedTopRight *= f6;
    4717            this.colorGreenTopRight *= f6;
    4718            this.colorBlueTopRight *= f6;
    4719            icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 3);
    4720            this.renderWestFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 3));
    4721
    4722            if (fancyGrass && icon.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture())
    4723            {
    4724                this.colorRedTopLeft *= par5;
    4725                this.colorRedBottomLeft *= par5;
    4726                this.colorRedBottomRight *= par5;
    4727                this.colorRedTopRight *= par5;
    4728                this.colorGreenTopLeft *= par6;
    4729                this.colorGreenBottomLeft *= par6;
    4730                this.colorGreenBottomRight *= par6;
    4731                this.colorGreenTopRight *= par6;
    4732                this.colorBlueTopLeft *= par7;
    4733                this.colorBlueBottomLeft *= par7;
    4734                this.colorBlueBottomRight *= par7;
    4735                this.colorBlueTopRight *= par7;
    4736                this.renderWestFace(par1Block, (double)par2, (double)par3, (double)par4, BlockGrass.getIconSideOverlay());
    4737            }
    4738
    4739            flag = true;
    4740        }
    4741
    4742        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2 - 1, par3, par4, 4))
    4743        {
    4744            if (this.renderMinX <= 0.0D)
    4745            {
    4746                --par2;
    4747            }
    4748
    4749            this.aoLightValueScratchXYNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4);
    4750            this.aoLightValueScratchXZNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 - 1);
    4751            this.aoLightValueScratchXZNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 + 1);
    4752            this.aoLightValueScratchXYNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4);
    4753            this.aoBrightnessXYNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4);
    4754            this.aoBrightnessXZNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 - 1);
    4755            this.aoBrightnessXZNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 + 1);
    4756            this.aoBrightnessXYNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4);
    4757            flag3 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 - 1, par3 + 1, par4)];
    4758            flag2 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 - 1, par3 - 1, par4)];
    4759            flag5 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 - 1, par3, par4 - 1)];
    4760            flag4 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 - 1, par3, par4 + 1)];
    4761
    4762            if (!flag5 && !flag2)
    4763            {
    4764                this.aoLightValueScratchXYZNNN = this.aoLightValueScratchXZNN;
    4765                this.aoBrightnessXYZNNN = this.aoBrightnessXZNN;
    4766            }
    4767            else
    4768            {
    4769                this.aoLightValueScratchXYZNNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4 - 1);
    4770                this.aoBrightnessXYZNNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4 - 1);
    4771            }
    4772
    4773            if (!flag4 && !flag2)
    4774            {
    4775                this.aoLightValueScratchXYZNNP = this.aoLightValueScratchXZNP;
    4776                this.aoBrightnessXYZNNP = this.aoBrightnessXZNP;
    4777            }
    4778            else
    4779            {
    4780                this.aoLightValueScratchXYZNNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4 + 1);
    4781                this.aoBrightnessXYZNNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4 + 1);
    4782            }
    4783
    4784            if (!flag5 && !flag3)
    4785            {
    4786                this.aoLightValueScratchXYZNPN = this.aoLightValueScratchXZNN;
    4787                this.aoBrightnessXYZNPN = this.aoBrightnessXZNN;
    4788            }
    4789            else
    4790            {
    4791                this.aoLightValueScratchXYZNPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4 - 1);
    4792                this.aoBrightnessXYZNPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4 - 1);
    4793            }
    4794
    4795            if (!flag4 && !flag3)
    4796            {
    4797                this.aoLightValueScratchXYZNPP = this.aoLightValueScratchXZNP;
    4798                this.aoBrightnessXYZNPP = this.aoBrightnessXZNP;
    4799            }
    4800            else
    4801            {
    4802                this.aoLightValueScratchXYZNPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4 + 1);
    4803                this.aoBrightnessXYZNPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4 + 1);
    4804            }
    4805
    4806            if (this.renderMinX <= 0.0D)
    4807            {
    4808                ++par2;
    4809            }
    4810
    4811            i1 = l;
    4812
    4813            if (this.renderMinX <= 0.0D || !this.blockAccess.isBlockOpaqueCube(par2 - 1, par3, par4))
    4814            {
    4815                i1 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4);
    4816            }
    4817
    4818            f7 = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4);
    4819            f6 = (this.aoLightValueScratchXYNN + this.aoLightValueScratchXYZNNP + f7 + this.aoLightValueScratchXZNP) / 4.0F;
    4820            f3 = (f7 + this.aoLightValueScratchXZNP + this.aoLightValueScratchXYNP + this.aoLightValueScratchXYZNPP) / 4.0F;
    4821            f4 = (this.aoLightValueScratchXZNN + f7 + this.aoLightValueScratchXYZNPN + this.aoLightValueScratchXYNP) / 4.0F;
    4822            f5 = (this.aoLightValueScratchXYZNNN + this.aoLightValueScratchXYNN + this.aoLightValueScratchXZNN + f7) / 4.0F;
    4823            this.brightnessTopRight = this.getAoBrightness(this.aoBrightnessXYNN, this.aoBrightnessXYZNNP, this.aoBrightnessXZNP, i1);
    4824            this.brightnessTopLeft = this.getAoBrightness(this.aoBrightnessXZNP, this.aoBrightnessXYNP, this.aoBrightnessXYZNPP, i1);
    4825            this.brightnessBottomLeft = this.getAoBrightness(this.aoBrightnessXZNN, this.aoBrightnessXYZNPN, this.aoBrightnessXYNP, i1);
    4826            this.brightnessBottomRight = this.getAoBrightness(this.aoBrightnessXYZNNN, this.aoBrightnessXYNN, this.aoBrightnessXZNN, i1);
    4827
    4828            if (flag1)
    4829            {
    4830                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = par5 * 0.6F;
    4831                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = par6 * 0.6F;
    4832                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = par7 * 0.6F;
    4833            }
    4834            else
    4835            {
    4836                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.6F;
    4837                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.6F;
    4838                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.6F;
    4839            }
    4840
    4841            this.colorRedTopLeft *= f3;
    4842            this.colorGreenTopLeft *= f3;
    4843            this.colorBlueTopLeft *= f3;
    4844            this.colorRedBottomLeft *= f4;
    4845            this.colorGreenBottomLeft *= f4;
    4846            this.colorBlueBottomLeft *= f4;
    4847            this.colorRedBottomRight *= f5;
    4848            this.colorGreenBottomRight *= f5;
    4849            this.colorBlueBottomRight *= f5;
    4850            this.colorRedTopRight *= f6;
    4851            this.colorGreenTopRight *= f6;
    4852            this.colorBlueTopRight *= f6;
    4853            icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 4);
    4854            this.renderNorthFace(par1Block, (double)par2, (double)par3, (double)par4, icon);
    4855
    4856            if (fancyGrass && icon.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture())
    4857            {
    4858                this.colorRedTopLeft *= par5;
    4859                this.colorRedBottomLeft *= par5;
    4860                this.colorRedBottomRight *= par5;
    4861                this.colorRedTopRight *= par5;
    4862                this.colorGreenTopLeft *= par6;
    4863                this.colorGreenBottomLeft *= par6;
    4864                this.colorGreenBottomRight *= par6;
    4865                this.colorGreenTopRight *= par6;
    4866                this.colorBlueTopLeft *= par7;
    4867                this.colorBlueBottomLeft *= par7;
    4868                this.colorBlueBottomRight *= par7;
    4869                this.colorBlueTopRight *= par7;
    4870                this.renderNorthFace(par1Block, (double)par2, (double)par3, (double)par4, BlockGrass.getIconSideOverlay());
    4871            }
    4872
    4873            flag = true;
    4874        }
    4875
    4876        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2 + 1, par3, par4, 5))
    4877        {
    4878            if (this.renderMaxX >= 1.0D)
    4879            {
    4880                ++par2;
    4881            }
    4882
    4883            this.aoLightValueScratchXYPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4);
    4884            this.aoLightValueScratchXZPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 - 1);
    4885            this.aoLightValueScratchXZPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 + 1);
    4886            this.aoLightValueScratchXYPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4);
    4887            this.aoBrightnessXYPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4);
    4888            this.aoBrightnessXZPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 - 1);
    4889            this.aoBrightnessXZPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 + 1);
    4890            this.aoBrightnessXYPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4);
    4891            flag3 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 + 1, par3 + 1, par4)];
    4892            flag2 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 + 1, par3 - 1, par4)];
    4893            flag5 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 + 1, par3, par4 + 1)];
    4894            flag4 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 + 1, par3, par4 - 1)];
    4895
    4896            if (!flag2 && !flag4)
    4897            {
    4898                this.aoLightValueScratchXYZPNN = this.aoLightValueScratchXZPN;
    4899                this.aoBrightnessXYZPNN = this.aoBrightnessXZPN;
    4900            }
    4901            else
    4902            {
    4903                this.aoLightValueScratchXYZPNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4 - 1);
    4904                this.aoBrightnessXYZPNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4 - 1);
    4905            }
    4906
    4907            if (!flag2 && !flag5)
    4908            {
    4909                this.aoLightValueScratchXYZPNP = this.aoLightValueScratchXZPP;
    4910                this.aoBrightnessXYZPNP = this.aoBrightnessXZPP;
    4911            }
    4912            else
    4913            {
    4914                this.aoLightValueScratchXYZPNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4 + 1);
    4915                this.aoBrightnessXYZPNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4 + 1);
    4916            }
    4917
    4918            if (!flag3 && !flag4)
    4919            {
    4920                this.aoLightValueScratchXYZPPN = this.aoLightValueScratchXZPN;
    4921                this.aoBrightnessXYZPPN = this.aoBrightnessXZPN;
    4922            }
    4923            else
    4924            {
    4925                this.aoLightValueScratchXYZPPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4 - 1);
    4926                this.aoBrightnessXYZPPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4 - 1);
    4927            }
    4928
    4929            if (!flag3 && !flag5)
    4930            {
    4931                this.aoLightValueScratchXYZPPP = this.aoLightValueScratchXZPP;
    4932                this.aoBrightnessXYZPPP = this.aoBrightnessXZPP;
    4933            }
    4934            else
    4935            {
    4936                this.aoLightValueScratchXYZPPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4 + 1);
    4937                this.aoBrightnessXYZPPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4 + 1);
    4938            }
    4939
    4940            if (this.renderMaxX >= 1.0D)
    4941            {
    4942                --par2;
    4943            }
    4944
    4945            i1 = l;
    4946
    4947            if (this.renderMaxX >= 1.0D || !this.blockAccess.isBlockOpaqueCube(par2 + 1, par3, par4))
    4948            {
    4949                i1 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4);
    4950            }
    4951
    4952            f7 = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4);
    4953            f3 = (this.aoLightValueScratchXYPN + this.aoLightValueScratchXYZPNP + f7 + this.aoLightValueScratchXZPP) / 4.0F;
    4954            f4 = (this.aoLightValueScratchXYZPNN + this.aoLightValueScratchXYPN + this.aoLightValueScratchXZPN + f7) / 4.0F;
    4955            f5 = (this.aoLightValueScratchXZPN + f7 + this.aoLightValueScratchXYZPPN + this.aoLightValueScratchXYPP) / 4.0F;
    4956            f6 = (f7 + this.aoLightValueScratchXZPP + this.aoLightValueScratchXYPP + this.aoLightValueScratchXYZPPP) / 4.0F;
    4957            this.brightnessTopLeft = this.getAoBrightness(this.aoBrightnessXYPN, this.aoBrightnessXYZPNP, this.aoBrightnessXZPP, i1);
    4958            this.brightnessTopRight = this.getAoBrightness(this.aoBrightnessXZPP, this.aoBrightnessXYPP, this.aoBrightnessXYZPPP, i1);
    4959            this.brightnessBottomRight = this.getAoBrightness(this.aoBrightnessXZPN, this.aoBrightnessXYZPPN, this.aoBrightnessXYPP, i1);
    4960            this.brightnessBottomLeft = this.getAoBrightness(this.aoBrightnessXYZPNN, this.aoBrightnessXYPN, this.aoBrightnessXZPN, i1);
    4961
    4962            if (flag1)
    4963            {
    4964                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = par5 * 0.6F;
    4965                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = par6 * 0.6F;
    4966                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = par7 * 0.6F;
    4967            }
    4968            else
    4969            {
    4970                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.6F;
    4971                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.6F;
    4972                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.6F;
    4973            }
    4974
    4975            this.colorRedTopLeft *= f3;
    4976            this.colorGreenTopLeft *= f3;
    4977            this.colorBlueTopLeft *= f3;
    4978            this.colorRedBottomLeft *= f4;
    4979            this.colorGreenBottomLeft *= f4;
    4980            this.colorBlueBottomLeft *= f4;
    4981            this.colorRedBottomRight *= f5;
    4982            this.colorGreenBottomRight *= f5;
    4983            this.colorBlueBottomRight *= f5;
    4984            this.colorRedTopRight *= f6;
    4985            this.colorGreenTopRight *= f6;
    4986            this.colorBlueTopRight *= f6;
    4987            icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 5);
    4988            this.renderSouthFace(par1Block, (double)par2, (double)par3, (double)par4, icon);
    4989
    4990            if (fancyGrass && icon.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture())
    4991            {
    4992                this.colorRedTopLeft *= par5;
    4993                this.colorRedBottomLeft *= par5;
    4994                this.colorRedBottomRight *= par5;
    4995                this.colorRedTopRight *= par5;
    4996                this.colorGreenTopLeft *= par6;
    4997                this.colorGreenBottomLeft *= par6;
    4998                this.colorGreenBottomRight *= par6;
    4999                this.colorGreenTopRight *= par6;
    5000                this.colorBlueTopLeft *= par7;
    5001                this.colorBlueBottomLeft *= par7;
    5002                this.colorBlueBottomRight *= par7;
    5003                this.colorBlueTopRight *= par7;
    5004                this.renderSouthFace(par1Block, (double)par2, (double)par3, (double)par4, BlockGrass.getIconSideOverlay());
    5005            }
    5006
    5007            flag = true;
    5008        }
    5009
    5010        this.enableAO = false;
    5011        return flag;
    5012    }
    5013
    5014    public boolean func_102027_b(Block par1Block, int par2, int par3, int par4, float par5, float par6, float par7)
    5015    {
    5016        this.enableAO = true;
    5017        boolean flag = false;
    5018        float f3 = 0.0F;
    5019        float f4 = 0.0F;
    5020        float f5 = 0.0F;
    5021        float f6 = 0.0F;
    5022        boolean flag1 = true;
    5023        int l = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4);
    5024        Tessellator tessellator = Tessellator.instance;
    5025        tessellator.setBrightness(983055);
    5026
    5027        if (this.getBlockIcon(par1Block).getIconName().equals("grass_top"))
    5028        {
    5029            flag1 = false;
    5030        }
    5031        else if (this.hasOverrideBlockTexture())
    5032        {
    5033            flag1 = false;
    5034        }
    5035
    5036        boolean flag2;
    5037        boolean flag3;
    5038        boolean flag4;
    5039        boolean flag5;
    5040        float f7;
    5041        int i1;
    5042
    5043        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3 - 1, par4, 0))
    5044        {
    5045            if (this.renderMinY <= 0.0D)
    5046            {
    5047                --par3;
    5048            }
    5049
    5050            this.aoBrightnessXYNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4);
    5051            this.aoBrightnessYZNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 - 1);
    5052            this.aoBrightnessYZNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 + 1);
    5053            this.aoBrightnessXYPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4);
    5054            this.aoLightValueScratchXYNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4);
    5055            this.aoLightValueScratchYZNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 - 1);
    5056            this.aoLightValueScratchYZNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 + 1);
    5057            this.aoLightValueScratchXYPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4);
    5058            flag3 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 + 1, par3 - 1, par4)];
    5059            flag2 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 - 1, par3 - 1, par4)];
    5060            flag5 = Block.canBlockGrass[this.blockAccess.getBlockId(par2, par3 - 1, par4 + 1)];
    5061            flag4 = Block.canBlockGrass[this.blockAccess.getBlockId(par2, par3 - 1, par4 - 1)];
    5062
    5063            if (!flag4 && !flag2)
    5064            {
    5065                this.aoLightValueScratchXYZNNN = this.aoLightValueScratchXYNN;
    5066                this.aoBrightnessXYZNNN = this.aoBrightnessXYNN;
    5067            }
    5068            else
    5069            {
    5070                this.aoLightValueScratchXYZNNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4 - 1);
    5071                this.aoBrightnessXYZNNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4 - 1);
    5072            }
    5073
    5074            if (!flag5 && !flag2)
    5075            {
    5076                this.aoLightValueScratchXYZNNP = this.aoLightValueScratchXYNN;
    5077                this.aoBrightnessXYZNNP = this.aoBrightnessXYNN;
    5078            }
    5079            else
    5080            {
    5081                this.aoLightValueScratchXYZNNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4 + 1);
    5082                this.aoBrightnessXYZNNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4 + 1);
    5083            }
    5084
    5085            if (!flag4 && !flag3)
    5086            {
    5087                this.aoLightValueScratchXYZPNN = this.aoLightValueScratchXYPN;
    5088                this.aoBrightnessXYZPNN = this.aoBrightnessXYPN;
    5089            }
    5090            else
    5091            {
    5092                this.aoLightValueScratchXYZPNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4 - 1);
    5093                this.aoBrightnessXYZPNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4 - 1);
    5094            }
    5095
    5096            if (!flag5 && !flag3)
    5097            {
    5098                this.aoLightValueScratchXYZPNP = this.aoLightValueScratchXYPN;
    5099                this.aoBrightnessXYZPNP = this.aoBrightnessXYPN;
    5100            }
    5101            else
    5102            {
    5103                this.aoLightValueScratchXYZPNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4 + 1);
    5104                this.aoBrightnessXYZPNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4 + 1);
    5105            }
    5106
    5107            if (this.renderMinY <= 0.0D)
    5108            {
    5109                ++par3;
    5110            }
    5111
    5112            i1 = l;
    5113
    5114            if (this.renderMinY <= 0.0D || !this.blockAccess.isBlockOpaqueCube(par2, par3 - 1, par4))
    5115            {
    5116                i1 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4);
    5117            }
    5118
    5119            f7 = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4);
    5120            f3 = (this.aoLightValueScratchXYZNNP + this.aoLightValueScratchXYNN + this.aoLightValueScratchYZNP + f7) / 4.0F;
    5121            f6 = (this.aoLightValueScratchYZNP + f7 + this.aoLightValueScratchXYZPNP + this.aoLightValueScratchXYPN) / 4.0F;
    5122            f5 = (f7 + this.aoLightValueScratchYZNN + this.aoLightValueScratchXYPN + this.aoLightValueScratchXYZPNN) / 4.0F;
    5123            f4 = (this.aoLightValueScratchXYNN + this.aoLightValueScratchXYZNNN + f7 + this.aoLightValueScratchYZNN) / 4.0F;
    5124            this.brightnessTopLeft = this.getAoBrightness(this.aoBrightnessXYZNNP, this.aoBrightnessXYNN, this.aoBrightnessYZNP, i1);
    5125            this.brightnessTopRight = this.getAoBrightness(this.aoBrightnessYZNP, this.aoBrightnessXYZPNP, this.aoBrightnessXYPN, i1);
    5126            this.brightnessBottomRight = this.getAoBrightness(this.aoBrightnessYZNN, this.aoBrightnessXYPN, this.aoBrightnessXYZPNN, i1);
    5127            this.brightnessBottomLeft = this.getAoBrightness(this.aoBrightnessXYNN, this.aoBrightnessXYZNNN, this.aoBrightnessYZNN, i1);
    5128
    5129            if (flag1)
    5130            {
    5131                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = par5 * 0.5F;
    5132                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = par6 * 0.5F;
    5133                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = par7 * 0.5F;
    5134            }
    5135            else
    5136            {
    5137                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.5F;
    5138                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.5F;
    5139                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.5F;
    5140            }
    5141
    5142            this.colorRedTopLeft *= f3;
    5143            this.colorGreenTopLeft *= f3;
    5144            this.colorBlueTopLeft *= f3;
    5145            this.colorRedBottomLeft *= f4;
    5146            this.colorGreenBottomLeft *= f4;
    5147            this.colorBlueBottomLeft *= f4;
    5148            this.colorRedBottomRight *= f5;
    5149            this.colorGreenBottomRight *= f5;
    5150            this.colorBlueBottomRight *= f5;
    5151            this.colorRedTopRight *= f6;
    5152            this.colorGreenTopRight *= f6;
    5153            this.colorBlueTopRight *= f6;
    5154            this.renderBottomFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 0));
    5155            flag = true;
    5156        }
    5157
    5158        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3 + 1, par4, 1))
    5159        {
    5160            if (this.renderMaxY >= 1.0D)
    5161            {
    5162                ++par3;
    5163            }
    5164
    5165            this.aoBrightnessXYNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4);
    5166            this.aoBrightnessXYPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4);
    5167            this.aoBrightnessYZPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 - 1);
    5168            this.aoBrightnessYZPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 + 1);
    5169            this.aoLightValueScratchXYNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4);
    5170            this.aoLightValueScratchXYPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4);
    5171            this.aoLightValueScratchYZPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 - 1);
    5172            this.aoLightValueScratchYZPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 + 1);
    5173            flag3 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 + 1, par3 + 1, par4)];
    5174            flag2 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 - 1, par3 + 1, par4)];
    5175            flag5 = Block.canBlockGrass[this.blockAccess.getBlockId(par2, par3 + 1, par4 + 1)];
    5176            flag4 = Block.canBlockGrass[this.blockAccess.getBlockId(par2, par3 + 1, par4 - 1)];
    5177
    5178            if (!flag4 && !flag2)
    5179            {
    5180                this.aoLightValueScratchXYZNPN = this.aoLightValueScratchXYNP;
    5181                this.aoBrightnessXYZNPN = this.aoBrightnessXYNP;
    5182            }
    5183            else
    5184            {
    5185                this.aoLightValueScratchXYZNPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4 - 1);
    5186                this.aoBrightnessXYZNPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4 - 1);
    5187            }
    5188
    5189            if (!flag4 && !flag3)
    5190            {
    5191                this.aoLightValueScratchXYZPPN = this.aoLightValueScratchXYPP;
    5192                this.aoBrightnessXYZPPN = this.aoBrightnessXYPP;
    5193            }
    5194            else
    5195            {
    5196                this.aoLightValueScratchXYZPPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4 - 1);
    5197                this.aoBrightnessXYZPPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4 - 1);
    5198            }
    5199
    5200            if (!flag5 && !flag2)
    5201            {
    5202                this.aoLightValueScratchXYZNPP = this.aoLightValueScratchXYNP;
    5203                this.aoBrightnessXYZNPP = this.aoBrightnessXYNP;
    5204            }
    5205            else
    5206            {
    5207                this.aoLightValueScratchXYZNPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4 + 1);
    5208                this.aoBrightnessXYZNPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4 + 1);
    5209            }
    5210
    5211            if (!flag5 && !flag3)
    5212            {
    5213                this.aoLightValueScratchXYZPPP = this.aoLightValueScratchXYPP;
    5214                this.aoBrightnessXYZPPP = this.aoBrightnessXYPP;
    5215            }
    5216            else
    5217            {
    5218                this.aoLightValueScratchXYZPPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4 + 1);
    5219                this.aoBrightnessXYZPPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4 + 1);
    5220            }
    5221
    5222            if (this.renderMaxY >= 1.0D)
    5223            {
    5224                --par3;
    5225            }
    5226
    5227            i1 = l;
    5228
    5229            if (this.renderMaxY >= 1.0D || !this.blockAccess.isBlockOpaqueCube(par2, par3 + 1, par4))
    5230            {
    5231                i1 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4);
    5232            }
    5233
    5234            f7 = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4);
    5235            f6 = (this.aoLightValueScratchXYZNPP + this.aoLightValueScratchXYNP + this.aoLightValueScratchYZPP + f7) / 4.0F;
    5236            f3 = (this.aoLightValueScratchYZPP + f7 + this.aoLightValueScratchXYZPPP + this.aoLightValueScratchXYPP) / 4.0F;
    5237            f4 = (f7 + this.aoLightValueScratchYZPN + this.aoLightValueScratchXYPP + this.aoLightValueScratchXYZPPN) / 4.0F;
    5238            f5 = (this.aoLightValueScratchXYNP + this.aoLightValueScratchXYZNPN + f7 + this.aoLightValueScratchYZPN) / 4.0F;
    5239            this.brightnessTopRight = this.getAoBrightness(this.aoBrightnessXYZNPP, this.aoBrightnessXYNP, this.aoBrightnessYZPP, i1);
    5240            this.brightnessTopLeft = this.getAoBrightness(this.aoBrightnessYZPP, this.aoBrightnessXYZPPP, this.aoBrightnessXYPP, i1);
    5241            this.brightnessBottomLeft = this.getAoBrightness(this.aoBrightnessYZPN, this.aoBrightnessXYPP, this.aoBrightnessXYZPPN, i1);
    5242            this.brightnessBottomRight = this.getAoBrightness(this.aoBrightnessXYNP, this.aoBrightnessXYZNPN, this.aoBrightnessYZPN, i1);
    5243            this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = par5;
    5244            this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = par6;
    5245            this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = par7;
    5246            this.colorRedTopLeft *= f3;
    5247            this.colorGreenTopLeft *= f3;
    5248            this.colorBlueTopLeft *= f3;
    5249            this.colorRedBottomLeft *= f4;
    5250            this.colorGreenBottomLeft *= f4;
    5251            this.colorBlueBottomLeft *= f4;
    5252            this.colorRedBottomRight *= f5;
    5253            this.colorGreenBottomRight *= f5;
    5254            this.colorBlueBottomRight *= f5;
    5255            this.colorRedTopRight *= f6;
    5256            this.colorGreenTopRight *= f6;
    5257            this.colorBlueTopRight *= f6;
    5258            this.renderTopFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 1));
    5259            flag = true;
    5260        }
    5261
    5262        float f8;
    5263        float f9;
    5264        float f10;
    5265        float f11;
    5266        int j1;
    5267        int k1;
    5268        int l1;
    5269        int i2;
    5270        Icon icon;
    5271
    5272        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3, par4 - 1, 2))
    5273        {
    5274            if (this.renderMinZ <= 0.0D)
    5275            {
    5276                --par4;
    5277            }
    5278
    5279            this.aoLightValueScratchXZNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4);
    5280            this.aoLightValueScratchYZNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4);
    5281            this.aoLightValueScratchYZPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4);
    5282            this.aoLightValueScratchXZPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4);
    5283            this.aoBrightnessXZNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4);
    5284            this.aoBrightnessYZNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4);
    5285            this.aoBrightnessYZPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4);
    5286            this.aoBrightnessXZPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4);
    5287            flag3 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 + 1, par3, par4 - 1)];
    5288            flag2 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 - 1, par3, par4 - 1)];
    5289            flag5 = Block.canBlockGrass[this.blockAccess.getBlockId(par2, par3 + 1, par4 - 1)];
    5290            flag4 = Block.canBlockGrass[this.blockAccess.getBlockId(par2, par3 - 1, par4 - 1)];
    5291
    5292            if (!flag2 && !flag4)
    5293            {
    5294                this.aoLightValueScratchXYZNNN = this.aoLightValueScratchXZNN;
    5295                this.aoBrightnessXYZNNN = this.aoBrightnessXZNN;
    5296            }
    5297            else
    5298            {
    5299                this.aoLightValueScratchXYZNNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3 - 1, par4);
    5300                this.aoBrightnessXYZNNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3 - 1, par4);
    5301            }
    5302
    5303            if (!flag2 && !flag5)
    5304            {
    5305                this.aoLightValueScratchXYZNPN = this.aoLightValueScratchXZNN;
    5306                this.aoBrightnessXYZNPN = this.aoBrightnessXZNN;
    5307            }
    5308            else
    5309            {
    5310                this.aoLightValueScratchXYZNPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3 + 1, par4);
    5311                this.aoBrightnessXYZNPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3 + 1, par4);
    5312            }
    5313
    5314            if (!flag3 && !flag4)
    5315            {
    5316                this.aoLightValueScratchXYZPNN = this.aoLightValueScratchXZPN;
    5317                this.aoBrightnessXYZPNN = this.aoBrightnessXZPN;
    5318            }
    5319            else
    5320            {
    5321                this.aoLightValueScratchXYZPNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3 - 1, par4);
    5322                this.aoBrightnessXYZPNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3 - 1, par4);
    5323            }
    5324
    5325            if (!flag3 && !flag5)
    5326            {
    5327                this.aoLightValueScratchXYZPPN = this.aoLightValueScratchXZPN;
    5328                this.aoBrightnessXYZPPN = this.aoBrightnessXZPN;
    5329            }
    5330            else
    5331            {
    5332                this.aoLightValueScratchXYZPPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3 + 1, par4);
    5333                this.aoBrightnessXYZPPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3 + 1, par4);
    5334            }
    5335
    5336            if (this.renderMinZ <= 0.0D)
    5337            {
    5338                ++par4;
    5339            }
    5340
    5341            i1 = l;
    5342
    5343            if (this.renderMinZ <= 0.0D || !this.blockAccess.isBlockOpaqueCube(par2, par3, par4 - 1))
    5344            {
    5345                i1 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 - 1);
    5346            }
    5347
    5348            f7 = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 - 1);
    5349            f9 = (this.aoLightValueScratchXZNN + this.aoLightValueScratchXYZNPN + f7 + this.aoLightValueScratchYZPN) / 4.0F;
    5350            f8 = (f7 + this.aoLightValueScratchYZPN + this.aoLightValueScratchXZPN + this.aoLightValueScratchXYZPPN) / 4.0F;
    5351            f11 = (this.aoLightValueScratchYZNN + f7 + this.aoLightValueScratchXYZPNN + this.aoLightValueScratchXZPN) / 4.0F;
    5352            f10 = (this.aoLightValueScratchXYZNNN + this.aoLightValueScratchXZNN + this.aoLightValueScratchYZNN + f7) / 4.0F;
    5353            f3 = (float)((double)f9 * this.renderMaxY * (1.0D - this.renderMinX) + (double)f8 * this.renderMinY * this.renderMinX + (double)f11 * (1.0D - this.renderMaxY) * this.renderMinX + (double)f10 * (1.0D - this.renderMaxY) * (1.0D - this.renderMinX));
    5354            f4 = (float)((double)f9 * this.renderMaxY * (1.0D - this.renderMaxX) + (double)f8 * this.renderMaxY * this.renderMaxX + (double)f11 * (1.0D - this.renderMaxY) * this.renderMaxX + (double)f10 * (1.0D - this.renderMaxY) * (1.0D - this.renderMaxX));
    5355            f5 = (float)((double)f9 * this.renderMinY * (1.0D - this.renderMaxX) + (double)f8 * this.renderMinY * this.renderMaxX + (double)f11 * (1.0D - this.renderMinY) * this.renderMaxX + (double)f10 * (1.0D - this.renderMinY) * (1.0D - this.renderMaxX));
    5356            f6 = (float)((double)f9 * this.renderMinY * (1.0D - this.renderMinX) + (double)f8 * this.renderMinY * this.renderMinX + (double)f11 * (1.0D - this.renderMinY) * this.renderMinX + (double)f10 * (1.0D - this.renderMinY) * (1.0D - this.renderMinX));
    5357            k1 = this.getAoBrightness(this.aoBrightnessXZNN, this.aoBrightnessXYZNPN, this.aoBrightnessYZPN, i1);
    5358            j1 = this.getAoBrightness(this.aoBrightnessYZPN, this.aoBrightnessXZPN, this.aoBrightnessXYZPPN, i1);
    5359            i2 = this.getAoBrightness(this.aoBrightnessYZNN, this.aoBrightnessXYZPNN, this.aoBrightnessXZPN, i1);
    5360            l1 = this.getAoBrightness(this.aoBrightnessXYZNNN, this.aoBrightnessXZNN, this.aoBrightnessYZNN, i1);
    5361            this.brightnessTopLeft = this.mixAoBrightness(k1, j1, i2, l1, this.renderMaxY * (1.0D - this.renderMinX), this.renderMaxY * this.renderMinX, (1.0D - this.renderMaxY) * this.renderMinX, (1.0D - this.renderMaxY) * (1.0D - this.renderMinX));
    5362            this.brightnessBottomLeft = this.mixAoBrightness(k1, j1, i2, l1, this.renderMaxY * (1.0D - this.renderMaxX), this.renderMaxY * this.renderMaxX, (1.0D - this.renderMaxY) * this.renderMaxX, (1.0D - this.renderMaxY) * (1.0D - this.renderMaxX));
    5363            this.brightnessBottomRight = this.mixAoBrightness(k1, j1, i2, l1, this.renderMinY * (1.0D - this.renderMaxX), this.renderMinY * this.renderMaxX, (1.0D - this.renderMinY) * this.renderMaxX, (1.0D - this.renderMinY) * (1.0D - this.renderMaxX));
    5364            this.brightnessTopRight = this.mixAoBrightness(k1, j1, i2, l1, this.renderMinY * (1.0D - this.renderMinX), this.renderMinY * this.renderMinX, (1.0D - this.renderMinY) * this.renderMinX, (1.0D - this.renderMinY) * (1.0D - this.renderMinX));
    5365
    5366            if (flag1)
    5367            {
    5368                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = par5 * 0.8F;
    5369                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = par6 * 0.8F;
    5370                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = par7 * 0.8F;
    5371            }
    5372            else
    5373            {
    5374                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.8F;
    5375                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.8F;
    5376                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.8F;
    5377            }
    5378
    5379            this.colorRedTopLeft *= f3;
    5380            this.colorGreenTopLeft *= f3;
    5381            this.colorBlueTopLeft *= f3;
    5382            this.colorRedBottomLeft *= f4;
    5383            this.colorGreenBottomLeft *= f4;
    5384            this.colorBlueBottomLeft *= f4;
    5385            this.colorRedBottomRight *= f5;
    5386            this.colorGreenBottomRight *= f5;
    5387            this.colorBlueBottomRight *= f5;
    5388            this.colorRedTopRight *= f6;
    5389            this.colorGreenTopRight *= f6;
    5390            this.colorBlueTopRight *= f6;
    5391            icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 2);
    5392            this.renderEastFace(par1Block, (double)par2, (double)par3, (double)par4, icon);
    5393
    5394            if (fancyGrass && icon.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture())
    5395            {
    5396                this.colorRedTopLeft *= par5;
    5397                this.colorRedBottomLeft *= par5;
    5398                this.colorRedBottomRight *= par5;
    5399                this.colorRedTopRight *= par5;
    5400                this.colorGreenTopLeft *= par6;
    5401                this.colorGreenBottomLeft *= par6;
    5402                this.colorGreenBottomRight *= par6;
    5403                this.colorGreenTopRight *= par6;
    5404                this.colorBlueTopLeft *= par7;
    5405                this.colorBlueBottomLeft *= par7;
    5406                this.colorBlueBottomRight *= par7;
    5407                this.colorBlueTopRight *= par7;
    5408                this.renderEastFace(par1Block, (double)par2, (double)par3, (double)par4, BlockGrass.getIconSideOverlay());
    5409            }
    5410
    5411            flag = true;
    5412        }
    5413
    5414        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3, par4 + 1, 3))
    5415        {
    5416            if (this.renderMaxZ >= 1.0D)
    5417            {
    5418                ++par4;
    5419            }
    5420
    5421            this.aoLightValueScratchXZNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4);
    5422            this.aoLightValueScratchXZPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4);
    5423            this.aoLightValueScratchYZNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4);
    5424            this.aoLightValueScratchYZPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4);
    5425            this.aoBrightnessXZNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4);
    5426            this.aoBrightnessXZPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4);
    5427            this.aoBrightnessYZNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4);
    5428            this.aoBrightnessYZPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4);
    5429            flag3 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 + 1, par3, par4 + 1)];
    5430            flag2 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 - 1, par3, par4 + 1)];
    5431            flag5 = Block.canBlockGrass[this.blockAccess.getBlockId(par2, par3 + 1, par4 + 1)];
    5432            flag4 = Block.canBlockGrass[this.blockAccess.getBlockId(par2, par3 - 1, par4 + 1)];
    5433
    5434            if (!flag2 && !flag4)
    5435            {
    5436                this.aoLightValueScratchXYZNNP = this.aoLightValueScratchXZNP;
    5437                this.aoBrightnessXYZNNP = this.aoBrightnessXZNP;
    5438            }
    5439            else
    5440            {
    5441                this.aoLightValueScratchXYZNNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3 - 1, par4);
    5442                this.aoBrightnessXYZNNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3 - 1, par4);
    5443            }
    5444
    5445            if (!flag2 && !flag5)
    5446            {
    5447                this.aoLightValueScratchXYZNPP = this.aoLightValueScratchXZNP;
    5448                this.aoBrightnessXYZNPP = this.aoBrightnessXZNP;
    5449            }
    5450            else
    5451            {
    5452                this.aoLightValueScratchXYZNPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3 + 1, par4);
    5453                this.aoBrightnessXYZNPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3 + 1, par4);
    5454            }
    5455
    5456            if (!flag3 && !flag4)
    5457            {
    5458                this.aoLightValueScratchXYZPNP = this.aoLightValueScratchXZPP;
    5459                this.aoBrightnessXYZPNP = this.aoBrightnessXZPP;
    5460            }
    5461            else
    5462            {
    5463                this.aoLightValueScratchXYZPNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3 - 1, par4);
    5464                this.aoBrightnessXYZPNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3 - 1, par4);
    5465            }
    5466
    5467            if (!flag3 && !flag5)
    5468            {
    5469                this.aoLightValueScratchXYZPPP = this.aoLightValueScratchXZPP;
    5470                this.aoBrightnessXYZPPP = this.aoBrightnessXZPP;
    5471            }
    5472            else
    5473            {
    5474                this.aoLightValueScratchXYZPPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3 + 1, par4);
    5475                this.aoBrightnessXYZPPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3 + 1, par4);
    5476            }
    5477
    5478            if (this.renderMaxZ >= 1.0D)
    5479            {
    5480                --par4;
    5481            }
    5482
    5483            i1 = l;
    5484
    5485            if (this.renderMaxZ >= 1.0D || !this.blockAccess.isBlockOpaqueCube(par2, par3, par4 + 1))
    5486            {
    5487                i1 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 + 1);
    5488            }
    5489
    5490            f7 = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 + 1);
    5491            f9 = (this.aoLightValueScratchXZNP + this.aoLightValueScratchXYZNPP + f7 + this.aoLightValueScratchYZPP) / 4.0F;
    5492            f8 = (f7 + this.aoLightValueScratchYZPP + this.aoLightValueScratchXZPP + this.aoLightValueScratchXYZPPP) / 4.0F;
    5493            f11 = (this.aoLightValueScratchYZNP + f7 + this.aoLightValueScratchXYZPNP + this.aoLightValueScratchXZPP) / 4.0F;
    5494            f10 = (this.aoLightValueScratchXYZNNP + this.aoLightValueScratchXZNP + this.aoLightValueScratchYZNP + f7) / 4.0F;
    5495            f3 = (float)((double)f9 * this.renderMaxY * (1.0D - this.renderMinX) + (double)f8 * this.renderMaxY * this.renderMinX + (double)f11 * (1.0D - this.renderMaxY) * this.renderMinX + (double)f10 * (1.0D - this.renderMaxY) * (1.0D - this.renderMinX));
    5496            f4 = (float)((double)f9 * this.renderMinY * (1.0D - this.renderMinX) + (double)f8 * this.renderMinY * this.renderMinX + (double)f11 * (1.0D - this.renderMinY) * this.renderMinX + (double)f10 * (1.0D - this.renderMinY) * (1.0D - this.renderMinX));
    5497            f5 = (float)((double)f9 * this.renderMinY * (1.0D - this.renderMaxX) + (double)f8 * this.renderMinY * this.renderMaxX + (double)f11 * (1.0D - this.renderMinY) * this.renderMaxX + (double)f10 * (1.0D - this.renderMinY) * (1.0D - this.renderMaxX));
    5498            f6 = (float)((double)f9 * this.renderMaxY * (1.0D - this.renderMaxX) + (double)f8 * this.renderMaxY * this.renderMaxX + (double)f11 * (1.0D - this.renderMaxY) * this.renderMaxX + (double)f10 * (1.0D - this.renderMaxY) * (1.0D - this.renderMaxX));
    5499            k1 = this.getAoBrightness(this.aoBrightnessXZNP, this.aoBrightnessXYZNPP, this.aoBrightnessYZPP, i1);
    5500            j1 = this.getAoBrightness(this.aoBrightnessYZPP, this.aoBrightnessXZPP, this.aoBrightnessXYZPPP, i1);
    5501            i2 = this.getAoBrightness(this.aoBrightnessYZNP, this.aoBrightnessXYZPNP, this.aoBrightnessXZPP, i1);
    5502            l1 = this.getAoBrightness(this.aoBrightnessXYZNNP, this.aoBrightnessXZNP, this.aoBrightnessYZNP, i1);
    5503            this.brightnessTopLeft = this.mixAoBrightness(k1, l1, i2, j1, this.renderMaxY * (1.0D - this.renderMinX), (1.0D - this.renderMaxY) * (1.0D - this.renderMinX), (1.0D - this.renderMaxY) * this.renderMinX, this.renderMaxY * this.renderMinX);
    5504            this.brightnessBottomLeft = this.mixAoBrightness(k1, l1, i2, j1, this.renderMinY * (1.0D - this.renderMinX), (1.0D - this.renderMinY) * (1.0D - this.renderMinX), (1.0D - this.renderMinY) * this.renderMinX, this.renderMinY * this.renderMinX);
    5505            this.brightnessBottomRight = this.mixAoBrightness(k1, l1, i2, j1, this.renderMinY * (1.0D - this.renderMaxX), (1.0D - this.renderMinY) * (1.0D - this.renderMaxX), (1.0D - this.renderMinY) * this.renderMaxX, this.renderMinY * this.renderMaxX);
    5506            this.brightnessTopRight = this.mixAoBrightness(k1, l1, i2, j1, this.renderMaxY * (1.0D - this.renderMaxX), (1.0D - this.renderMaxY) * (1.0D - this.renderMaxX), (1.0D - this.renderMaxY) * this.renderMaxX, this.renderMaxY * this.renderMaxX);
    5507
    5508            if (flag1)
    5509            {
    5510                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = par5 * 0.8F;
    5511                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = par6 * 0.8F;
    5512                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = par7 * 0.8F;
    5513            }
    5514            else
    5515            {
    5516                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.8F;
    5517                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.8F;
    5518                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.8F;
    5519            }
    5520
    5521            this.colorRedTopLeft *= f3;
    5522            this.colorGreenTopLeft *= f3;
    5523            this.colorBlueTopLeft *= f3;
    5524            this.colorRedBottomLeft *= f4;
    5525            this.colorGreenBottomLeft *= f4;
    5526            this.colorBlueBottomLeft *= f4;
    5527            this.colorRedBottomRight *= f5;
    5528            this.colorGreenBottomRight *= f5;
    5529            this.colorBlueBottomRight *= f5;
    5530            this.colorRedTopRight *= f6;
    5531            this.colorGreenTopRight *= f6;
    5532            this.colorBlueTopRight *= f6;
    5533            icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 3);
    5534            this.renderWestFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 3));
    5535
    5536            if (fancyGrass && icon.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture())
    5537            {
    5538                this.colorRedTopLeft *= par5;
    5539                this.colorRedBottomLeft *= par5;
    5540                this.colorRedBottomRight *= par5;
    5541                this.colorRedTopRight *= par5;
    5542                this.colorGreenTopLeft *= par6;
    5543                this.colorGreenBottomLeft *= par6;
    5544                this.colorGreenBottomRight *= par6;
    5545                this.colorGreenTopRight *= par6;
    5546                this.colorBlueTopLeft *= par7;
    5547                this.colorBlueBottomLeft *= par7;
    5548                this.colorBlueBottomRight *= par7;
    5549                this.colorBlueTopRight *= par7;
    5550                this.renderWestFace(par1Block, (double)par2, (double)par3, (double)par4, BlockGrass.getIconSideOverlay());
    5551            }
    5552
    5553            flag = true;
    5554        }
    5555
    5556        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2 - 1, par3, par4, 4))
    5557        {
    5558            if (this.renderMinX <= 0.0D)
    5559            {
    5560                --par2;
    5561            }
    5562
    5563            this.aoLightValueScratchXYNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4);
    5564            this.aoLightValueScratchXZNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 - 1);
    5565            this.aoLightValueScratchXZNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 + 1);
    5566            this.aoLightValueScratchXYNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4);
    5567            this.aoBrightnessXYNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4);
    5568            this.aoBrightnessXZNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 - 1);
    5569            this.aoBrightnessXZNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 + 1);
    5570            this.aoBrightnessXYNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4);
    5571            flag3 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 - 1, par3 + 1, par4)];
    5572            flag2 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 - 1, par3 - 1, par4)];
    5573            flag5 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 - 1, par3, par4 - 1)];
    5574            flag4 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 - 1, par3, par4 + 1)];
    5575
    5576            if (!flag5 && !flag2)
    5577            {
    5578                this.aoLightValueScratchXYZNNN = this.aoLightValueScratchXZNN;
    5579                this.aoBrightnessXYZNNN = this.aoBrightnessXZNN;
    5580            }
    5581            else
    5582            {
    5583                this.aoLightValueScratchXYZNNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4 - 1);
    5584                this.aoBrightnessXYZNNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4 - 1);
    5585            }
    5586
    5587            if (!flag4 && !flag2)
    5588            {
    5589                this.aoLightValueScratchXYZNNP = this.aoLightValueScratchXZNP;
    5590                this.aoBrightnessXYZNNP = this.aoBrightnessXZNP;
    5591            }
    5592            else
    5593            {
    5594                this.aoLightValueScratchXYZNNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4 + 1);
    5595                this.aoBrightnessXYZNNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4 + 1);
    5596            }
    5597
    5598            if (!flag5 && !flag3)
    5599            {
    5600                this.aoLightValueScratchXYZNPN = this.aoLightValueScratchXZNN;
    5601                this.aoBrightnessXYZNPN = this.aoBrightnessXZNN;
    5602            }
    5603            else
    5604            {
    5605                this.aoLightValueScratchXYZNPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4 - 1);
    5606                this.aoBrightnessXYZNPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4 - 1);
    5607            }
    5608
    5609            if (!flag4 && !flag3)
    5610            {
    5611                this.aoLightValueScratchXYZNPP = this.aoLightValueScratchXZNP;
    5612                this.aoBrightnessXYZNPP = this.aoBrightnessXZNP;
    5613            }
    5614            else
    5615            {
    5616                this.aoLightValueScratchXYZNPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4 + 1);
    5617                this.aoBrightnessXYZNPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4 + 1);
    5618            }
    5619
    5620            if (this.renderMinX <= 0.0D)
    5621            {
    5622                ++par2;
    5623            }
    5624
    5625            i1 = l;
    5626
    5627            if (this.renderMinX <= 0.0D || !this.blockAccess.isBlockOpaqueCube(par2 - 1, par3, par4))
    5628            {
    5629                i1 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4);
    5630            }
    5631
    5632            f7 = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 - 1, par3, par4);
    5633            f9 = (this.aoLightValueScratchXYNN + this.aoLightValueScratchXYZNNP + f7 + this.aoLightValueScratchXZNP) / 4.0F;
    5634            f8 = (f7 + this.aoLightValueScratchXZNP + this.aoLightValueScratchXYNP + this.aoLightValueScratchXYZNPP) / 4.0F;
    5635            f11 = (this.aoLightValueScratchXZNN + f7 + this.aoLightValueScratchXYZNPN + this.aoLightValueScratchXYNP) / 4.0F;
    5636            f10 = (this.aoLightValueScratchXYZNNN + this.aoLightValueScratchXYNN + this.aoLightValueScratchXZNN + f7) / 4.0F;
    5637            f3 = (float)((double)f8 * this.renderMaxY * this.renderMaxZ + (double)f11 * this.renderMaxY * (1.0D - this.renderMaxZ) + (double)f10 * (1.0D - this.renderMaxY) * (1.0D - this.renderMaxZ) + (double)f9 * (1.0D - this.renderMaxY) * this.renderMaxZ);
    5638            f4 = (float)((double)f8 * this.renderMaxY * this.renderMinZ + (double)f11 * this.renderMaxY * (1.0D - this.renderMinZ) + (double)f10 * (1.0D - this.renderMaxY) * (1.0D - this.renderMinZ) + (double)f9 * (1.0D - this.renderMaxY) * this.renderMinZ);
    5639            f5 = (float)((double)f8 * this.renderMinY * this.renderMinZ + (double)f11 * this.renderMinY * (1.0D - this.renderMinZ) + (double)f10 * (1.0D - this.renderMinY) * (1.0D - this.renderMinZ) + (double)f9 * (1.0D - this.renderMinY) * this.renderMinZ);
    5640            f6 = (float)((double)f8 * this.renderMinY * this.renderMaxZ + (double)f11 * this.renderMinY * (1.0D - this.renderMaxZ) + (double)f10 * (1.0D - this.renderMinY) * (1.0D - this.renderMaxZ) + (double)f9 * (1.0D - this.renderMinY) * this.renderMaxZ);
    5641            k1 = this.getAoBrightness(this.aoBrightnessXYNN, this.aoBrightnessXYZNNP, this.aoBrightnessXZNP, i1);
    5642            j1 = this.getAoBrightness(this.aoBrightnessXZNP, this.aoBrightnessXYNP, this.aoBrightnessXYZNPP, i1);
    5643            i2 = this.getAoBrightness(this.aoBrightnessXZNN, this.aoBrightnessXYZNPN, this.aoBrightnessXYNP, i1);
    5644            l1 = this.getAoBrightness(this.aoBrightnessXYZNNN, this.aoBrightnessXYNN, this.aoBrightnessXZNN, i1);
    5645            this.brightnessTopLeft = this.mixAoBrightness(j1, i2, l1, k1, this.renderMaxY * this.renderMaxZ, this.renderMaxY * (1.0D - this.renderMaxZ), (1.0D - this.renderMaxY) * (1.0D - this.renderMaxZ), (1.0D - this.renderMaxY) * this.renderMaxZ);
    5646            this.brightnessBottomLeft = this.mixAoBrightness(j1, i2, l1, k1, this.renderMaxY * this.renderMinZ, this.renderMaxY * (1.0D - this.renderMinZ), (1.0D - this.renderMaxY) * (1.0D - this.renderMinZ), (1.0D - this.renderMaxY) * this.renderMinZ);
    5647            this.brightnessBottomRight = this.mixAoBrightness(j1, i2, l1, k1, this.renderMinY * this.renderMinZ, this.renderMinY * (1.0D - this.renderMinZ), (1.0D - this.renderMinY) * (1.0D - this.renderMinZ), (1.0D - this.renderMinY) * this.renderMinZ);
    5648            this.brightnessTopRight = this.mixAoBrightness(j1, i2, l1, k1, this.renderMinY * this.renderMaxZ, this.renderMinY * (1.0D - this.renderMaxZ), (1.0D - this.renderMinY) * (1.0D - this.renderMaxZ), (1.0D - this.renderMinY) * this.renderMaxZ);
    5649
    5650            if (flag1)
    5651            {
    5652                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = par5 * 0.6F;
    5653                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = par6 * 0.6F;
    5654                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = par7 * 0.6F;
    5655            }
    5656            else
    5657            {
    5658                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.6F;
    5659                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.6F;
    5660                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.6F;
    5661            }
    5662
    5663            this.colorRedTopLeft *= f3;
    5664            this.colorGreenTopLeft *= f3;
    5665            this.colorBlueTopLeft *= f3;
    5666            this.colorRedBottomLeft *= f4;
    5667            this.colorGreenBottomLeft *= f4;
    5668            this.colorBlueBottomLeft *= f4;
    5669            this.colorRedBottomRight *= f5;
    5670            this.colorGreenBottomRight *= f5;
    5671            this.colorBlueBottomRight *= f5;
    5672            this.colorRedTopRight *= f6;
    5673            this.colorGreenTopRight *= f6;
    5674            this.colorBlueTopRight *= f6;
    5675            icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 4);
    5676            this.renderNorthFace(par1Block, (double)par2, (double)par3, (double)par4, icon);
    5677
    5678            if (fancyGrass && icon.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture())
    5679            {
    5680                this.colorRedTopLeft *= par5;
    5681                this.colorRedBottomLeft *= par5;
    5682                this.colorRedBottomRight *= par5;
    5683                this.colorRedTopRight *= par5;
    5684                this.colorGreenTopLeft *= par6;
    5685                this.colorGreenBottomLeft *= par6;
    5686                this.colorGreenBottomRight *= par6;
    5687                this.colorGreenTopRight *= par6;
    5688                this.colorBlueTopLeft *= par7;
    5689                this.colorBlueBottomLeft *= par7;
    5690                this.colorBlueBottomRight *= par7;
    5691                this.colorBlueTopRight *= par7;
    5692                this.renderNorthFace(par1Block, (double)par2, (double)par3, (double)par4, BlockGrass.getIconSideOverlay());
    5693            }
    5694
    5695            flag = true;
    5696        }
    5697
    5698        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2 + 1, par3, par4, 5))
    5699        {
    5700            if (this.renderMaxX >= 1.0D)
    5701            {
    5702                ++par2;
    5703            }
    5704
    5705            this.aoLightValueScratchXYPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4);
    5706            this.aoLightValueScratchXZPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 - 1);
    5707            this.aoLightValueScratchXZPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3, par4 + 1);
    5708            this.aoLightValueScratchXYPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4);
    5709            this.aoBrightnessXYPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4);
    5710            this.aoBrightnessXZPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 - 1);
    5711            this.aoBrightnessXZPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 + 1);
    5712            this.aoBrightnessXYPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4);
    5713            flag3 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 + 1, par3 + 1, par4)];
    5714            flag2 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 + 1, par3 - 1, par4)];
    5715            flag5 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 + 1, par3, par4 + 1)];
    5716            flag4 = Block.canBlockGrass[this.blockAccess.getBlockId(par2 + 1, par3, par4 - 1)];
    5717
    5718            if (!flag2 && !flag4)
    5719            {
    5720                this.aoLightValueScratchXYZPNN = this.aoLightValueScratchXZPN;
    5721                this.aoBrightnessXYZPNN = this.aoBrightnessXZPN;
    5722            }
    5723            else
    5724            {
    5725                this.aoLightValueScratchXYZPNN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4 - 1);
    5726                this.aoBrightnessXYZPNN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4 - 1);
    5727            }
    5728
    5729            if (!flag2 && !flag5)
    5730            {
    5731                this.aoLightValueScratchXYZPNP = this.aoLightValueScratchXZPP;
    5732                this.aoBrightnessXYZPNP = this.aoBrightnessXZPP;
    5733            }
    5734            else
    5735            {
    5736                this.aoLightValueScratchXYZPNP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 - 1, par4 + 1);
    5737                this.aoBrightnessXYZPNP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4 + 1);
    5738            }
    5739
    5740            if (!flag3 && !flag4)
    5741            {
    5742                this.aoLightValueScratchXYZPPN = this.aoLightValueScratchXZPN;
    5743                this.aoBrightnessXYZPPN = this.aoBrightnessXZPN;
    5744            }
    5745            else
    5746            {
    5747                this.aoLightValueScratchXYZPPN = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4 - 1);
    5748                this.aoBrightnessXYZPPN = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4 - 1);
    5749            }
    5750
    5751            if (!flag3 && !flag5)
    5752            {
    5753                this.aoLightValueScratchXYZPPP = this.aoLightValueScratchXZPP;
    5754                this.aoBrightnessXYZPPP = this.aoBrightnessXZPP;
    5755            }
    5756            else
    5757            {
    5758                this.aoLightValueScratchXYZPPP = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2, par3 + 1, par4 + 1);
    5759                this.aoBrightnessXYZPPP = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4 + 1);
    5760            }
    5761
    5762            if (this.renderMaxX >= 1.0D)
    5763            {
    5764                --par2;
    5765            }
    5766
    5767            i1 = l;
    5768
    5769            if (this.renderMaxX >= 1.0D || !this.blockAccess.isBlockOpaqueCube(par2 + 1, par3, par4))
    5770            {
    5771                i1 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4);
    5772            }
    5773
    5774            f7 = par1Block.getAmbientOcclusionLightValue(this.blockAccess, par2 + 1, par3, par4);
    5775            f9 = (this.aoLightValueScratchXYPN + this.aoLightValueScratchXYZPNP + f7 + this.aoLightValueScratchXZPP) / 4.0F;
    5776            f8 = (this.aoLightValueScratchXYZPNN + this.aoLightValueScratchXYPN + this.aoLightValueScratchXZPN + f7) / 4.0F;
    5777            f11 = (this.aoLightValueScratchXZPN + f7 + this.aoLightValueScratchXYZPPN + this.aoLightValueScratchXYPP) / 4.0F;
    5778            f10 = (f7 + this.aoLightValueScratchXZPP + this.aoLightValueScratchXYPP + this.aoLightValueScratchXYZPPP) / 4.0F;
    5779            f3 = (float)((double)f9 * (1.0D - this.renderMinY) * this.renderMaxZ + (double)f8 * (1.0D - this.renderMinY) * (1.0D - this.renderMaxZ) + (double)f11 * this.renderMinY * (1.0D - this.renderMaxZ) + (double)f10 * this.renderMinY * this.renderMaxZ);
    5780            f4 = (float)((double)f9 * (1.0D - this.renderMinY) * this.renderMinZ + (double)f8 * (1.0D - this.renderMinY) * (1.0D - this.renderMinZ) + (double)f11 * this.renderMinY * (1.0D - this.renderMinZ) + (double)f10 * this.renderMinY * this.renderMinZ);
    5781            f5 = (float)((double)f9 * (1.0D - this.renderMaxY) * this.renderMinZ + (double)f8 * (1.0D - this.renderMaxY) * (1.0D - this.renderMinZ) + (double)f11 * this.renderMaxY * (1.0D - this.renderMinZ) + (double)f10 * this.renderMaxY * this.renderMinZ);
    5782            f6 = (float)((double)f9 * (1.0D - this.renderMaxY) * this.renderMaxZ + (double)f8 * (1.0D - this.renderMaxY) * (1.0D - this.renderMaxZ) + (double)f11 * this.renderMaxY * (1.0D - this.renderMaxZ) + (double)f10 * this.renderMaxY * this.renderMaxZ);
    5783            k1 = this.getAoBrightness(this.aoBrightnessXYPN, this.aoBrightnessXYZPNP, this.aoBrightnessXZPP, i1);
    5784            j1 = this.getAoBrightness(this.aoBrightnessXZPP, this.aoBrightnessXYPP, this.aoBrightnessXYZPPP, i1);
    5785            i2 = this.getAoBrightness(this.aoBrightnessXZPN, this.aoBrightnessXYZPPN, this.aoBrightnessXYPP, i1);
    5786            l1 = this.getAoBrightness(this.aoBrightnessXYZPNN, this.aoBrightnessXYPN, this.aoBrightnessXZPN, i1);
    5787            this.brightnessTopLeft = this.mixAoBrightness(k1, l1, i2, j1, (1.0D - this.renderMinY) * this.renderMaxZ, (1.0D - this.renderMinY) * (1.0D - this.renderMaxZ), this.renderMinY * (1.0D - this.renderMaxZ), this.renderMinY * this.renderMaxZ);
    5788            this.brightnessBottomLeft = this.mixAoBrightness(k1, l1, i2, j1, (1.0D - this.renderMinY) * this.renderMinZ, (1.0D - this.renderMinY) * (1.0D - this.renderMinZ), this.renderMinY * (1.0D - this.renderMinZ), this.renderMinY * this.renderMinZ);
    5789            this.brightnessBottomRight = this.mixAoBrightness(k1, l1, i2, j1, (1.0D - this.renderMaxY) * this.renderMinZ, (1.0D - this.renderMaxY) * (1.0D - this.renderMinZ), this.renderMaxY * (1.0D - this.renderMinZ), this.renderMaxY * this.renderMinZ);
    5790            this.brightnessTopRight = this.mixAoBrightness(k1, l1, i2, j1, (1.0D - this.renderMaxY) * this.renderMaxZ, (1.0D - this.renderMaxY) * (1.0D - this.renderMaxZ), this.renderMaxY * (1.0D - this.renderMaxZ), this.renderMaxY * this.renderMaxZ);
    5791
    5792            if (flag1)
    5793            {
    5794                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = par5 * 0.6F;
    5795                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = par6 * 0.6F;
    5796                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = par7 * 0.6F;
    5797            }
    5798            else
    5799            {
    5800                this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.6F;
    5801                this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.6F;
    5802                this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.6F;
    5803            }
    5804
    5805            this.colorRedTopLeft *= f3;
    5806            this.colorGreenTopLeft *= f3;
    5807            this.colorBlueTopLeft *= f3;
    5808            this.colorRedBottomLeft *= f4;
    5809            this.colorGreenBottomLeft *= f4;
    5810            this.colorBlueBottomLeft *= f4;
    5811            this.colorRedBottomRight *= f5;
    5812            this.colorGreenBottomRight *= f5;
    5813            this.colorBlueBottomRight *= f5;
    5814            this.colorRedTopRight *= f6;
    5815            this.colorGreenTopRight *= f6;
    5816            this.colorBlueTopRight *= f6;
    5817            icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 5);
    5818            this.renderSouthFace(par1Block, (double)par2, (double)par3, (double)par4, icon);
    5819
    5820            if (fancyGrass && icon.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture())
    5821            {
    5822                this.colorRedTopLeft *= par5;
    5823                this.colorRedBottomLeft *= par5;
    5824                this.colorRedBottomRight *= par5;
    5825                this.colorRedTopRight *= par5;
    5826                this.colorGreenTopLeft *= par6;
    5827                this.colorGreenBottomLeft *= par6;
    5828                this.colorGreenBottomRight *= par6;
    5829                this.colorGreenTopRight *= par6;
    5830                this.colorBlueTopLeft *= par7;
    5831                this.colorBlueBottomLeft *= par7;
    5832                this.colorBlueBottomRight *= par7;
    5833                this.colorBlueTopRight *= par7;
    5834                this.renderSouthFace(par1Block, (double)par2, (double)par3, (double)par4, BlockGrass.getIconSideOverlay());
    5835            }
    5836
    5837            flag = true;
    5838        }
    5839
    5840        this.enableAO = false;
    5841        return flag;
    5842    }
    5843
    5844    /**
    5845     * Get ambient occlusion brightness
    5846     */
    5847    public int getAoBrightness(int par1, int par2, int par3, int par4)
    5848    {
    5849        if (par1 == 0)
    5850        {
    5851            par1 = par4;
    5852        }
    5853
    5854        if (par2 == 0)
    5855        {
    5856            par2 = par4;
    5857        }
    5858
    5859        if (par3 == 0)
    5860        {
    5861            par3 = par4;
    5862        }
    5863
    5864        return par1 + par2 + par3 + par4 >> 2 & 16711935;
    5865    }
    5866
    5867    public int mixAoBrightness(int par1, int par2, int par3, int par4, double par5, double par7, double par9, double par11)
    5868    {
    5869        int i1 = (int)((double)(par1 >> 16 & 255) * par5 + (double)(par2 >> 16 & 255) * par7 + (double)(par3 >> 16 & 255) * par9 + (double)(par4 >> 16 & 255) * par11) & 255;
    5870        int j1 = (int)((double)(par1 & 255) * par5 + (double)(par2 & 255) * par7 + (double)(par3 & 255) * par9 + (double)(par4 & 255) * par11) & 255;
    5871        return i1 << 16 | j1;
    5872    }
    5873
    5874    /**
    5875     * Renders a standard cube block at the given coordinates, with a given color ratio.  Args: block, x, y, z, r, g, b
    5876     */
    5877    public boolean renderStandardBlockWithColorMultiplier(Block par1Block, int par2, int par3, int par4, float par5, float par6, float par7)
    5878    {
    5879        this.enableAO = false;
    5880        Tessellator tessellator = Tessellator.instance;
    5881        boolean flag = false;
    5882        float f3 = 0.5F;
    5883        float f4 = 1.0F;
    5884        float f5 = 0.8F;
    5885        float f6 = 0.6F;
    5886        float f7 = f4 * par5;
    5887        float f8 = f4 * par6;
    5888        float f9 = f4 * par7;
    5889        float f10 = f3;
    5890        float f11 = f5;
    5891        float f12 = f6;
    5892        float f13 = f3;
    5893        float f14 = f5;
    5894        float f15 = f6;
    5895        float f16 = f3;
    5896        float f17 = f5;
    5897        float f18 = f6;
    5898
    5899        if (par1Block != Block.grass)
    5900        {
    5901            f10 = f3 * par5;
    5902            f11 = f5 * par5;
    5903            f12 = f6 * par5;
    5904            f13 = f3 * par6;
    5905            f14 = f5 * par6;
    5906            f15 = f6 * par6;
    5907            f16 = f3 * par7;
    5908            f17 = f5 * par7;
    5909            f18 = f6 * par7;
    5910        }
    5911
    5912        int l = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4);
    5913
    5914        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3 - 1, par4, 0))
    5915        {
    5916            tessellator.setBrightness(this.renderMinY > 0.0D ? l : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4));
    5917            tessellator.setColorOpaque_F(f10, f13, f16);
    5918            this.renderBottomFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 0));
    5919            flag = true;
    5920        }
    5921
    5922        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3 + 1, par4, 1))
    5923        {
    5924            tessellator.setBrightness(this.renderMaxY < 1.0D ? l : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4));
    5925            tessellator.setColorOpaque_F(f7, f8, f9);
    5926            this.renderTopFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 1));
    5927            flag = true;
    5928        }
    5929
    5930        Icon icon;
    5931
    5932        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3, par4 - 1, 2))
    5933        {
    5934            tessellator.setBrightness(this.renderMinZ > 0.0D ? l : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 - 1));
    5935            tessellator.setColorOpaque_F(f11, f14, f17);
    5936            icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 2);
    5937            this.renderEastFace(par1Block, (double)par2, (double)par3, (double)par4, icon);
    5938
    5939            if (fancyGrass && icon.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture())
    5940            {
    5941                tessellator.setColorOpaque_F(f11 * par5, f14 * par6, f17 * par7);
    5942                this.renderEastFace(par1Block, (double)par2, (double)par3, (double)par4, BlockGrass.getIconSideOverlay());
    5943            }
    5944
    5945            flag = true;
    5946        }
    5947
    5948        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3, par4 + 1, 3))
    5949        {
    5950            tessellator.setBrightness(this.renderMaxZ < 1.0D ? l : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 + 1));
    5951            tessellator.setColorOpaque_F(f11, f14, f17);
    5952            icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 3);
    5953            this.renderWestFace(par1Block, (double)par2, (double)par3, (double)par4, icon);
    5954
    5955            if (fancyGrass && icon.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture())
    5956            {
    5957                tessellator.setColorOpaque_F(f11 * par5, f14 * par6, f17 * par7);
    5958                this.renderWestFace(par1Block, (double)par2, (double)par3, (double)par4, BlockGrass.getIconSideOverlay());
    5959            }
    5960
    5961            flag = true;
    5962        }
    5963
    5964        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2 - 1, par3, par4, 4))
    5965        {
    5966            tessellator.setBrightness(this.renderMinX > 0.0D ? l : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4));
    5967            tessellator.setColorOpaque_F(f12, f15, f18);
    5968            icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 4);
    5969            this.renderNorthFace(par1Block, (double)par2, (double)par3, (double)par4, icon);
    5970
    5971            if (fancyGrass && icon.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture())
    5972            {
    5973                tessellator.setColorOpaque_F(f12 * par5, f15 * par6, f18 * par7);
    5974                this.renderNorthFace(par1Block, (double)par2, (double)par3, (double)par4, BlockGrass.getIconSideOverlay());
    5975            }
    5976
    5977            flag = true;
    5978        }
    5979
    5980        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2 + 1, par3, par4, 5))
    5981        {
    5982            tessellator.setBrightness(this.renderMaxX < 1.0D ? l : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4));
    5983            tessellator.setColorOpaque_F(f12, f15, f18);
    5984            icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 5);
    5985            this.renderSouthFace(par1Block, (double)par2, (double)par3, (double)par4, icon);
    5986
    5987            if (fancyGrass && icon.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture())
    5988            {
    5989                tessellator.setColorOpaque_F(f12 * par5, f15 * par6, f18 * par7);
    5990                this.renderSouthFace(par1Block, (double)par2, (double)par3, (double)par4, BlockGrass.getIconSideOverlay());
    5991            }
    5992
    5993            flag = true;
    5994        }
    5995
    5996        return flag;
    5997    }
    5998
    5999    /**
    6000     * Renders a Cocoa block at the given coordinates
    6001     */
    6002    public boolean renderBlockCocoa(BlockCocoa par1BlockCocoa, int par2, int par3, int par4)
    6003    {
    6004        Tessellator tessellator = Tessellator.instance;
    6005        tessellator.setBrightness(par1BlockCocoa.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    6006        tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
    6007        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    6008        int i1 = BlockDirectional.getDirection(l);
    6009        int j1 = BlockCocoa.func_72219_c(l);
    6010        Icon icon = par1BlockCocoa.func_94468_i_(j1);
    6011        int k1 = 4 + j1 * 2;
    6012        int l1 = 5 + j1 * 2;
    6013        double d0 = 15.0D - (double)k1;
    6014        double d1 = 15.0D;
    6015        double d2 = 4.0D;
    6016        double d3 = 4.0D + (double)l1;
    6017        double d4 = (double)icon.getInterpolatedU(d0);
    6018        double d5 = (double)icon.getInterpolatedU(d1);
    6019        double d6 = (double)icon.getInterpolatedV(d2);
    6020        double d7 = (double)icon.getInterpolatedV(d3);
    6021        double d8 = 0.0D;
    6022        double d9 = 0.0D;
    6023
    6024        switch (i1)
    6025        {
    6026            case 0:
    6027                d8 = 8.0D - (double)(k1 / 2);
    6028                d9 = 15.0D - (double)k1;
    6029                break;
    6030            case 1:
    6031                d8 = 1.0D;
    6032                d9 = 8.0D - (double)(k1 / 2);
    6033                break;
    6034            case 2:
    6035                d8 = 8.0D - (double)(k1 / 2);
    6036                d9 = 1.0D;
    6037                break;
    6038            case 3:
    6039                d8 = 15.0D - (double)k1;
    6040                d9 = 8.0D - (double)(k1 / 2);
    6041        }
    6042
    6043        double d10 = (double)par2 + d8 / 16.0D;
    6044        double d11 = (double)par2 + (d8 + (double)k1) / 16.0D;
    6045        double d12 = (double)par3 + (12.0D - (double)l1) / 16.0D;
    6046        double d13 = (double)par3 + 0.75D;
    6047        double d14 = (double)par4 + d9 / 16.0D;
    6048        double d15 = (double)par4 + (d9 + (double)k1) / 16.0D;
    6049        tessellator.addVertexWithUV(d10, d12, d14, d4, d7);
    6050        tessellator.addVertexWithUV(d10, d12, d15, d5, d7);
    6051        tessellator.addVertexWithUV(d10, d13, d15, d5, d6);
    6052        tessellator.addVertexWithUV(d10, d13, d14, d4, d6);
    6053        tessellator.addVertexWithUV(d11, d12, d15, d4, d7);
    6054        tessellator.addVertexWithUV(d11, d12, d14, d5, d7);
    6055        tessellator.addVertexWithUV(d11, d13, d14, d5, d6);
    6056        tessellator.addVertexWithUV(d11, d13, d15, d4, d6);
    6057        tessellator.addVertexWithUV(d11, d12, d14, d4, d7);
    6058        tessellator.addVertexWithUV(d10, d12, d14, d5, d7);
    6059        tessellator.addVertexWithUV(d10, d13, d14, d5, d6);
    6060        tessellator.addVertexWithUV(d11, d13, d14, d4, d6);
    6061        tessellator.addVertexWithUV(d10, d12, d15, d4, d7);
    6062        tessellator.addVertexWithUV(d11, d12, d15, d5, d7);
    6063        tessellator.addVertexWithUV(d11, d13, d15, d5, d6);
    6064        tessellator.addVertexWithUV(d10, d13, d15, d4, d6);
    6065        int i2 = k1;
    6066
    6067        if (j1 >= 2)
    6068        {
    6069            i2 = k1 - 1;
    6070        }
    6071
    6072        d4 = (double)icon.getMinU();
    6073        d5 = (double)icon.getInterpolatedU((double)i2);
    6074        d6 = (double)icon.getMinV();
    6075        d7 = (double)icon.getInterpolatedV((double)i2);
    6076        tessellator.addVertexWithUV(d10, d13, d15, d4, d7);
    6077        tessellator.addVertexWithUV(d11, d13, d15, d5, d7);
    6078        tessellator.addVertexWithUV(d11, d13, d14, d5, d6);
    6079        tessellator.addVertexWithUV(d10, d13, d14, d4, d6);
    6080        tessellator.addVertexWithUV(d10, d12, d14, d4, d6);
    6081        tessellator.addVertexWithUV(d11, d12, d14, d5, d6);
    6082        tessellator.addVertexWithUV(d11, d12, d15, d5, d7);
    6083        tessellator.addVertexWithUV(d10, d12, d15, d4, d7);
    6084        d4 = (double)icon.getInterpolatedU(12.0D);
    6085        d5 = (double)icon.getMaxU();
    6086        d6 = (double)icon.getMinV();
    6087        d7 = (double)icon.getInterpolatedV(4.0D);
    6088        d8 = 8.0D;
    6089        d9 = 0.0D;
    6090        double d16;
    6091
    6092        switch (i1)
    6093        {
    6094            case 0:
    6095                d8 = 8.0D;
    6096                d9 = 12.0D;
    6097                d16 = d4;
    6098                d4 = d5;
    6099                d5 = d16;
    6100                break;
    6101            case 1:
    6102                d8 = 0.0D;
    6103                d9 = 8.0D;
    6104                break;
    6105            case 2:
    6106                d8 = 8.0D;
    6107                d9 = 0.0D;
    6108                break;
    6109            case 3:
    6110                d8 = 12.0D;
    6111                d9 = 8.0D;
    6112                d16 = d4;
    6113                d4 = d5;
    6114                d5 = d16;
    6115        }
    6116
    6117        d10 = (double)par2 + d8 / 16.0D;
    6118        d11 = (double)par2 + (d8 + 4.0D) / 16.0D;
    6119        d12 = (double)par3 + 0.75D;
    6120        d13 = (double)par3 + 1.0D;
    6121        d14 = (double)par4 + d9 / 16.0D;
    6122        d15 = (double)par4 + (d9 + 4.0D) / 16.0D;
    6123
    6124        if (i1 != 2 && i1 != 0)
    6125        {
    6126            if (i1 == 1 || i1 == 3)
    6127            {
    6128                tessellator.addVertexWithUV(d11, d12, d14, d4, d7);
    6129                tessellator.addVertexWithUV(d10, d12, d14, d5, d7);
    6130                tessellator.addVertexWithUV(d10, d13, d14, d5, d6);
    6131                tessellator.addVertexWithUV(d11, d13, d14, d4, d6);
    6132                tessellator.addVertexWithUV(d10, d12, d14, d5, d7);
    6133                tessellator.addVertexWithUV(d11, d12, d14, d4, d7);
    6134                tessellator.addVertexWithUV(d11, d13, d14, d4, d6);
    6135                tessellator.addVertexWithUV(d10, d13, d14, d5, d6);
    6136            }
    6137        }
    6138        else
    6139        {
    6140            tessellator.addVertexWithUV(d10, d12, d14, d5, d7);
    6141            tessellator.addVertexWithUV(d10, d12, d15, d4, d7);
    6142            tessellator.addVertexWithUV(d10, d13, d15, d4, d6);
    6143            tessellator.addVertexWithUV(d10, d13, d14, d5, d6);
    6144            tessellator.addVertexWithUV(d10, d12, d15, d4, d7);
    6145            tessellator.addVertexWithUV(d10, d12, d14, d5, d7);
    6146            tessellator.addVertexWithUV(d10, d13, d14, d5, d6);
    6147            tessellator.addVertexWithUV(d10, d13, d15, d4, d6);
    6148        }
    6149
    6150        return true;
    6151    }
    6152
    6153    /**
    6154     * Renders beacon block
    6155     */
    6156    public boolean renderBlockBeacon(BlockBeacon par1BlockBeacon, int par2, int par3, int par4)
    6157    {
    6158        float f = 0.1875F;
    6159        this.setOverrideBlockTexture(this.getBlockIcon(Block.obsidian));
    6160        this.setRenderBounds(0.125D, 0.0062500000931322575D, 0.125D, 0.875D, (double)f, 0.875D);
    6161        this.renderStandardBlock(par1BlockBeacon, par2, par3, par4);
    6162        this.setOverrideBlockTexture(this.getBlockIcon(Block.glass));
    6163        this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
    6164        this.renderStandardBlock(par1BlockBeacon, par2, par3, par4);
    6165        this.setOverrideBlockTexture(par1BlockBeacon.func_94446_i());
    6166        this.setRenderBounds(0.1875D, (double)f, 0.1875D, 0.8125D, 0.875D, 0.8125D);
    6167        this.renderStandardBlock(par1BlockBeacon, par2, par3, par4);
    6168        this.clearOverrideBlockTexture();
    6169        return true;
    6170    }
    6171
    6172    /**
    6173     * Renders a cactus block at the given coordinates
    6174     */
    6175    public boolean renderBlockCactus(Block par1Block, int par2, int par3, int par4)
    6176    {
    6177        int l = par1Block.colorMultiplier(this.blockAccess, par2, par3, par4);
    6178        float f = (float)(l >> 16 & 255) / 255.0F;
    6179        float f1 = (float)(l >> 8 & 255) / 255.0F;
    6180        float f2 = (float)(l & 255) / 255.0F;
    6181
    6182        if (EntityRenderer.anaglyphEnable)
    6183        {
    6184            float f3 = (f * 30.0F + f1 * 59.0F + f2 * 11.0F) / 100.0F;
    6185            float f4 = (f * 30.0F + f1 * 70.0F) / 100.0F;
    6186            float f5 = (f * 30.0F + f2 * 70.0F) / 100.0F;
    6187            f = f3;
    6188            f1 = f4;
    6189            f2 = f5;
    6190        }
    6191
    6192        return this.renderBlockCactusImpl(par1Block, par2, par3, par4, f, f1, f2);
    6193    }
    6194
    6195    /**
    6196     * Render block cactus implementation
    6197     */
    6198    public boolean renderBlockCactusImpl(Block par1Block, int par2, int par3, int par4, float par5, float par6, float par7)
    6199    {
    6200        Tessellator tessellator = Tessellator.instance;
    6201        boolean flag = false;
    6202        float f3 = 0.5F;
    6203        float f4 = 1.0F;
    6204        float f5 = 0.8F;
    6205        float f6 = 0.6F;
    6206        float f7 = f3 * par5;
    6207        float f8 = f4 * par5;
    6208        float f9 = f5 * par5;
    6209        float f10 = f6 * par5;
    6210        float f11 = f3 * par6;
    6211        float f12 = f4 * par6;
    6212        float f13 = f5 * par6;
    6213        float f14 = f6 * par6;
    6214        float f15 = f3 * par7;
    6215        float f16 = f4 * par7;
    6216        float f17 = f5 * par7;
    6217        float f18 = f6 * par7;
    6218        float f19 = 0.0625F;
    6219        int l = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4);
    6220
    6221        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3 - 1, par4, 0))
    6222        {
    6223            tessellator.setBrightness(this.renderMinY > 0.0D ? l : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4));
    6224            tessellator.setColorOpaque_F(f7, f11, f15);
    6225            this.renderBottomFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 0));
    6226            flag = true;
    6227        }
    6228
    6229        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3 + 1, par4, 1))
    6230        {
    6231            tessellator.setBrightness(this.renderMaxY < 1.0D ? l : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4));
    6232            tessellator.setColorOpaque_F(f8, f12, f16);
    6233            this.renderTopFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 1));
    6234            flag = true;
    6235        }
    6236
    6237        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3, par4 - 1, 2))
    6238        {
    6239            tessellator.setBrightness(this.renderMinZ > 0.0D ? l : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 - 1));
    6240            tessellator.setColorOpaque_F(f9, f13, f17);
    6241            tessellator.addTranslation(0.0F, 0.0F, f19);
    6242            this.renderEastFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 2));
    6243            tessellator.addTranslation(0.0F, 0.0F, -f19);
    6244            flag = true;
    6245        }
    6246
    6247        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3, par4 + 1, 3))
    6248        {
    6249            tessellator.setBrightness(this.renderMaxZ < 1.0D ? l : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 + 1));
    6250            tessellator.setColorOpaque_F(f9, f13, f17);
    6251            tessellator.addTranslation(0.0F, 0.0F, -f19);
    6252            this.renderWestFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 3));
    6253            tessellator.addTranslation(0.0F, 0.0F, f19);
    6254            flag = true;
    6255        }
    6256
    6257        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2 - 1, par3, par4, 4))
    6258        {
    6259            tessellator.setBrightness(this.renderMinX > 0.0D ? l : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4));
    6260            tessellator.setColorOpaque_F(f10, f14, f18);
    6261            tessellator.addTranslation(f19, 0.0F, 0.0F);
    6262            this.renderNorthFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 4));
    6263            tessellator.addTranslation(-f19, 0.0F, 0.0F);
    6264            flag = true;
    6265        }
    6266
    6267        if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2 + 1, par3, par4, 5))
    6268        {
    6269            tessellator.setBrightness(this.renderMaxX < 1.0D ? l : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4));
    6270            tessellator.setColorOpaque_F(f10, f14, f18);
    6271            tessellator.addTranslation(-f19, 0.0F, 0.0F);
    6272            this.renderSouthFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 5));
    6273            tessellator.addTranslation(f19, 0.0F, 0.0F);
    6274            flag = true;
    6275        }
    6276
    6277        return flag;
    6278    }
    6279
    6280    public boolean renderBlockFence(BlockFence par1BlockFence, int par2, int par3, int par4)
    6281    {
    6282        boolean flag = false;
    6283        float f = 0.375F;
    6284        float f1 = 0.625F;
    6285        this.setRenderBounds((double)f, 0.0D, (double)f, (double)f1, 1.0D, (double)f1);
    6286        this.renderStandardBlock(par1BlockFence, par2, par3, par4);
    6287        flag = true;
    6288        boolean flag1 = false;
    6289        boolean flag2 = false;
    6290
    6291        if (par1BlockFence.canConnectFenceTo(this.blockAccess, par2 - 1, par3, par4) || par1BlockFence.canConnectFenceTo(this.blockAccess, par2 + 1, par3, par4))
    6292        {
    6293            flag1 = true;
    6294        }
    6295
    6296        if (par1BlockFence.canConnectFenceTo(this.blockAccess, par2, par3, par4 - 1) || par1BlockFence.canConnectFenceTo(this.blockAccess, par2, par3, par4 + 1))
    6297        {
    6298            flag2 = true;
    6299        }
    6300
    6301        boolean flag3 = par1BlockFence.canConnectFenceTo(this.blockAccess, par2 - 1, par3, par4);
    6302        boolean flag4 = par1BlockFence.canConnectFenceTo(this.blockAccess, par2 + 1, par3, par4);
    6303        boolean flag5 = par1BlockFence.canConnectFenceTo(this.blockAccess, par2, par3, par4 - 1);
    6304        boolean flag6 = par1BlockFence.canConnectFenceTo(this.blockAccess, par2, par3, par4 + 1);
    6305
    6306        if (!flag1 && !flag2)
    6307        {
    6308            flag1 = true;
    6309        }
    6310
    6311        f = 0.4375F;
    6312        f1 = 0.5625F;
    6313        float f2 = 0.75F;
    6314        float f3 = 0.9375F;
    6315        float f4 = flag3 ? 0.0F : f;
    6316        float f5 = flag4 ? 1.0F : f1;
    6317        float f6 = flag5 ? 0.0F : f;
    6318        float f7 = flag6 ? 1.0F : f1;
    6319
    6320        if (flag1)
    6321        {
    6322            this.setRenderBounds((double)f4, (double)f2, (double)f, (double)f5, (double)f3, (double)f1);
    6323            this.renderStandardBlock(par1BlockFence, par2, par3, par4);
    6324            flag = true;
    6325        }
    6326
    6327        if (flag2)
    6328        {
    6329            this.setRenderBounds((double)f, (double)f2, (double)f6, (double)f1, (double)f3, (double)f7);
    6330            this.renderStandardBlock(par1BlockFence, par2, par3, par4);
    6331            flag = true;
    6332        }
    6333
    6334        f2 = 0.375F;
    6335        f3 = 0.5625F;
    6336
    6337        if (flag1)
    6338        {
    6339            this.setRenderBounds((double)f4, (double)f2, (double)f, (double)f5, (double)f3, (double)f1);
    6340            this.renderStandardBlock(par1BlockFence, par2, par3, par4);
    6341            flag = true;
    6342        }
    6343
    6344        if (flag2)
    6345        {
    6346            this.setRenderBounds((double)f, (double)f2, (double)f6, (double)f1, (double)f3, (double)f7);
    6347            this.renderStandardBlock(par1BlockFence, par2, par3, par4);
    6348            flag = true;
    6349        }
    6350
    6351        par1BlockFence.setBlockBoundsBasedOnState(this.blockAccess, par2, par3, par4);
    6352        return flag;
    6353    }
    6354
    6355    /**
    6356     * Renders wall block
    6357     */
    6358    public boolean renderBlockWall(BlockWall par1BlockWall, int par2, int par3, int par4)
    6359    {
    6360        boolean flag = par1BlockWall.canConnectWallTo(this.blockAccess, par2 - 1, par3, par4);
    6361        boolean flag1 = par1BlockWall.canConnectWallTo(this.blockAccess, par2 + 1, par3, par4);
    6362        boolean flag2 = par1BlockWall.canConnectWallTo(this.blockAccess, par2, par3, par4 - 1);
    6363        boolean flag3 = par1BlockWall.canConnectWallTo(this.blockAccess, par2, par3, par4 + 1);
    6364        boolean flag4 = flag2 && flag3 && !flag && !flag1;
    6365        boolean flag5 = !flag2 && !flag3 && flag && flag1;
    6366        boolean flag6 = this.blockAccess.isAirBlock(par2, par3 + 1, par4);
    6367
    6368        if ((flag4 || flag5) && flag6)
    6369        {
    6370            if (flag4)
    6371            {
    6372                this.setRenderBounds(0.3125D, 0.0D, 0.0D, 0.6875D, 0.8125D, 1.0D);
    6373                this.renderStandardBlock(par1BlockWall, par2, par3, par4);
    6374            }
    6375            else
    6376            {
    6377                this.setRenderBounds(0.0D, 0.0D, 0.3125D, 1.0D, 0.8125D, 0.6875D);
    6378                this.renderStandardBlock(par1BlockWall, par2, par3, par4);
    6379            }
    6380        }
    6381        else
    6382        {
    6383            this.setRenderBounds(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D);
    6384            this.renderStandardBlock(par1BlockWall, par2, par3, par4);
    6385
    6386            if (flag)
    6387            {
    6388                this.setRenderBounds(0.0D, 0.0D, 0.3125D, 0.25D, 0.8125D, 0.6875D);
    6389                this.renderStandardBlock(par1BlockWall, par2, par3, par4);
    6390            }
    6391
    6392            if (flag1)
    6393            {
    6394                this.setRenderBounds(0.75D, 0.0D, 0.3125D, 1.0D, 0.8125D, 0.6875D);
    6395                this.renderStandardBlock(par1BlockWall, par2, par3, par4);
    6396            }
    6397
    6398            if (flag2)
    6399            {
    6400                this.setRenderBounds(0.3125D, 0.0D, 0.0D, 0.6875D, 0.8125D, 0.25D);
    6401                this.renderStandardBlock(par1BlockWall, par2, par3, par4);
    6402            }
    6403
    6404            if (flag3)
    6405            {
    6406                this.setRenderBounds(0.3125D, 0.0D, 0.75D, 0.6875D, 0.8125D, 1.0D);
    6407                this.renderStandardBlock(par1BlockWall, par2, par3, par4);
    6408            }
    6409        }
    6410
    6411        par1BlockWall.setBlockBoundsBasedOnState(this.blockAccess, par2, par3, par4);
    6412        return true;
    6413    }
    6414
    6415    public boolean renderBlockDragonEgg(BlockDragonEgg par1BlockDragonEgg, int par2, int par3, int par4)
    6416    {
    6417        boolean flag = false;
    6418        int l = 0;
    6419
    6420        for (int i1 = 0; i1 < 8; ++i1)
    6421        {
    6422            byte b0 = 0;
    6423            byte b1 = 1;
    6424
    6425            if (i1 == 0)
    6426            {
    6427                b0 = 2;
    6428            }
    6429
    6430            if (i1 == 1)
    6431            {
    6432                b0 = 3;
    6433            }
    6434
    6435            if (i1 == 2)
    6436            {
    6437                b0 = 4;
    6438            }
    6439
    6440            if (i1 == 3)
    6441            {
    6442                b0 = 5;
    6443                b1 = 2;
    6444            }
    6445
    6446            if (i1 == 4)
    6447            {
    6448                b0 = 6;
    6449                b1 = 3;
    6450            }
    6451
    6452            if (i1 == 5)
    6453            {
    6454                b0 = 7;
    6455                b1 = 5;
    6456            }
    6457
    6458            if (i1 == 6)
    6459            {
    6460                b0 = 6;
    6461                b1 = 2;
    6462            }
    6463
    6464            if (i1 == 7)
    6465            {
    6466                b0 = 3;
    6467            }
    6468
    6469            float f = (float)b0 / 16.0F;
    6470            float f1 = 1.0F - (float)l / 16.0F;
    6471            float f2 = 1.0F - (float)(l + b1) / 16.0F;
    6472            l += b1;
    6473            this.setRenderBounds((double)(0.5F - f), (double)f2, (double)(0.5F - f), (double)(0.5F + f), (double)f1, (double)(0.5F + f));
    6474            this.renderStandardBlock(par1BlockDragonEgg, par2, par3, par4);
    6475        }
    6476
    6477        flag = true;
    6478        this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
    6479        return flag;
    6480    }
    6481
    6482    /**
    6483     * Render block fence gate
    6484     */
    6485    public boolean renderBlockFenceGate(BlockFenceGate par1BlockFenceGate, int par2, int par3, int par4)
    6486    {
    6487        boolean flag = true;
    6488        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    6489        boolean flag1 = BlockFenceGate.isFenceGateOpen(l);
    6490        int i1 = BlockDirectional.getDirection(l);
    6491        float f = 0.375F;
    6492        float f1 = 0.5625F;
    6493        float f2 = 0.75F;
    6494        float f3 = 0.9375F;
    6495        float f4 = 0.3125F;
    6496        float f5 = 1.0F;
    6497
    6498        if ((i1 == 2 || i1 == 0) && this.blockAccess.getBlockId(par2 - 1, par3, par4) == Block.cobblestoneWall.blockID && this.blockAccess.getBlockId(par2 + 1, par3, par4) == Block.cobblestoneWall.blockID || (i1 == 3 || i1 == 1) && this.blockAccess.getBlockId(par2, par3, par4 - 1) == Block.cobblestoneWall.blockID && this.blockAccess.getBlockId(par2, par3, par4 + 1) == Block.cobblestoneWall.blockID)
    6499        {
    6500            f -= 0.1875F;
    6501            f1 -= 0.1875F;
    6502            f2 -= 0.1875F;
    6503            f3 -= 0.1875F;
    6504            f4 -= 0.1875F;
    6505            f5 -= 0.1875F;
    6506        }
    6507
    6508        this.renderAllFaces = true;
    6509        float f6;
    6510        float f7;
    6511        float f8;
    6512        float f9;
    6513
    6514        if (i1 != 3 && i1 != 1)
    6515        {
    6516            f6 = 0.0F;
    6517            f8 = 0.125F;
    6518            f7 = 0.4375F;
    6519            f9 = 0.5625F;
    6520            this.setRenderBounds((double)f6, (double)f4, (double)f7, (double)f8, (double)f5, (double)f9);
    6521            this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6522            f6 = 0.875F;
    6523            f8 = 1.0F;
    6524            this.setRenderBounds((double)f6, (double)f4, (double)f7, (double)f8, (double)f5, (double)f9);
    6525            this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6526        }
    6527        else
    6528        {
    6529            this.uvRotateTop = 1;
    6530            f6 = 0.4375F;
    6531            f8 = 0.5625F;
    6532            f7 = 0.0F;
    6533            f9 = 0.125F;
    6534            this.setRenderBounds((double)f6, (double)f4, (double)f7, (double)f8, (double)f5, (double)f9);
    6535            this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6536            f7 = 0.875F;
    6537            f9 = 1.0F;
    6538            this.setRenderBounds((double)f6, (double)f4, (double)f7, (double)f8, (double)f5, (double)f9);
    6539            this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6540            this.uvRotateTop = 0;
    6541        }
    6542
    6543        if (flag1)
    6544        {
    6545            if (i1 == 2 || i1 == 0)
    6546            {
    6547                this.uvRotateTop = 1;
    6548            }
    6549
    6550            if (i1 == 3)
    6551            {
    6552                this.setRenderBounds(0.8125D, (double)f, 0.0D, 0.9375D, (double)f3, 0.125D);
    6553                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6554                this.setRenderBounds(0.8125D, (double)f, 0.875D, 0.9375D, (double)f3, 1.0D);
    6555                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6556                this.setRenderBounds(0.5625D, (double)f, 0.0D, 0.8125D, (double)f1, 0.125D);
    6557                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6558                this.setRenderBounds(0.5625D, (double)f, 0.875D, 0.8125D, (double)f1, 1.0D);
    6559                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6560                this.setRenderBounds(0.5625D, (double)f2, 0.0D, 0.8125D, (double)f3, 0.125D);
    6561                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6562                this.setRenderBounds(0.5625D, (double)f2, 0.875D, 0.8125D, (double)f3, 1.0D);
    6563                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6564            }
    6565            else if (i1 == 1)
    6566            {
    6567                this.setRenderBounds(0.0625D, (double)f, 0.0D, 0.1875D, (double)f3, 0.125D);
    6568                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6569                this.setRenderBounds(0.0625D, (double)f, 0.875D, 0.1875D, (double)f3, 1.0D);
    6570                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6571                this.setRenderBounds(0.1875D, (double)f, 0.0D, 0.4375D, (double)f1, 0.125D);
    6572                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6573                this.setRenderBounds(0.1875D, (double)f, 0.875D, 0.4375D, (double)f1, 1.0D);
    6574                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6575                this.setRenderBounds(0.1875D, (double)f2, 0.0D, 0.4375D, (double)f3, 0.125D);
    6576                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6577                this.setRenderBounds(0.1875D, (double)f2, 0.875D, 0.4375D, (double)f3, 1.0D);
    6578                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6579            }
    6580            else if (i1 == 0)
    6581            {
    6582                this.setRenderBounds(0.0D, (double)f, 0.8125D, 0.125D, (double)f3, 0.9375D);
    6583                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6584                this.setRenderBounds(0.875D, (double)f, 0.8125D, 1.0D, (double)f3, 0.9375D);
    6585                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6586                this.setRenderBounds(0.0D, (double)f, 0.5625D, 0.125D, (double)f1, 0.8125D);
    6587                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6588                this.setRenderBounds(0.875D, (double)f, 0.5625D, 1.0D, (double)f1, 0.8125D);
    6589                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6590                this.setRenderBounds(0.0D, (double)f2, 0.5625D, 0.125D, (double)f3, 0.8125D);
    6591                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6592                this.setRenderBounds(0.875D, (double)f2, 0.5625D, 1.0D, (double)f3, 0.8125D);
    6593                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6594            }
    6595            else if (i1 == 2)
    6596            {
    6597                this.setRenderBounds(0.0D, (double)f, 0.0625D, 0.125D, (double)f3, 0.1875D);
    6598                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6599                this.setRenderBounds(0.875D, (double)f, 0.0625D, 1.0D, (double)f3, 0.1875D);
    6600                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6601                this.setRenderBounds(0.0D, (double)f, 0.1875D, 0.125D, (double)f1, 0.4375D);
    6602                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6603                this.setRenderBounds(0.875D, (double)f, 0.1875D, 1.0D, (double)f1, 0.4375D);
    6604                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6605                this.setRenderBounds(0.0D, (double)f2, 0.1875D, 0.125D, (double)f3, 0.4375D);
    6606                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6607                this.setRenderBounds(0.875D, (double)f2, 0.1875D, 1.0D, (double)f3, 0.4375D);
    6608                this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6609            }
    6610        }
    6611        else if (i1 != 3 && i1 != 1)
    6612        {
    6613            f6 = 0.375F;
    6614            f8 = 0.5F;
    6615            f7 = 0.4375F;
    6616            f9 = 0.5625F;
    6617            this.setRenderBounds((double)f6, (double)f, (double)f7, (double)f8, (double)f3, (double)f9);
    6618            this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6619            f6 = 0.5F;
    6620            f8 = 0.625F;
    6621            this.setRenderBounds((double)f6, (double)f, (double)f7, (double)f8, (double)f3, (double)f9);
    6622            this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6623            f6 = 0.625F;
    6624            f8 = 0.875F;
    6625            this.setRenderBounds((double)f6, (double)f, (double)f7, (double)f8, (double)f1, (double)f9);
    6626            this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6627            this.setRenderBounds((double)f6, (double)f2, (double)f7, (double)f8, (double)f3, (double)f9);
    6628            this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6629            f6 = 0.125F;
    6630            f8 = 0.375F;
    6631            this.setRenderBounds((double)f6, (double)f, (double)f7, (double)f8, (double)f1, (double)f9);
    6632            this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6633            this.setRenderBounds((double)f6, (double)f2, (double)f7, (double)f8, (double)f3, (double)f9);
    6634            this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6635        }
    6636        else
    6637        {
    6638            this.uvRotateTop = 1;
    6639            f6 = 0.4375F;
    6640            f8 = 0.5625F;
    6641            f7 = 0.375F;
    6642            f9 = 0.5F;
    6643            this.setRenderBounds((double)f6, (double)f, (double)f7, (double)f8, (double)f3, (double)f9);
    6644            this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6645            f7 = 0.5F;
    6646            f9 = 0.625F;
    6647            this.setRenderBounds((double)f6, (double)f, (double)f7, (double)f8, (double)f3, (double)f9);
    6648            this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6649            f7 = 0.625F;
    6650            f9 = 0.875F;
    6651            this.setRenderBounds((double)f6, (double)f, (double)f7, (double)f8, (double)f1, (double)f9);
    6652            this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6653            this.setRenderBounds((double)f6, (double)f2, (double)f7, (double)f8, (double)f3, (double)f9);
    6654            this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6655            f7 = 0.125F;
    6656            f9 = 0.375F;
    6657            this.setRenderBounds((double)f6, (double)f, (double)f7, (double)f8, (double)f1, (double)f9);
    6658            this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6659            this.setRenderBounds((double)f6, (double)f2, (double)f7, (double)f8, (double)f3, (double)f9);
    6660            this.renderStandardBlock(par1BlockFenceGate, par2, par3, par4);
    6661        }
    6662
    6663        this.renderAllFaces = false;
    6664        this.uvRotateTop = 0;
    6665        this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
    6666        return flag;
    6667    }
    6668
    6669    public boolean renderBlockHopper(BlockHopper par1BlockHopper, int par2, int par3, int par4)
    6670    {
    6671        Tessellator tessellator = Tessellator.instance;
    6672        tessellator.setBrightness(par1BlockHopper.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    6673        float f = 1.0F;
    6674        int l = par1BlockHopper.colorMultiplier(this.blockAccess, par2, par3, par4);
    6675        float f1 = (float)(l >> 16 & 255) / 255.0F;
    6676        float f2 = (float)(l >> 8 & 255) / 255.0F;
    6677        float f3 = (float)(l & 255) / 255.0F;
    6678
    6679        if (EntityRenderer.anaglyphEnable)
    6680        {
    6681            float f4 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F;
    6682            float f5 = (f1 * 30.0F + f2 * 70.0F) / 100.0F;
    6683            float f6 = (f1 * 30.0F + f3 * 70.0F) / 100.0F;
    6684            f1 = f4;
    6685            f2 = f5;
    6686            f3 = f6;
    6687        }
    6688
    6689        tessellator.setColorOpaque_F(f * f1, f * f2, f * f3);
    6690        return this.renderBlockHopperMetadata(par1BlockHopper, par2, par3, par4, this.blockAccess.getBlockMetadata(par2, par3, par4), false);
    6691    }
    6692
    6693    public boolean renderBlockHopperMetadata(BlockHopper par1BlockHopper, int par2, int par3, int par4, int par5, boolean par6)
    6694    {
    6695        Tessellator tessellator = Tessellator.instance;
    6696        int i1 = BlockHopper.getDirectionFromMetadata(par5);
    6697        double d0 = 0.625D;
    6698        this.setRenderBounds(0.0D, d0, 0.0D, 1.0D, 1.0D, 1.0D);
    6699
    6700        if (par6)
    6701        {
    6702            tessellator.startDrawingQuads();
    6703            tessellator.setNormal(0.0F, -1.0F, 0.0F);
    6704            this.renderBottomFace(par1BlockHopper, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1BlockHopper, 0, par5));
    6705            tessellator.draw();
    6706            tessellator.startDrawingQuads();
    6707            tessellator.setNormal(0.0F, 1.0F, 0.0F);
    6708            this.renderTopFace(par1BlockHopper, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1BlockHopper, 1, par5));
    6709            tessellator.draw();
    6710            tessellator.startDrawingQuads();
    6711            tessellator.setNormal(0.0F, 0.0F, -1.0F);
    6712            this.renderEastFace(par1BlockHopper, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1BlockHopper, 2, par5));
    6713            tessellator.draw();
    6714            tessellator.startDrawingQuads();
    6715            tessellator.setNormal(0.0F, 0.0F, 1.0F);
    6716            this.renderWestFace(par1BlockHopper, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1BlockHopper, 3, par5));
    6717            tessellator.draw();
    6718            tessellator.startDrawingQuads();
    6719            tessellator.setNormal(-1.0F, 0.0F, 0.0F);
    6720            this.renderNorthFace(par1BlockHopper, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1BlockHopper, 4, par5));
    6721            tessellator.draw();
    6722            tessellator.startDrawingQuads();
    6723            tessellator.setNormal(1.0F, 0.0F, 0.0F);
    6724            this.renderSouthFace(par1BlockHopper, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1BlockHopper, 5, par5));
    6725            tessellator.draw();
    6726        }
    6727        else
    6728        {
    6729            this.renderStandardBlock(par1BlockHopper, par2, par3, par4);
    6730        }
    6731
    6732        float f;
    6733
    6734        if (!par6)
    6735        {
    6736            tessellator.setBrightness(par1BlockHopper.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
    6737            float f1 = 1.0F;
    6738            int j1 = par1BlockHopper.colorMultiplier(this.blockAccess, par2, par3, par4);
    6739            f = (float)(j1 >> 16 & 255) / 255.0F;
    6740            float f2 = (float)(j1 >> 8 & 255) / 255.0F;
    6741            float f3 = (float)(j1 & 255) / 255.0F;
    6742
    6743            if (EntityRenderer.anaglyphEnable)
    6744            {
    6745                float f4 = (f * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F;
    6746                float f5 = (f * 30.0F + f2 * 70.0F) / 100.0F;
    6747                float f6 = (f * 30.0F + f3 * 70.0F) / 100.0F;
    6748                f = f4;
    6749                f2 = f5;
    6750                f3 = f6;
    6751            }
    6752
    6753            tessellator.setColorOpaque_F(f1 * f, f1 * f2, f1 * f3);
    6754        }
    6755
    6756        Icon icon = BlockHopper.getHopperIcon("hopper");
    6757        Icon icon1 = BlockHopper.getHopperIcon("hopper_inside");
    6758        f = 0.125F;
    6759
    6760        if (par6)
    6761        {
    6762            tessellator.startDrawingQuads();
    6763            tessellator.setNormal(1.0F, 0.0F, 0.0F);
    6764            this.renderSouthFace(par1BlockHopper, (double)(-1.0F + f), 0.0D, 0.0D, icon);
    6765            tessellator.draw();
    6766            tessellator.startDrawingQuads();
    6767            tessellator.setNormal(-1.0F, 0.0F, 0.0F);
    6768            this.renderNorthFace(par1BlockHopper, (double)(1.0F - f), 0.0D, 0.0D, icon);
    6769            tessellator.draw();
    6770            tessellator.startDrawingQuads();
    6771            tessellator.setNormal(0.0F, 0.0F, 1.0F);
    6772            this.renderWestFace(par1BlockHopper, 0.0D, 0.0D, (double)(-1.0F + f), icon);
    6773            tessellator.draw();
    6774            tessellator.startDrawingQuads();
    6775            tessellator.setNormal(0.0F, 0.0F, -1.0F);
    6776            this.renderEastFace(par1BlockHopper, 0.0D, 0.0D, (double)(1.0F - f), icon);
    6777            tessellator.draw();
    6778            tessellator.startDrawingQuads();
    6779            tessellator.setNormal(0.0F, 1.0F, 0.0F);
    6780            this.renderTopFace(par1BlockHopper, 0.0D, -1.0D + d0, 0.0D, icon1);
    6781            tessellator.draw();
    6782        }
    6783        else
    6784        {
    6785            this.renderSouthFace(par1BlockHopper, (double)((float)par2 - 1.0F + f), (double)par3, (double)par4, icon);
    6786            this.renderNorthFace(par1BlockHopper, (double)((float)par2 + 1.0F - f), (double)par3, (double)par4, icon);
    6787            this.renderWestFace(par1BlockHopper, (double)par2, (double)par3, (double)((float)par4 - 1.0F + f), icon);
    6788            this.renderEastFace(par1BlockHopper, (double)par2, (double)par3, (double)((float)par4 + 1.0F - f), icon);
    6789            this.renderTopFace(par1BlockHopper, (double)par2, (double)((float)par3 - 1.0F) + d0, (double)par4, icon1);
    6790        }
    6791
    6792        this.setOverrideBlockTexture(icon);
    6793        double d1 = 0.25D;
    6794        double d2 = 0.25D;
    6795        this.setRenderBounds(d1, d2, d1, 1.0D - d1, d0 - 0.002D, 1.0D - d1);
    6796
    6797        if (par6)
    6798        {
    6799            tessellator.startDrawingQuads();
    6800            tessellator.setNormal(1.0F, 0.0F, 0.0F);
    6801            this.renderSouthFace(par1BlockHopper, 0.0D, 0.0D, 0.0D, icon);
    6802            tessellator.draw();
    6803            tessellator.startDrawingQuads();
    6804            tessellator.setNormal(-1.0F, 0.0F, 0.0F);
    6805            this.renderNorthFace(par1BlockHopper, 0.0D, 0.0D, 0.0D, icon);
    6806            tessellator.draw();
    6807            tessellator.startDrawingQuads();
    6808            tessellator.setNormal(0.0F, 0.0F, 1.0F);
    6809            this.renderWestFace(par1BlockHopper, 0.0D, 0.0D, 0.0D, icon);
    6810            tessellator.draw();
    6811            tessellator.startDrawingQuads();
    6812            tessellator.setNormal(0.0F, 0.0F, -1.0F);
    6813            this.renderEastFace(par1BlockHopper, 0.0D, 0.0D, 0.0D, icon);
    6814            tessellator.draw();
    6815            tessellator.startDrawingQuads();
    6816            tessellator.setNormal(0.0F, 1.0F, 0.0F);
    6817            this.renderTopFace(par1BlockHopper, 0.0D, 0.0D, 0.0D, icon);
    6818            tessellator.draw();
    6819            tessellator.startDrawingQuads();
    6820            tessellator.setNormal(0.0F, -1.0F, 0.0F);
    6821            this.renderBottomFace(par1BlockHopper, 0.0D, 0.0D, 0.0D, icon);
    6822            tessellator.draw();
    6823        }
    6824        else
    6825        {
    6826            this.renderStandardBlock(par1BlockHopper, par2, par3, par4);
    6827        }
    6828
    6829        if (!par6)
    6830        {
    6831            double d3 = 0.375D;
    6832            double d4 = 0.25D;
    6833            this.setOverrideBlockTexture(icon);
    6834
    6835            if (i1 == 0)
    6836            {
    6837                this.setRenderBounds(d3, 0.0D, d3, 1.0D - d3, 0.25D, 1.0D - d3);
    6838                this.renderStandardBlock(par1BlockHopper, par2, par3, par4);
    6839            }
    6840
    6841            if (i1 == 2)
    6842            {
    6843                this.setRenderBounds(d3, d2, 0.0D, 1.0D - d3, d2 + d4, d1);
    6844                this.renderStandardBlock(par1BlockHopper, par2, par3, par4);
    6845            }
    6846
    6847            if (i1 == 3)
    6848            {
    6849                this.setRenderBounds(d3, d2, 1.0D - d1, 1.0D - d3, d2 + d4, 1.0D);
    6850                this.renderStandardBlock(par1BlockHopper, par2, par3, par4);
    6851            }
    6852
    6853            if (i1 == 4)
    6854            {
    6855                this.setRenderBounds(0.0D, d2, d3, d1, d2 + d4, 1.0D - d3);
    6856                this.renderStandardBlock(par1BlockHopper, par2, par3, par4);
    6857            }
    6858
    6859            if (i1 == 5)
    6860            {
    6861                this.setRenderBounds(1.0D - d1, d2, d3, 1.0D, d2 + d4, 1.0D - d3);
    6862                this.renderStandardBlock(par1BlockHopper, par2, par3, par4);
    6863            }
    6864        }
    6865
    6866        this.clearOverrideBlockTexture();
    6867        return true;
    6868    }
    6869
    6870    /**
    6871     * Renders a stair block at the given coordinates
    6872     */
    6873    public boolean renderBlockStairs(BlockStairs par1BlockStairs, int par2, int par3, int par4)
    6874    {
    6875        par1BlockStairs.func_82541_d(this.blockAccess, par2, par3, par4);
    6876        this.setRenderBoundsFromBlock(par1BlockStairs);
    6877        this.renderStandardBlock(par1BlockStairs, par2, par3, par4);
    6878        boolean flag = par1BlockStairs.func_82542_g(this.blockAccess, par2, par3, par4);
    6879        this.setRenderBoundsFromBlock(par1BlockStairs);
    6880        this.renderStandardBlock(par1BlockStairs, par2, par3, par4);
    6881
    6882        if (flag && par1BlockStairs.func_82544_h(this.blockAccess, par2, par3, par4))
    6883        {
    6884            this.setRenderBoundsFromBlock(par1BlockStairs);
    6885            this.renderStandardBlock(par1BlockStairs, par2, par3, par4);
    6886        }
    6887
    6888        return true;
    6889    }
    6890
    6891    /**
    6892     * Renders a door block at the given coordinates
    6893     */
    6894    public boolean renderBlockDoor(Block par1Block, int par2, int par3, int par4)
    6895    {
    6896        Tessellator tessellator = Tessellator.instance;
    6897        int l = this.blockAccess.getBlockMetadata(par2, par3, par4);
    6898
    6899        if ((l & 8) != 0)
    6900        {
    6901            if (this.blockAccess.getBlockId(par2, par3 - 1, par4) != par1Block.blockID)
    6902            {
    6903                return false;
    6904            }
    6905        }
    6906        else if (this.blockAccess.getBlockId(par2, par3 + 1, par4) != par1Block.blockID)
    6907        {
    6908            return false;
    6909        }
    6910
    6911        boolean flag = false;
    6912        float f = 0.5F;
    6913        float f1 = 1.0F;
    6914        float f2 = 0.8F;
    6915        float f3 = 0.6F;
    6916        int i1 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4);
    6917        tessellator.setBrightness(this.renderMinY > 0.0D ? i1 : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 - 1, par4));
    6918        tessellator.setColorOpaque_F(f, f, f);
    6919        this.renderBottomFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 0));
    6920        flag = true;
    6921        tessellator.setBrightness(this.renderMaxY < 1.0D ? i1 : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3 + 1, par4));
    6922        tessellator.setColorOpaque_F(f1, f1, f1);
    6923        this.renderTopFace(par1Block, (double)par2, (double)par3, (double)par4, this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 1));
    6924        flag = true;
    6925        tessellator.setBrightness(this.renderMinZ > 0.0D ? i1 : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 - 1));
    6926        tessellator.setColorOpaque_F(f2, f2, f2);
    6927        Icon icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 2);
    6928        this.renderEastFace(par1Block, (double)par2, (double)par3, (double)par4, icon);
    6929        flag = true;
    6930        this.flipTexture = false;
    6931        tessellator.setBrightness(this.renderMaxZ < 1.0D ? i1 : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4 + 1));
    6932        tessellator.setColorOpaque_F(f2, f2, f2);
    6933        icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 3);
    6934        this.renderWestFace(par1Block, (double)par2, (double)par3, (double)par4, icon);
    6935        flag = true;
    6936        this.flipTexture = false;
    6937        tessellator.setBrightness(this.renderMinX > 0.0D ? i1 : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 - 1, par3, par4));
    6938        tessellator.setColorOpaque_F(f3, f3, f3);
    6939        icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 4);
    6940        this.renderNorthFace(par1Block, (double)par2, (double)par3, (double)par4, icon);
    6941        flag = true;
    6942        this.flipTexture = false;
    6943        tessellator.setBrightness(this.renderMaxX < 1.0D ? i1 : par1Block.getMixedBrightnessForBlock(this.blockAccess, par2 + 1, par3, par4));
    6944        tessellator.setColorOpaque_F(f3, f3, f3);
    6945        icon = this.getBlockIcon(par1Block, this.blockAccess, par2, par3, par4, 5);
    6946        this.renderSouthFace(par1Block, (double)par2, (double)par3, (double)par4, icon);
    6947        flag = true;
    6948        this.flipTexture = false;
    6949        return flag;
    6950    }
    6951
    6952    /**
    6953     * Renders the given texture to the bottom face of the block. Args: block, x, y, z, texture
    6954     */
    6955    public void renderBottomFace(Block par1Block, double par2, double par4, double par6, Icon par8Icon)
    6956    {
    6957        Tessellator tessellator = Tessellator.instance;
    6958
    6959        if (this.hasOverrideBlockTexture())
    6960        {
    6961            par8Icon = this.overrideBlockTexture;
    6962        }
    6963
    6964        double d3 = (double)par8Icon.getInterpolatedU(this.renderMinX * 16.0D);
    6965        double d4 = (double)par8Icon.getInterpolatedU(this.renderMaxX * 16.0D);
    6966        double d5 = (double)par8Icon.getInterpolatedV(this.renderMinZ * 16.0D);
    6967        double d6 = (double)par8Icon.getInterpolatedV(this.renderMaxZ * 16.0D);
    6968
    6969        if (this.renderMinX < 0.0D || this.renderMaxX > 1.0D)
    6970        {
    6971            d3 = (double)par8Icon.getMinU();
    6972            d4 = (double)par8Icon.getMaxU();
    6973        }
    6974
    6975        if (this.renderMinZ < 0.0D || this.renderMaxZ > 1.0D)
    6976        {
    6977            d5 = (double)par8Icon.getMinV();
    6978            d6 = (double)par8Icon.getMaxV();
    6979        }
    6980
    6981        double d7 = d4;
    6982        double d8 = d3;
    6983        double d9 = d5;
    6984        double d10 = d6;
    6985
    6986        if (this.uvRotateBottom == 2)
    6987        {
    6988            d3 = (double)par8Icon.getInterpolatedU(this.renderMinZ * 16.0D);
    6989            d5 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMaxX * 16.0D);
    6990            d4 = (double)par8Icon.getInterpolatedU(this.renderMaxZ * 16.0D);
    6991            d6 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMinX * 16.0D);
    6992            d9 = d5;
    6993            d10 = d6;
    6994            d7 = d3;
    6995            d8 = d4;
    6996            d5 = d6;
    6997            d6 = d9;
    6998        }
    6999        else if (this.uvRotateBottom == 1)
    7000        {
    7001            d3 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMaxZ * 16.0D);
    7002            d5 = (double)par8Icon.getInterpolatedV(this.renderMinX * 16.0D);
    7003            d4 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMinZ * 16.0D);
    7004            d6 = (double)par8Icon.getInterpolatedV(this.renderMaxX * 16.0D);
    7005            d7 = d4;
    7006            d8 = d3;
    7007            d3 = d4;
    7008            d4 = d8;
    7009            d9 = d6;
    7010            d10 = d5;
    7011        }
    7012        else if (this.uvRotateBottom == 3)
    7013        {
    7014            d3 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMinX * 16.0D);
    7015            d4 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMaxX * 16.0D);
    7016            d5 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMinZ * 16.0D);
    7017            d6 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMaxZ * 16.0D);
    7018            d7 = d4;
    7019            d8 = d3;
    7020            d9 = d5;
    7021            d10 = d6;
    7022        }
    7023
    7024        double d11 = par2 + this.renderMinX;
    7025        double d12 = par2 + this.renderMaxX;
    7026        double d13 = par4 + this.renderMinY;
    7027        double d14 = par6 + this.renderMinZ;
    7028        double d15 = par6 + this.renderMaxZ;
    7029
    7030        if (this.enableAO)
    7031        {
    7032            tessellator.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft);
    7033            tessellator.setBrightness(this.brightnessTopLeft);
    7034            tessellator.addVertexWithUV(d11, d13, d15, d8, d10);
    7035            tessellator.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft);
    7036            tessellator.setBrightness(this.brightnessBottomLeft);
    7037            tessellator.addVertexWithUV(d11, d13, d14, d3, d5);
    7038            tessellator.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight);
    7039            tessellator.setBrightness(this.brightnessBottomRight);
    7040            tessellator.addVertexWithUV(d12, d13, d14, d7, d9);
    7041            tessellator.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight);
    7042            tessellator.setBrightness(this.brightnessTopRight);
    7043            tessellator.addVertexWithUV(d12, d13, d15, d4, d6);
    7044        }
    7045        else
    7046        {
    7047            tessellator.addVertexWithUV(d11, d13, d15, d8, d10);
    7048            tessellator.addVertexWithUV(d11, d13, d14, d3, d5);
    7049            tessellator.addVertexWithUV(d12, d13, d14, d7, d9);
    7050            tessellator.addVertexWithUV(d12, d13, d15, d4, d6);
    7051        }
    7052    }
    7053
    7054    /**
    7055     * Renders the given texture to the top face of the block. Args: block, x, y, z, texture
    7056     */
    7057    public void renderTopFace(Block par1Block, double par2, double par4, double par6, Icon par8Icon)
    7058    {
    7059        Tessellator tessellator = Tessellator.instance;
    7060
    7061        if (this.hasOverrideBlockTexture())
    7062        {
    7063            par8Icon = this.overrideBlockTexture;
    7064        }
    7065
    7066        double d3 = (double)par8Icon.getInterpolatedU(this.renderMinX * 16.0D);
    7067        double d4 = (double)par8Icon.getInterpolatedU(this.renderMaxX * 16.0D);
    7068        double d5 = (double)par8Icon.getInterpolatedV(this.renderMinZ * 16.0D);
    7069        double d6 = (double)par8Icon.getInterpolatedV(this.renderMaxZ * 16.0D);
    7070
    7071        if (this.renderMinX < 0.0D || this.renderMaxX > 1.0D)
    7072        {
    7073            d3 = (double)par8Icon.getMinU();
    7074            d4 = (double)par8Icon.getMaxU();
    7075        }
    7076
    7077        if (this.renderMinZ < 0.0D || this.renderMaxZ > 1.0D)
    7078        {
    7079            d5 = (double)par8Icon.getMinV();
    7080            d6 = (double)par8Icon.getMaxV();
    7081        }
    7082
    7083        double d7 = d4;
    7084        double d8 = d3;
    7085        double d9 = d5;
    7086        double d10 = d6;
    7087
    7088        if (this.uvRotateTop == 1)
    7089        {
    7090            d3 = (double)par8Icon.getInterpolatedU(this.renderMinZ * 16.0D);
    7091            d5 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMaxX * 16.0D);
    7092            d4 = (double)par8Icon.getInterpolatedU(this.renderMaxZ * 16.0D);
    7093            d6 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMinX * 16.0D);
    7094            d9 = d5;
    7095            d10 = d6;
    7096            d7 = d3;
    7097            d8 = d4;
    7098            d5 = d6;
    7099            d6 = d9;
    7100        }
    7101        else if (this.uvRotateTop == 2)
    7102        {
    7103            d3 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMaxZ * 16.0D);
    7104            d5 = (double)par8Icon.getInterpolatedV(this.renderMinX * 16.0D);
    7105            d4 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMinZ * 16.0D);
    7106            d6 = (double)par8Icon.getInterpolatedV(this.renderMaxX * 16.0D);
    7107            d7 = d4;
    7108            d8 = d3;
    7109            d3 = d4;
    7110            d4 = d8;
    7111            d9 = d6;
    7112            d10 = d5;
    7113        }
    7114        else if (this.uvRotateTop == 3)
    7115        {
    7116            d3 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMinX * 16.0D);
    7117            d4 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMaxX * 16.0D);
    7118            d5 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMinZ * 16.0D);
    7119            d6 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMaxZ * 16.0D);
    7120            d7 = d4;
    7121            d8 = d3;
    7122            d9 = d5;
    7123            d10 = d6;
    7124        }
    7125
    7126        double d11 = par2 + this.renderMinX;
    7127        double d12 = par2 + this.renderMaxX;
    7128        double d13 = par4 + this.renderMaxY;
    7129        double d14 = par6 + this.renderMinZ;
    7130        double d15 = par6 + this.renderMaxZ;
    7131
    7132        if (this.enableAO)
    7133        {
    7134            tessellator.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft);
    7135            tessellator.setBrightness(this.brightnessTopLeft);
    7136            tessellator.addVertexWithUV(d12, d13, d15, d4, d6);
    7137            tessellator.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft);
    7138            tessellator.setBrightness(this.brightnessBottomLeft);
    7139            tessellator.addVertexWithUV(d12, d13, d14, d7, d9);
    7140            tessellator.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight);
    7141            tessellator.setBrightness(this.brightnessBottomRight);
    7142            tessellator.addVertexWithUV(d11, d13, d14, d3, d5);
    7143            tessellator.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight);
    7144            tessellator.setBrightness(this.brightnessTopRight);
    7145            tessellator.addVertexWithUV(d11, d13, d15, d8, d10);
    7146        }
    7147        else
    7148        {
    7149            tessellator.addVertexWithUV(d12, d13, d15, d4, d6);
    7150            tessellator.addVertexWithUV(d12, d13, d14, d7, d9);
    7151            tessellator.addVertexWithUV(d11, d13, d14, d3, d5);
    7152            tessellator.addVertexWithUV(d11, d13, d15, d8, d10);
    7153        }
    7154    }
    7155
    7156    /**
    7157     * Renders the given texture to the east (z-negative) face of the block.  Args: block, x, y, z, texture
    7158     */
    7159    public void renderEastFace(Block par1Block, double par2, double par4, double par6, Icon par8Icon)
    7160    {
    7161        Tessellator tessellator = Tessellator.instance;
    7162
    7163        if (this.hasOverrideBlockTexture())
    7164        {
    7165            par8Icon = this.overrideBlockTexture;
    7166        }
    7167
    7168        double d3 = (double)par8Icon.getInterpolatedU(this.renderMinX * 16.0D);
    7169        double d4 = (double)par8Icon.getInterpolatedU(this.renderMaxX * 16.0D);
    7170        double d5 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMaxY * 16.0D);
    7171        double d6 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMinY * 16.0D);
    7172        double d7;
    7173
    7174        if (this.flipTexture)
    7175        {
    7176            d7 = d3;
    7177            d3 = d4;
    7178            d4 = d7;
    7179        }
    7180
    7181        if (this.renderMinX < 0.0D || this.renderMaxX > 1.0D)
    7182        {
    7183            d3 = (double)par8Icon.getMinU();
    7184            d4 = (double)par8Icon.getMaxU();
    7185        }
    7186
    7187        if (this.renderMinY < 0.0D || this.renderMaxY > 1.0D)
    7188        {
    7189            d5 = (double)par8Icon.getMinV();
    7190            d6 = (double)par8Icon.getMaxV();
    7191        }
    7192
    7193        d7 = d4;
    7194        double d8 = d3;
    7195        double d9 = d5;
    7196        double d10 = d6;
    7197
    7198        if (this.uvRotateEast == 2)
    7199        {
    7200            d3 = (double)par8Icon.getInterpolatedU(this.renderMinY * 16.0D);
    7201            d5 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMinX * 16.0D);
    7202            d4 = (double)par8Icon.getInterpolatedU(this.renderMaxY * 16.0D);
    7203            d6 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMaxX * 16.0D);
    7204            d9 = d5;
    7205            d10 = d6;
    7206            d7 = d3;
    7207            d8 = d4;
    7208            d5 = d6;
    7209            d6 = d9;
    7210        }
    7211        else if (this.uvRotateEast == 1)
    7212        {
    7213            d3 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMaxY * 16.0D);
    7214            d5 = (double)par8Icon.getInterpolatedV(this.renderMaxX * 16.0D);
    7215            d4 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMinY * 16.0D);
    7216            d6 = (double)par8Icon.getInterpolatedV(this.renderMinX * 16.0D);
    7217            d7 = d4;
    7218            d8 = d3;
    7219            d3 = d4;
    7220            d4 = d8;
    7221            d9 = d6;
    7222            d10 = d5;
    7223        }
    7224        else if (this.uvRotateEast == 3)
    7225        {
    7226            d3 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMinX * 16.0D);
    7227            d4 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMaxX * 16.0D);
    7228            d5 = (double)par8Icon.getInterpolatedV(this.renderMaxY * 16.0D);
    7229            d6 = (double)par8Icon.getInterpolatedV(this.renderMinY * 16.0D);
    7230            d7 = d4;
    7231            d8 = d3;
    7232            d9 = d5;
    7233            d10 = d6;
    7234        }
    7235
    7236        double d11 = par2 + this.renderMinX;
    7237        double d12 = par2 + this.renderMaxX;
    7238        double d13 = par4 + this.renderMinY;
    7239        double d14 = par4 + this.renderMaxY;
    7240        double d15 = par6 + this.renderMinZ;
    7241
    7242        if (this.enableAO)
    7243        {
    7244            tessellator.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft);
    7245            tessellator.setBrightness(this.brightnessTopLeft);
    7246            tessellator.addVertexWithUV(d11, d14, d15, d7, d9);
    7247            tessellator.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft);
    7248            tessellator.setBrightness(this.brightnessBottomLeft);
    7249            tessellator.addVertexWithUV(d12, d14, d15, d3, d5);
    7250            tessellator.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight);
    7251            tessellator.setBrightness(this.brightnessBottomRight);
    7252            tessellator.addVertexWithUV(d12, d13, d15, d8, d10);
    7253            tessellator.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight);
    7254            tessellator.setBrightness(this.brightnessTopRight);
    7255            tessellator.addVertexWithUV(d11, d13, d15, d4, d6);
    7256        }
    7257        else
    7258        {
    7259            tessellator.addVertexWithUV(d11, d14, d15, d7, d9);
    7260            tessellator.addVertexWithUV(d12, d14, d15, d3, d5);
    7261            tessellator.addVertexWithUV(d12, d13, d15, d8, d10);
    7262            tessellator.addVertexWithUV(d11, d13, d15, d4, d6);
    7263        }
    7264    }
    7265
    7266    /**
    7267     * Renders the given texture to the west (z-positive) face of the block.  Args: block, x, y, z, texture
    7268     */
    7269    public void renderWestFace(Block par1Block, double par2, double par4, double par6, Icon par8Icon)
    7270    {
    7271        Tessellator tessellator = Tessellator.instance;
    7272
    7273        if (this.hasOverrideBlockTexture())
    7274        {
    7275            par8Icon = this.overrideBlockTexture;
    7276        }
    7277
    7278        double d3 = (double)par8Icon.getInterpolatedU(this.renderMinX * 16.0D);
    7279        double d4 = (double)par8Icon.getInterpolatedU(this.renderMaxX * 16.0D);
    7280        double d5 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMaxY * 16.0D);
    7281        double d6 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMinY * 16.0D);
    7282        double d7;
    7283
    7284        if (this.flipTexture)
    7285        {
    7286            d7 = d3;
    7287            d3 = d4;
    7288            d4 = d7;
    7289        }
    7290
    7291        if (this.renderMinX < 0.0D || this.renderMaxX > 1.0D)
    7292        {
    7293            d3 = (double)par8Icon.getMinU();
    7294            d4 = (double)par8Icon.getMaxU();
    7295        }
    7296
    7297        if (this.renderMinY < 0.0D || this.renderMaxY > 1.0D)
    7298        {
    7299            d5 = (double)par8Icon.getMinV();
    7300            d6 = (double)par8Icon.getMaxV();
    7301        }
    7302
    7303        d7 = d4;
    7304        double d8 = d3;
    7305        double d9 = d5;
    7306        double d10 = d6;
    7307
    7308        if (this.uvRotateWest == 1)
    7309        {
    7310            d3 = (double)par8Icon.getInterpolatedU(this.renderMinY * 16.0D);
    7311            d6 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMinX * 16.0D);
    7312            d4 = (double)par8Icon.getInterpolatedU(this.renderMaxY * 16.0D);
    7313            d5 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMaxX * 16.0D);
    7314            d9 = d5;
    7315            d10 = d6;
    7316            d7 = d3;
    7317            d8 = d4;
    7318            d5 = d6;
    7319            d6 = d9;
    7320        }
    7321        else if (this.uvRotateWest == 2)
    7322        {
    7323            d3 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMaxY * 16.0D);
    7324            d5 = (double)par8Icon.getInterpolatedV(this.renderMinX * 16.0D);
    7325            d4 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMinY * 16.0D);
    7326            d6 = (double)par8Icon.getInterpolatedV(this.renderMaxX * 16.0D);
    7327            d7 = d4;
    7328            d8 = d3;
    7329            d3 = d4;
    7330            d4 = d8;
    7331            d9 = d6;
    7332            d10 = d5;
    7333        }
    7334        else if (this.uvRotateWest == 3)
    7335        {
    7336            d3 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMinX * 16.0D);
    7337            d4 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMaxX * 16.0D);
    7338            d5 = (double)par8Icon.getInterpolatedV(this.renderMaxY * 16.0D);
    7339            d6 = (double)par8Icon.getInterpolatedV(this.renderMinY * 16.0D);
    7340            d7 = d4;
    7341            d8 = d3;
    7342            d9 = d5;
    7343            d10 = d6;
    7344        }
    7345
    7346        double d11 = par2 + this.renderMinX;
    7347        double d12 = par2 + this.renderMaxX;
    7348        double d13 = par4 + this.renderMinY;
    7349        double d14 = par4 + this.renderMaxY;
    7350        double d15 = par6 + this.renderMaxZ;
    7351
    7352        if (this.enableAO)
    7353        {
    7354            tessellator.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft);
    7355            tessellator.setBrightness(this.brightnessTopLeft);
    7356            tessellator.addVertexWithUV(d11, d14, d15, d3, d5);
    7357            tessellator.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft);
    7358            tessellator.setBrightness(this.brightnessBottomLeft);
    7359            tessellator.addVertexWithUV(d11, d13, d15, d8, d10);
    7360            tessellator.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight);
    7361            tessellator.setBrightness(this.brightnessBottomRight);
    7362            tessellator.addVertexWithUV(d12, d13, d15, d4, d6);
    7363            tessellator.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight);
    7364            tessellator.setBrightness(this.brightnessTopRight);
    7365            tessellator.addVertexWithUV(d12, d14, d15, d7, d9);
    7366        }
    7367        else
    7368        {
    7369            tessellator.addVertexWithUV(d11, d14, d15, d3, d5);
    7370            tessellator.addVertexWithUV(d11, d13, d15, d8, d10);
    7371            tessellator.addVertexWithUV(d12, d13, d15, d4, d6);
    7372            tessellator.addVertexWithUV(d12, d14, d15, d7, d9);
    7373        }
    7374    }
    7375
    7376    /**
    7377     * Renders the given texture to the north (x-negative) face of the block.  Args: block, x, y, z, texture
    7378     */
    7379    public void renderNorthFace(Block par1Block, double par2, double par4, double par6, Icon par8Icon)
    7380    {
    7381        Tessellator tessellator = Tessellator.instance;
    7382
    7383        if (this.hasOverrideBlockTexture())
    7384        {
    7385            par8Icon = this.overrideBlockTexture;
    7386        }
    7387
    7388        double d3 = (double)par8Icon.getInterpolatedU(this.renderMinZ * 16.0D);
    7389        double d4 = (double)par8Icon.getInterpolatedU(this.renderMaxZ * 16.0D);
    7390        double d5 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMaxY * 16.0D);
    7391        double d6 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMinY * 16.0D);
    7392        double d7;
    7393
    7394        if (this.flipTexture)
    7395        {
    7396            d7 = d3;
    7397            d3 = d4;
    7398            d4 = d7;
    7399        }
    7400
    7401        if (this.renderMinZ < 0.0D || this.renderMaxZ > 1.0D)
    7402        {
    7403            d3 = (double)par8Icon.getMinU();
    7404            d4 = (double)par8Icon.getMaxU();
    7405        }
    7406
    7407        if (this.renderMinY < 0.0D || this.renderMaxY > 1.0D)
    7408        {
    7409            d5 = (double)par8Icon.getMinV();
    7410            d6 = (double)par8Icon.getMaxV();
    7411        }
    7412
    7413        d7 = d4;
    7414        double d8 = d3;
    7415        double d9 = d5;
    7416        double d10 = d6;
    7417
    7418        if (this.uvRotateNorth == 1)
    7419        {
    7420            d3 = (double)par8Icon.getInterpolatedU(this.renderMinY * 16.0D);
    7421            d5 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMaxZ * 16.0D);
    7422            d4 = (double)par8Icon.getInterpolatedU(this.renderMaxY * 16.0D);
    7423            d6 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMinZ * 16.0D);
    7424            d9 = d5;
    7425            d10 = d6;
    7426            d7 = d3;
    7427            d8 = d4;
    7428            d5 = d6;
    7429            d6 = d9;
    7430        }
    7431        else if (this.uvRotateNorth == 2)
    7432        {
    7433            d3 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMaxY * 16.0D);
    7434            d5 = (double)par8Icon.getInterpolatedV(this.renderMinZ * 16.0D);
    7435            d4 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMinY * 16.0D);
    7436            d6 = (double)par8Icon.getInterpolatedV(this.renderMaxZ * 16.0D);
    7437            d7 = d4;
    7438            d8 = d3;
    7439            d3 = d4;
    7440            d4 = d8;
    7441            d9 = d6;
    7442            d10 = d5;
    7443        }
    7444        else if (this.uvRotateNorth == 3)
    7445        {
    7446            d3 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMinZ * 16.0D);
    7447            d4 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMaxZ * 16.0D);
    7448            d5 = (double)par8Icon.getInterpolatedV(this.renderMaxY * 16.0D);
    7449            d6 = (double)par8Icon.getInterpolatedV(this.renderMinY * 16.0D);
    7450            d7 = d4;
    7451            d8 = d3;
    7452            d9 = d5;
    7453            d10 = d6;
    7454        }
    7455
    7456        double d11 = par2 + this.renderMinX;
    7457        double d12 = par4 + this.renderMinY;
    7458        double d13 = par4 + this.renderMaxY;
    7459        double d14 = par6 + this.renderMinZ;
    7460        double d15 = par6 + this.renderMaxZ;
    7461
    7462        if (this.enableAO)
    7463        {
    7464            tessellator.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft);
    7465            tessellator.setBrightness(this.brightnessTopLeft);
    7466            tessellator.addVertexWithUV(d11, d13, d15, d7, d9);
    7467            tessellator.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft);
    7468            tessellator.setBrightness(this.brightnessBottomLeft);
    7469            tessellator.addVertexWithUV(d11, d13, d14, d3, d5);
    7470            tessellator.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight);
    7471            tessellator.setBrightness(this.brightnessBottomRight);
    7472            tessellator.addVertexWithUV(d11, d12, d14, d8, d10);
    7473            tessellator.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight);
    7474            tessellator.setBrightness(this.brightnessTopRight);
    7475            tessellator.addVertexWithUV(d11, d12, d15, d4, d6);
    7476        }
    7477        else
    7478        {
    7479            tessellator.addVertexWithUV(d11, d13, d15, d7, d9);
    7480            tessellator.addVertexWithUV(d11, d13, d14, d3, d5);
    7481            tessellator.addVertexWithUV(d11, d12, d14, d8, d10);
    7482            tessellator.addVertexWithUV(d11, d12, d15, d4, d6);
    7483        }
    7484    }
    7485
    7486    /**
    7487     * Renders the given texture to the south (x-positive) face of the block.  Args: block, x, y, z, texture
    7488     */
    7489    public void renderSouthFace(Block par1Block, double par2, double par4, double par6, Icon par8Icon)
    7490    {
    7491        Tessellator tessellator = Tessellator.instance;
    7492
    7493        if (this.hasOverrideBlockTexture())
    7494        {
    7495            par8Icon = this.overrideBlockTexture;
    7496        }
    7497
    7498        double d3 = (double)par8Icon.getInterpolatedU(this.renderMinZ * 16.0D);
    7499        double d4 = (double)par8Icon.getInterpolatedU(this.renderMaxZ * 16.0D);
    7500        double d5 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMaxY * 16.0D);
    7501        double d6 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMinY * 16.0D);
    7502        double d7;
    7503
    7504        if (this.flipTexture)
    7505        {
    7506            d7 = d3;
    7507            d3 = d4;
    7508            d4 = d7;
    7509        }
    7510
    7511        if (this.renderMinZ < 0.0D || this.renderMaxZ > 1.0D)
    7512        {
    7513            d3 = (double)par8Icon.getMinU();
    7514            d4 = (double)par8Icon.getMaxU();
    7515        }
    7516
    7517        if (this.renderMinY < 0.0D || this.renderMaxY > 1.0D)
    7518        {
    7519            d5 = (double)par8Icon.getMinV();
    7520            d6 = (double)par8Icon.getMaxV();
    7521        }
    7522
    7523        d7 = d4;
    7524        double d8 = d3;
    7525        double d9 = d5;
    7526        double d10 = d6;
    7527
    7528        if (this.uvRotateSouth == 2)
    7529        {
    7530            d3 = (double)par8Icon.getInterpolatedU(this.renderMinY * 16.0D);
    7531            d5 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMinZ * 16.0D);
    7532            d4 = (double)par8Icon.getInterpolatedU(this.renderMaxY * 16.0D);
    7533            d6 = (double)par8Icon.getInterpolatedV(16.0D - this.renderMaxZ * 16.0D);
    7534            d9 = d5;
    7535            d10 = d6;
    7536            d7 = d3;
    7537            d8 = d4;
    7538            d5 = d6;
    7539            d6 = d9;
    7540        }
    7541        else if (this.uvRotateSouth == 1)
    7542        {
    7543            d3 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMaxY * 16.0D);
    7544            d5 = (double)par8Icon.getInterpolatedV(this.renderMaxZ * 16.0D);
    7545            d4 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMinY * 16.0D);
    7546            d6 = (double)par8Icon.getInterpolatedV(this.renderMinZ * 16.0D);
    7547            d7 = d4;
    7548            d8 = d3;
    7549            d3 = d4;
    7550            d4 = d8;
    7551            d9 = d6;
    7552            d10 = d5;
    7553        }
    7554        else if (this.uvRotateSouth == 3)
    7555        {
    7556            d3 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMinZ * 16.0D);
    7557            d4 = (double)par8Icon.getInterpolatedU(16.0D - this.renderMaxZ * 16.0D);
    7558            d5 = (double)par8Icon.getInterpolatedV(this.renderMaxY * 16.0D);
    7559            d6 = (double)par8Icon.getInterpolatedV(this.renderMinY * 16.0D);
    7560            d7 = d4;
    7561            d8 = d3;
    7562            d9 = d5;
    7563            d10 = d6;
    7564        }
    7565
    7566        double d11 = par2 + this.renderMaxX;
    7567        double d12 = par4 + this.renderMinY;
    7568        double d13 = par4 + this.renderMaxY;
    7569        double d14 = par6 + this.renderMinZ;
    7570        double d15 = par6 + this.renderMaxZ;
    7571
    7572        if (this.enableAO)
    7573        {
    7574            tessellator.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft);
    7575            tessellator.setBrightness(this.brightnessTopLeft);
    7576            tessellator.addVertexWithUV(d11, d12, d15, d8, d10);
    7577            tessellator.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft);
    7578            tessellator.setBrightness(this.brightnessBottomLeft);
    7579            tessellator.addVertexWithUV(d11, d12, d14, d4, d6);
    7580            tessellator.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight);
    7581            tessellator.setBrightness(this.brightnessBottomRight);
    7582            tessellator.addVertexWithUV(d11, d13, d14, d7, d9);
    7583            tessellator.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight);
    7584            tessellator.setBrightness(this.brightnessTopRight);
    7585            tessellator.addVertexWithUV(d11, d13, d15, d3, d5);
    7586        }
    7587        else
    7588        {
    7589            tessellator.addVertexWithUV(d11, d12, d15, d8, d10);
    7590            tessellator.addVertexWithUV(d11, d12, d14, d4, d6);
    7591            tessellator.addVertexWithUV(d11, d13, d14, d7, d9);
    7592            tessellator.addVertexWithUV(d11, d13, d15, d3, d5);
    7593        }
    7594    }
    7595
    7596    /**
    7597     * Is called to render the image of a block on an inventory, as a held item, or as a an item on the ground
    7598     */
    7599    public void renderBlockAsItem(Block par1Block, int par2, float par3)
    7600    {
    7601        Tessellator tessellator = Tessellator.instance;
    7602        boolean flag = par1Block.blockID == Block.grass.blockID;
    7603
    7604        if (par1Block == Block.dispenser || par1Block == Block.dropper || par1Block == Block.furnaceIdle)
    7605        {
    7606            par2 = 3;
    7607        }
    7608
    7609        int j;
    7610        float f1;
    7611        float f2;
    7612        float f3;
    7613
    7614        if (this.useInventoryTint)
    7615        {
    7616            j = par1Block.getRenderColor(par2);
    7617
    7618            if (flag)
    7619            {
    7620                j = 16777215;
    7621            }
    7622
    7623            f1 = (float)(j >> 16 & 255) / 255.0F;
    7624            f2 = (float)(j >> 8 & 255) / 255.0F;
    7625            f3 = (float)(j & 255) / 255.0F;
    7626            GL11.glColor4f(f1 * par3, f2 * par3, f3 * par3, 1.0F);
    7627        }
    7628
    7629        j = par1Block.getRenderType();
    7630        this.setRenderBoundsFromBlock(par1Block);
    7631        int k;
    7632
    7633        if (j != 0 && j != 31 && j != 39 && j != 16 && j != 26)
    7634        {
    7635            if (j == 1)
    7636            {
    7637                tessellator.startDrawingQuads();
    7638                tessellator.setNormal(0.0F, -1.0F, 0.0F);
    7639                this.drawCrossedSquares(par1Block, par2, -0.5D, -0.5D, -0.5D, 1.0F);
    7640                tessellator.draw();
    7641            }
    7642            else if (j == 19)
    7643            {
    7644                tessellator.startDrawingQuads();
    7645                tessellator.setNormal(0.0F, -1.0F, 0.0F);
    7646                par1Block.setBlockBoundsForItemRender();
    7647                this.renderBlockStemSmall(par1Block, par2, this.renderMaxY, -0.5D, -0.5D, -0.5D);
    7648                tessellator.draw();
    7649            }
    7650            else if (j == 23)
    7651            {
    7652                tessellator.startDrawingQuads();
    7653                tessellator.setNormal(0.0F, -1.0F, 0.0F);
    7654                par1Block.setBlockBoundsForItemRender();
    7655                tessellator.draw();
    7656            }
    7657            else if (j == 13)
    7658            {
    7659                par1Block.setBlockBoundsForItemRender();
    7660                GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
    7661                f1 = 0.0625F;
    7662                tessellator.startDrawingQuads();
    7663                tessellator.setNormal(0.0F, -1.0F, 0.0F);
    7664                this.renderBottomFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 0));
    7665                tessellator.draw();
    7666                tessellator.startDrawingQuads();
    7667                tessellator.setNormal(0.0F, 1.0F, 0.0F);
    7668                this.renderTopFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 1));
    7669                tessellator.draw();
    7670                tessellator.startDrawingQuads();
    7671                tessellator.setNormal(0.0F, 0.0F, -1.0F);
    7672                tessellator.addTranslation(0.0F, 0.0F, f1);
    7673                this.renderEastFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 2));
    7674                tessellator.addTranslation(0.0F, 0.0F, -f1);
    7675                tessellator.draw();
    7676                tessellator.startDrawingQuads();
    7677                tessellator.setNormal(0.0F, 0.0F, 1.0F);
    7678                tessellator.addTranslation(0.0F, 0.0F, -f1);
    7679                this.renderWestFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 3));
    7680                tessellator.addTranslation(0.0F, 0.0F, f1);
    7681                tessellator.draw();
    7682                tessellator.startDrawingQuads();
    7683                tessellator.setNormal(-1.0F, 0.0F, 0.0F);
    7684                tessellator.addTranslation(f1, 0.0F, 0.0F);
    7685                this.renderNorthFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 4));
    7686                tessellator.addTranslation(-f1, 0.0F, 0.0F);
    7687                tessellator.draw();
    7688                tessellator.startDrawingQuads();
    7689                tessellator.setNormal(1.0F, 0.0F, 0.0F);
    7690                tessellator.addTranslation(-f1, 0.0F, 0.0F);
    7691                this.renderSouthFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 5));
    7692                tessellator.addTranslation(f1, 0.0F, 0.0F);
    7693                tessellator.draw();
    7694                GL11.glTranslatef(0.5F, 0.5F, 0.5F);
    7695            }
    7696            else if (j == 22)
    7697            {
    7698                GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
    7699                GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
    7700                ChestItemRenderHelper.instance.renderChest(par1Block, par2, par3);
    7701                GL11.glEnable(GL12.GL_RESCALE_NORMAL);
    7702            }
    7703            else if (j == 6)
    7704            {
    7705                tessellator.startDrawingQuads();
    7706                tessellator.setNormal(0.0F, -1.0F, 0.0F);
    7707                this.renderBlockCropsImpl(par1Block, par2, -0.5D, -0.5D, -0.5D);
    7708                tessellator.draw();
    7709            }
    7710            else if (j == 2)
    7711            {
    7712                tessellator.startDrawingQuads();
    7713                tessellator.setNormal(0.0F, -1.0F, 0.0F);
    7714                this.renderTorchAtAngle(par1Block, -0.5D, -0.5D, -0.5D, 0.0D, 0.0D, 0);
    7715                tessellator.draw();
    7716            }
    7717            else if (j == 10)
    7718            {
    7719                for (k = 0; k < 2; ++k)
    7720                {
    7721                    if (k == 0)
    7722                    {
    7723                        this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.5D);
    7724                    }
    7725
    7726                    if (k == 1)
    7727                    {
    7728                        this.setRenderBounds(0.0D, 0.0D, 0.5D, 1.0D, 0.5D, 1.0D);
    7729                    }
    7730
    7731                    GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
    7732                    tessellator.startDrawingQuads();
    7733                    tessellator.setNormal(0.0F, -1.0F, 0.0F);
    7734                    this.renderBottomFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 0));
    7735                    tessellator.draw();
    7736                    tessellator.startDrawingQuads();
    7737                    tessellator.setNormal(0.0F, 1.0F, 0.0F);
    7738                    this.renderTopFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 1));
    7739                    tessellator.draw();
    7740                    tessellator.startDrawingQuads();
    7741                    tessellator.setNormal(0.0F, 0.0F, -1.0F);
    7742                    this.renderEastFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 2));
    7743                    tessellator.draw();
    7744                    tessellator.startDrawingQuads();
    7745                    tessellator.setNormal(0.0F, 0.0F, 1.0F);
    7746                    this.renderWestFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 3));
    7747                    tessellator.draw();
    7748                    tessellator.startDrawingQuads();
    7749                    tessellator.setNormal(-1.0F, 0.0F, 0.0F);
    7750                    this.renderNorthFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 4));
    7751                    tessellator.draw();
    7752                    tessellator.startDrawingQuads();
    7753                    tessellator.setNormal(1.0F, 0.0F, 0.0F);
    7754                    this.renderSouthFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 5));
    7755                    tessellator.draw();
    7756                    GL11.glTranslatef(0.5F, 0.5F, 0.5F);
    7757                }
    7758            }
    7759            else if (j == 27)
    7760            {
    7761                k = 0;
    7762                GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
    7763                tessellator.startDrawingQuads();
    7764
    7765                for (int l = 0; l < 8; ++l)
    7766                {
    7767                    byte b0 = 0;
    7768                    byte b1 = 1;
    7769
    7770                    if (l == 0)
    7771                    {
    7772                        b0 = 2;
    7773                    }
    7774
    7775                    if (l == 1)
    7776                    {
    7777                        b0 = 3;
    7778                    }
    7779
    7780                    if (l == 2)
    7781                    {
    7782                        b0 = 4;
    7783                    }
    7784
    7785                    if (l == 3)
    7786                    {
    7787                        b0 = 5;
    7788                        b1 = 2;
    7789                    }
    7790
    7791                    if (l == 4)
    7792                    {
    7793                        b0 = 6;
    7794                        b1 = 3;
    7795                    }
    7796
    7797                    if (l == 5)
    7798                    {
    7799                        b0 = 7;
    7800                        b1 = 5;
    7801                    }
    7802
    7803                    if (l == 6)
    7804                    {
    7805                        b0 = 6;
    7806                        b1 = 2;
    7807                    }
    7808
    7809                    if (l == 7)
    7810                    {
    7811                        b0 = 3;
    7812                    }
    7813
    7814                    float f4 = (float)b0 / 16.0F;
    7815                    float f5 = 1.0F - (float)k / 16.0F;
    7816                    float f6 = 1.0F - (float)(k + b1) / 16.0F;
    7817                    k += b1;
    7818                    this.setRenderBounds((double)(0.5F - f4), (double)f6, (double)(0.5F - f4), (double)(0.5F + f4), (double)f5, (double)(0.5F + f4));
    7819                    tessellator.setNormal(0.0F, -1.0F, 0.0F);
    7820                    this.renderBottomFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 0));
    7821                    tessellator.setNormal(0.0F, 1.0F, 0.0F);
    7822                    this.renderTopFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 1));
    7823                    tessellator.setNormal(0.0F, 0.0F, -1.0F);
    7824                    this.renderEastFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 2));
    7825                    tessellator.setNormal(0.0F, 0.0F, 1.0F);
    7826                    this.renderWestFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 3));
    7827                    tessellator.setNormal(-1.0F, 0.0F, 0.0F);
    7828                    this.renderNorthFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 4));
    7829                    tessellator.setNormal(1.0F, 0.0F, 0.0F);
    7830                    this.renderSouthFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 5));
    7831                }
    7832
    7833                tessellator.draw();
    7834                GL11.glTranslatef(0.5F, 0.5F, 0.5F);
    7835                this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
    7836            }
    7837            else if (j == 11)
    7838            {
    7839                for (k = 0; k < 4; ++k)
    7840                {
    7841                    f2 = 0.125F;
    7842
    7843                    if (k == 0)
    7844                    {
    7845                        this.setRenderBounds((double)(0.5F - f2), 0.0D, 0.0D, (double)(0.5F + f2), 1.0D, (double)(f2 * 2.0F));
    7846                    }
    7847
    7848                    if (k == 1)
    7849                    {
    7850                        this.setRenderBounds((double)(0.5F - f2), 0.0D, (double)(1.0F - f2 * 2.0F), (double)(0.5F + f2), 1.0D, 1.0D);
    7851                    }
    7852
    7853                    f2 = 0.0625F;
    7854
    7855                    if (k == 2)
    7856                    {
    7857                        this.setRenderBounds((double)(0.5F - f2), (double)(1.0F - f2 * 3.0F), (double)(-f2 * 2.0F), (double)(0.5F + f2), (double)(1.0F - f2), (double)(1.0F + f2 * 2.0F));
    7858                    }
    7859
    7860                    if (k == 3)
    7861                    {
    7862                        this.setRenderBounds((double)(0.5F - f2), (double)(0.5F - f2 * 3.0F), (double)(-f2 * 2.0F), (double)(0.5F + f2), (double)(0.5F - f2), (double)(1.0F + f2 * 2.0F));
    7863                    }
    7864
    7865                    GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
    7866                    tessellator.startDrawingQuads();
    7867                    tessellator.setNormal(0.0F, -1.0F, 0.0F);
    7868                    this.renderBottomFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 0));
    7869                    tessellator.draw();
    7870                    tessellator.startDrawingQuads();
    7871                    tessellator.setNormal(0.0F, 1.0F, 0.0F);
    7872                    this.renderTopFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 1));
    7873                    tessellator.draw();
    7874                    tessellator.startDrawingQuads();
    7875                    tessellator.setNormal(0.0F, 0.0F, -1.0F);
    7876                    this.renderEastFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 2));
    7877                    tessellator.draw();
    7878                    tessellator.startDrawingQuads();
    7879                    tessellator.setNormal(0.0F, 0.0F, 1.0F);
    7880                    this.renderWestFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 3));
    7881                    tessellator.draw();
    7882                    tessellator.startDrawingQuads();
    7883                    tessellator.setNormal(-1.0F, 0.0F, 0.0F);
    7884                    this.renderNorthFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 4));
    7885                    tessellator.draw();
    7886                    tessellator.startDrawingQuads();
    7887                    tessellator.setNormal(1.0F, 0.0F, 0.0F);
    7888                    this.renderSouthFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 5));
    7889                    tessellator.draw();
    7890                    GL11.glTranslatef(0.5F, 0.5F, 0.5F);
    7891                }
    7892
    7893                this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
    7894            }
    7895            else if (j == 21)
    7896            {
    7897                for (k = 0; k < 3; ++k)
    7898                {
    7899                    f2 = 0.0625F;
    7900
    7901                    if (k == 0)
    7902                    {
    7903                        this.setRenderBounds((double)(0.5F - f2), 0.30000001192092896D, 0.0D, (double)(0.5F + f2), 1.0D, (double)(f2 * 2.0F));
    7904                    }
    7905
    7906                    if (k == 1)
    7907                    {
    7908                        this.setRenderBounds((double)(0.5F - f2), 0.30000001192092896D, (double)(1.0F - f2 * 2.0F), (double)(0.5F + f2), 1.0D, 1.0D);
    7909                    }
    7910
    7911                    f2 = 0.0625F;
    7912
    7913                    if (k == 2)
    7914                    {
    7915                        this.setRenderBounds((double)(0.5F - f2), 0.5D, 0.0D, (double)(0.5F + f2), (double)(1.0F - f2), 1.0D);
    7916                    }
    7917
    7918                    GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
    7919                    tessellator.startDrawingQuads();
    7920                    tessellator.setNormal(0.0F, -1.0F, 0.0F);
    7921                    this.renderBottomFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 0));
    7922                    tessellator.draw();
    7923                    tessellator.startDrawingQuads();
    7924                    tessellator.setNormal(0.0F, 1.0F, 0.0F);
    7925                    this.renderTopFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 1));
    7926                    tessellator.draw();
    7927                    tessellator.startDrawingQuads();
    7928                    tessellator.setNormal(0.0F, 0.0F, -1.0F);
    7929                    this.renderEastFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 2));
    7930                    tessellator.draw();
    7931                    tessellator.startDrawingQuads();
    7932                    tessellator.setNormal(0.0F, 0.0F, 1.0F);
    7933                    this.renderWestFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 3));
    7934                    tessellator.draw();
    7935                    tessellator.startDrawingQuads();
    7936                    tessellator.setNormal(-1.0F, 0.0F, 0.0F);
    7937                    this.renderNorthFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 4));
    7938                    tessellator.draw();
    7939                    tessellator.startDrawingQuads();
    7940                    tessellator.setNormal(1.0F, 0.0F, 0.0F);
    7941                    this.renderSouthFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(par1Block, 5));
    7942                    tessellator.draw();
    7943                    GL11.glTranslatef(0.5F, 0.5F, 0.5F);
    7944                }
    7945            }
    7946            else if (j == 32)
    7947            {
    7948                for (k = 0; k < 2; ++k)
    7949                {
    7950                    if (k == 0)
    7951                    {
    7952                        this.setRenderBounds(0.0D, 0.0D, 0.3125D, 1.0D, 0.8125D, 0.6875D);
    7953                    }
    7954
    7955                    if (k == 1)
    7956                    {
    7957                        this.setRenderBounds(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D);
    7958                    }
    7959
    7960                    GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
    7961                    tessellator.startDrawingQuads();
    7962                    tessellator.setNormal(0.0F, -1.0F, 0.0F);
    7963                    this.renderBottomFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 0, par2));
    7964                    tessellator.draw();
    7965                    tessellator.startDrawingQuads();
    7966                    tessellator.setNormal(0.0F, 1.0F, 0.0F);
    7967                    this.renderTopFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 1, par2));
    7968                    tessellator.draw();
    7969                    tessellator.startDrawingQuads();
    7970                    tessellator.setNormal(0.0F, 0.0F, -1.0F);
    7971                    this.renderEastFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 2, par2));
    7972                    tessellator.draw();
    7973                    tessellator.startDrawingQuads();
    7974                    tessellator.setNormal(0.0F, 0.0F, 1.0F);
    7975                    this.renderWestFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 3, par2));
    7976                    tessellator.draw();
    7977                    tessellator.startDrawingQuads();
    7978                    tessellator.setNormal(-1.0F, 0.0F, 0.0F);
    7979                    this.renderNorthFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 4, par2));
    7980                    tessellator.draw();
    7981                    tessellator.startDrawingQuads();
    7982                    tessellator.setNormal(1.0F, 0.0F, 0.0F);
    7983                    this.renderSouthFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 5, par2));
    7984                    tessellator.draw();
    7985                    GL11.glTranslatef(0.5F, 0.5F, 0.5F);
    7986                }
    7987
    7988                this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
    7989            }
    7990            else if (j == 35)
    7991            {
    7992                GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
    7993                this.renderBlockAnvilOrient((BlockAnvil)par1Block, 0, 0, 0, par2, true);
    7994                GL11.glTranslatef(0.5F, 0.5F, 0.5F);
    7995            }
    7996            else if (j == 34)
    7997            {
    7998                for (k = 0; k < 3; ++k)
    7999                {
    8000                    if (k == 0)
    8001                    {
    8002                        this.setRenderBounds(0.125D, 0.0D, 0.125D, 0.875D, 0.1875D, 0.875D);
    8003                        this.setOverrideBlockTexture(this.getBlockIcon(Block.obsidian));
    8004                    }
    8005                    else if (k == 1)
    8006                    {
    8007                        this.setRenderBounds(0.1875D, 0.1875D, 0.1875D, 0.8125D, 0.875D, 0.8125D);
    8008                        this.setOverrideBlockTexture(Block.beacon.func_94446_i());
    8009                    }
    8010                    else if (k == 2)
    8011                    {
    8012                        this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
    8013                        this.setOverrideBlockTexture(this.getBlockIcon(Block.glass));
    8014                    }
    8015
    8016                    GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
    8017                    tessellator.startDrawingQuads();
    8018                    tessellator.setNormal(0.0F, -1.0F, 0.0F);
    8019                    this.renderBottomFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 0, par2));
    8020                    tessellator.draw();
    8021                    tessellator.startDrawingQuads();
    8022                    tessellator.setNormal(0.0F, 1.0F, 0.0F);
    8023                    this.renderTopFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 1, par2));
    8024                    tessellator.draw();
    8025                    tessellator.startDrawingQuads();
    8026                    tessellator.setNormal(0.0F, 0.0F, -1.0F);
    8027                    this.renderEastFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 2, par2));
    8028                    tessellator.draw();
    8029                    tessellator.startDrawingQuads();
    8030                    tessellator.setNormal(0.0F, 0.0F, 1.0F);
    8031                    this.renderWestFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 3, par2));
    8032                    tessellator.draw();
    8033                    tessellator.startDrawingQuads();
    8034                    tessellator.setNormal(-1.0F, 0.0F, 0.0F);
    8035                    this.renderNorthFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 4, par2));
    8036                    tessellator.draw();
    8037                    tessellator.startDrawingQuads();
    8038                    tessellator.setNormal(1.0F, 0.0F, 0.0F);
    8039                    this.renderSouthFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 5, par2));
    8040                    tessellator.draw();
    8041                    GL11.glTranslatef(0.5F, 0.5F, 0.5F);
    8042                }
    8043
    8044                this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
    8045                this.clearOverrideBlockTexture();
    8046            }
    8047            else if (j == 38)
    8048            {
    8049                GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
    8050                this.renderBlockHopperMetadata((BlockHopper)par1Block, 0, 0, 0, 0, true);
    8051                GL11.glTranslatef(0.5F, 0.5F, 0.5F);
    8052            }
    8053            else
    8054            {
    8055                FMLRenderAccessLibrary.renderInventoryBlock(this, par1Block, par2, j);
    8056            }
    8057        }
    8058        else
    8059        {
    8060            if (j == 16)
    8061            {
    8062                par2 = 1;
    8063            }
    8064
    8065            par1Block.setBlockBoundsForItemRender();
    8066            this.setRenderBoundsFromBlock(par1Block);
    8067            GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
    8068            GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
    8069            tessellator.startDrawingQuads();
    8070            tessellator.setNormal(0.0F, -1.0F, 0.0F);
    8071            this.renderBottomFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 0, par2));
    8072            tessellator.draw();
    8073
    8074            if (flag && this.useInventoryTint)
    8075            {
    8076                k = par1Block.getRenderColor(par2);
    8077                f2 = (float)(k >> 16 & 255) / 255.0F;
    8078                f3 = (float)(k >> 8 & 255) / 255.0F;
    8079                float f7 = (float)(k & 255) / 255.0F;
    8080                GL11.glColor4f(f2 * par3, f3 * par3, f7 * par3, 1.0F);
    8081            }
    8082
    8083            tessellator.startDrawingQuads();
    8084            tessellator.setNormal(0.0F, 1.0F, 0.0F);
    8085            this.renderTopFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 1, par2));
    8086            tessellator.draw();
    8087
    8088            if (flag && this.useInventoryTint)
    8089            {
    8090                GL11.glColor4f(par3, par3, par3, 1.0F);
    8091            }
    8092
    8093            tessellator.startDrawingQuads();
    8094            tessellator.setNormal(0.0F, 0.0F, -1.0F);
    8095            this.renderEastFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 2, par2));
    8096            tessellator.draw();
    8097            tessellator.startDrawingQuads();
    8098            tessellator.setNormal(0.0F, 0.0F, 1.0F);
    8099            this.renderWestFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 3, par2));
    8100            tessellator.draw();
    8101            tessellator.startDrawingQuads();
    8102            tessellator.setNormal(-1.0F, 0.0F, 0.0F);
    8103            this.renderNorthFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 4, par2));
    8104            tessellator.draw();
    8105            tessellator.startDrawingQuads();
    8106            tessellator.setNormal(1.0F, 0.0F, 0.0F);
    8107            this.renderSouthFace(par1Block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(par1Block, 5, par2));
    8108            tessellator.draw();
    8109            GL11.glTranslatef(0.5F, 0.5F, 0.5F);
    8110        }
    8111    }
    8112
    8113    /**
    8114     * Checks to see if the item's render type indicates that it should be rendered as a regular block or not.
    8115     */
    8116    public static boolean renderItemIn3d(int par0)
    8117    {
    8118        switch (par0)
    8119        {
    8120        case 0: return true;
    8121        case 31: return true ;
    8122        case 39: return true ;
    8123        case 13: return true ;
    8124        case 10: return true ;
    8125        case 11: return true ;
    8126        case 27: return true ;
    8127        case 22: return true ;
    8128        case 21: return true ;
    8129        case 16: return true ;
    8130        case 26: return true ;
    8131        case 32: return true ;
    8132        case 34: return true ;
    8133        case 35: return true ;
    8134        default: return FMLRenderAccessLibrary.renderItemAsFull3DBlock(par0);
    8135        }
    8136
    8137    }
    8138
    8139    public Icon getBlockIcon(Block par1Block, IBlockAccess par2IBlockAccess, int par3, int par4, int par5, int par6)
    8140    {
    8141        return this.getIconSafe(par1Block.getBlockTexture(par2IBlockAccess, par3, par4, par5, par6));
    8142    }
    8143
    8144    public Icon getBlockIconFromSideAndMetadata(Block par1Block, int par2, int par3)
    8145    {
    8146        return this.getIconSafe(par1Block.getIcon(par2, par3));
    8147    }
    8148
    8149    public Icon getBlockIconFromSide(Block par1Block, int par2)
    8150    {
    8151        return this.getIconSafe(par1Block.getBlockTextureFromSide(par2));
    8152    }
    8153
    8154    public Icon getBlockIcon(Block par1Block)
    8155    {
    8156        return this.getIconSafe(par1Block.getBlockTextureFromSide(1));
    8157    }
    8158
    8159    public Icon getIconSafe(Icon par1Icon)
    8160    {
    8161        return par1Icon == null ? this.minecraftRB.renderEngine.getMissingIcon(0) : par1Icon;
    8162    }
    8163}