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