    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    }