001package net.minecraft.client.renderer.entity;
002
003import cpw.mods.fml.relauncher.Side;
004import cpw.mods.fml.relauncher.SideOnly;
005import net.minecraft.client.model.ModelWither;
006import net.minecraft.entity.Entity;
007import net.minecraft.entity.EntityLiving;
008import net.minecraft.entity.boss.BossStatus;
009import net.minecraft.entity.boss.EntityWither;
010import net.minecraft.util.MathHelper;
011import org.lwjgl.opengl.GL11;
012
013@SideOnly(Side.CLIENT)
014public 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 i = ((ModelWither)this.mainModel).func_82903_a();
028
029        if (i != this.field_82419_a)
030        {
031            this.field_82419_a = i;
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 i = par1EntityWither.func_82212_n();
041
042        if (i > 0)
043        {
044            float f1 = 2.0F - ((float)i - par2) / 220.0F * 0.5F;
045            GL11.glScalef(f1, f1, f1);
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 f1 = (float)par1EntityWither.ticksExisted + par3;
069                this.loadTexture("/armor/witherarmor.png");
070                GL11.glMatrixMode(GL11.GL_TEXTURE);
071                GL11.glLoadIdentity();
072                float f2 = MathHelper.cos(f1 * 0.02F) * 3.0F;
073                float f3 = f1 * 0.01F;
074                GL11.glTranslatef(f2, f3, 0.0F);
075                this.setRenderPassModel(this.mainModel);
076                GL11.glMatrixMode(GL11.GL_MODELVIEW);
077                GL11.glEnable(GL11.GL_BLEND);
078                float f4 = 0.5F;
079                GL11.glColor4f(f4, f4, f4, 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}