001    package net.minecraft.client.renderer.entity;
002    
003    import cpw.mods.fml.relauncher.Side;
004    import cpw.mods.fml.relauncher.SideOnly;
005    import java.util.Random;
006    import net.minecraft.client.renderer.Tessellator;
007    import net.minecraft.entity.Entity;
008    import net.minecraft.entity.effect.EntityLightningBolt;
009    import org.lwjgl.opengl.GL11;
010    
011    @SideOnly(Side.CLIENT)
012    public class RenderLightningBolt extends Render
013    {
014        /**
015         * Actually renders the lightning bolt. This method is called through the doRender method.
016         */
017        public void doRenderLightningBolt(EntityLightningBolt par1EntityLightningBolt, double par2, double par4, double par6, float par8, float par9)
018        {
019            Tessellator var10 = Tessellator.instance;
020            GL11.glDisable(GL11.GL_TEXTURE_2D);
021            GL11.glDisable(GL11.GL_LIGHTING);
022            GL11.glEnable(GL11.GL_BLEND);
023            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
024            double[] var11 = new double[8];
025            double[] var12 = new double[8];
026            double var13 = 0.0D;
027            double var15 = 0.0D;
028            Random var17 = new Random(par1EntityLightningBolt.boltVertex);
029    
030            for (int var18 = 7; var18 >= 0; --var18)
031            {
032                var11[var18] = var13;
033                var12[var18] = var15;
034                var13 += (double)(var17.nextInt(11) - 5);
035                var15 += (double)(var17.nextInt(11) - 5);
036            }
037    
038            for (int var45 = 0; var45 < 4; ++var45)
039            {
040                Random var46 = new Random(par1EntityLightningBolt.boltVertex);
041    
042                for (int var19 = 0; var19 < 3; ++var19)
043                {
044                    int var20 = 7;
045                    int var21 = 0;
046    
047                    if (var19 > 0)
048                    {
049                        var20 = 7 - var19;
050                    }
051    
052                    if (var19 > 0)
053                    {
054                        var21 = var20 - 2;
055                    }
056    
057                    double var22 = var11[var20] - var13;
058                    double var24 = var12[var20] - var15;
059    
060                    for (int var26 = var20; var26 >= var21; --var26)
061                    {
062                        double var27 = var22;
063                        double var29 = var24;
064    
065                        if (var19 == 0)
066                        {
067                            var22 += (double)(var46.nextInt(11) - 5);
068                            var24 += (double)(var46.nextInt(11) - 5);
069                        }
070                        else
071                        {
072                            var22 += (double)(var46.nextInt(31) - 15);
073                            var24 += (double)(var46.nextInt(31) - 15);
074                        }
075    
076                        var10.startDrawing(5);
077                        float var31 = 0.5F;
078                        var10.setColorRGBA_F(0.9F * var31, 0.9F * var31, 1.0F * var31, 0.3F);
079                        double var32 = 0.1D + (double)var45 * 0.2D;
080    
081                        if (var19 == 0)
082                        {
083                            var32 *= (double)var26 * 0.1D + 1.0D;
084                        }
085    
086                        double var34 = 0.1D + (double)var45 * 0.2D;
087    
088                        if (var19 == 0)
089                        {
090                            var34 *= (double)(var26 - 1) * 0.1D + 1.0D;
091                        }
092    
093                        for (int var36 = 0; var36 < 5; ++var36)
094                        {
095                            double var37 = par2 + 0.5D - var32;
096                            double var39 = par6 + 0.5D - var32;
097    
098                            if (var36 == 1 || var36 == 2)
099                            {
100                                var37 += var32 * 2.0D;
101                            }
102    
103                            if (var36 == 2 || var36 == 3)
104                            {
105                                var39 += var32 * 2.0D;
106                            }
107    
108                            double var41 = par2 + 0.5D - var34;
109                            double var43 = par6 + 0.5D - var34;
110    
111                            if (var36 == 1 || var36 == 2)
112                            {
113                                var41 += var34 * 2.0D;
114                            }
115    
116                            if (var36 == 2 || var36 == 3)
117                            {
118                                var43 += var34 * 2.0D;
119                            }
120    
121                            var10.addVertex(var41 + var22, par4 + (double)(var26 * 16), var43 + var24);
122                            var10.addVertex(var37 + var27, par4 + (double)((var26 + 1) * 16), var39 + var29);
123                        }
124    
125                        var10.draw();
126                    }
127                }
128            }
129    
130            GL11.glDisable(GL11.GL_BLEND);
131            GL11.glEnable(GL11.GL_LIGHTING);
132            GL11.glEnable(GL11.GL_TEXTURE_2D);
133        }
134    
135        /**
136         * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
137         * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
138         * (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1,
139         * double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
140         */
141        public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9)
142        {
143            this.doRenderLightningBolt((EntityLightningBolt)par1Entity, par2, par4, par6, par8, par9);
144        }
145    }