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 }