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