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