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