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