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