001 package net.minecraft.client.renderer.entity;
002
003 import cpw.mods.fml.relauncher.Side;
004 import cpw.mods.fml.relauncher.SideOnly;
005 import net.minecraft.client.model.ModelWither;
006 import net.minecraft.entity.Entity;
007 import net.minecraft.entity.EntityLiving;
008 import net.minecraft.entity.boss.BossStatus;
009 import net.minecraft.entity.boss.EntityWither;
010 import net.minecraft.util.MathHelper;
011 import org.lwjgl.opengl.GL11;
012
013 @SideOnly(Side.CLIENT)
014 public class RenderWither extends RenderLiving
015 {
016 private int field_82419_a;
017
018 public RenderWither()
019 {
020 super(new ModelWither(), 1.0F);
021 this.field_82419_a = ((ModelWither)this.mainModel).func_82903_a();
022 }
023
024 public void func_82418_a(EntityWither par1EntityWither, double par2, double par4, double par6, float par8, float par9)
025 {
026 BossStatus.func_82824_a(par1EntityWither, true);
027 int var10 = ((ModelWither)this.mainModel).func_82903_a();
028
029 if (var10 != this.field_82419_a)
030 {
031 this.field_82419_a = var10;
032 this.mainModel = new ModelWither();
033 }
034
035 super.doRenderLiving(par1EntityWither, par2, par4, par6, par8, par9);
036 }
037
038 protected void func_82415_a(EntityWither par1EntityWither, float par2)
039 {
040 int var3 = par1EntityWither.func_82212_n();
041
042 if (var3 > 0)
043 {
044 float var4 = 2.0F - ((float)var3 - par2) / 220.0F * 0.5F;
045 GL11.glScalef(var4, var4, var4);
046 }
047 else
048 {
049 GL11.glScalef(2.0F, 2.0F, 2.0F);
050 }
051 }
052
053 protected int func_82417_a(EntityWither par1EntityWither, int par2, float par3)
054 {
055 if (par1EntityWither.isArmored())
056 {
057 if (par1EntityWither.getHasActivePotion())
058 {
059 GL11.glDepthMask(false);
060 }
061 else
062 {
063 GL11.glDepthMask(true);
064 }
065
066 if (par2 == 1)
067 {
068 float var4 = (float)par1EntityWither.ticksExisted + par3;
069 this.loadTexture("/armor/witherarmor.png");
070 GL11.glMatrixMode(GL11.GL_TEXTURE);
071 GL11.glLoadIdentity();
072 float var5 = MathHelper.cos(var4 * 0.02F) * 3.0F;
073 float var6 = var4 * 0.01F;
074 GL11.glTranslatef(var5, var6, 0.0F);
075 this.setRenderPassModel(this.mainModel);
076 GL11.glMatrixMode(GL11.GL_MODELVIEW);
077 GL11.glEnable(GL11.GL_BLEND);
078 float var7 = 0.5F;
079 GL11.glColor4f(var7, var7, var7, 1.0F);
080 GL11.glDisable(GL11.GL_LIGHTING);
081 GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE);
082 GL11.glTranslatef(0.0F, -0.01F, 0.0F);
083 GL11.glScalef(1.1F, 1.1F, 1.1F);
084 return 1;
085 }
086
087 if (par2 == 2)
088 {
089 GL11.glMatrixMode(GL11.GL_TEXTURE);
090 GL11.glLoadIdentity();
091 GL11.glMatrixMode(GL11.GL_MODELVIEW);
092 GL11.glEnable(GL11.GL_LIGHTING);
093 GL11.glDisable(GL11.GL_BLEND);
094 }
095 }
096
097 return -1;
098 }
099
100 protected int func_82416_b(EntityWither par1EntityWither, int par2, float par3)
101 {
102 return -1;
103 }
104
105 /**
106 * Allows the render to do any OpenGL state modifications necessary before the model is rendered. Args:
107 * entityLiving, partialTickTime
108 */
109 protected void preRenderCallback(EntityLiving par1EntityLiving, float par2)
110 {
111 this.func_82415_a((EntityWither)par1EntityLiving, par2);
112 }
113
114 /**
115 * Queries whether should render the specified pass or not.
116 */
117 protected int shouldRenderPass(EntityLiving par1EntityLiving, int par2, float par3)
118 {
119 return this.func_82417_a((EntityWither)par1EntityLiving, par2, par3);
120 }
121
122 protected int inheritRenderPass(EntityLiving par1EntityLiving, int par2, float par3)
123 {
124 return this.func_82416_b((EntityWither)par1EntityLiving, par2, par3);
125 }
126
127 public void doRenderLiving(EntityLiving par1EntityLiving, double par2, double par4, double par6, float par8, float par9)
128 {
129 this.func_82418_a((EntityWither)par1EntityLiving, par2, par4, par6, par8, par9);
130 }
131
132 /**
133 * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
134 * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
135 * (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1,
136 * double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
137 */
138 public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9)
139 {
140 this.func_82418_a((EntityWither)par1Entity, par2, par4, par6, par8, par9);
141 }
142 }