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.ModelBiped;
006    import net.minecraft.client.model.ModelZombie;
007    import net.minecraft.client.model.ModelZombieVillager;
008    import net.minecraft.entity.Entity;
009    import net.minecraft.entity.EntityLiving;
010    import net.minecraft.entity.monster.EntityZombie;
011    
012    @SideOnly(Side.CLIENT)
013    public class RenderZombie extends RenderBiped
014    {
015        private ModelBiped field_82434_o;
016        private ModelZombieVillager field_82432_p;
017        protected ModelBiped field_82437_k;
018        protected ModelBiped field_82435_l;
019        protected ModelBiped field_82436_m;
020        protected ModelBiped field_82433_n;
021        private int field_82431_q = 1;
022    
023        public RenderZombie()
024        {
025            super(new ModelZombie(), 0.5F, 1.0F);
026            this.field_82434_o = this.modelBipedMain;
027            this.field_82432_p = new ModelZombieVillager();
028        }
029    
030        protected void func_82421_b()
031        {
032            this.field_82423_g = new ModelZombie(1.0F, true);
033            this.field_82425_h = new ModelZombie(0.5F, true);
034            this.field_82437_k = this.field_82423_g;
035            this.field_82435_l = this.field_82425_h;
036            this.field_82436_m = new ModelZombieVillager(1.0F, 0.0F, true);
037            this.field_82433_n = new ModelZombieVillager(0.5F, 0.0F, true);
038        }
039    
040        protected int func_82429_a(EntityZombie par1EntityZombie, int par2, float par3)
041        {
042            this.func_82427_a(par1EntityZombie);
043            return super.shouldRenderPass(par1EntityZombie, par2, par3);
044        }
045    
046        public void func_82426_a(EntityZombie par1EntityZombie, double par2, double par4, double par6, float par8, float par9)
047        {
048            this.func_82427_a(par1EntityZombie);
049            super.doRenderLiving(par1EntityZombie, par2, par4, par6, par8, par9);
050        }
051    
052        protected void func_82428_a(EntityZombie par1EntityZombie, float par2)
053        {
054            this.func_82427_a(par1EntityZombie);
055            super.renderEquippedItems(par1EntityZombie, par2);
056        }
057    
058        private void func_82427_a(EntityZombie par1EntityZombie)
059        {
060            if (par1EntityZombie.isVillager())
061            {
062                if (this.field_82431_q != this.field_82432_p.func_82897_a())
063                {
064                    this.field_82432_p = new ModelZombieVillager();
065                    this.field_82431_q = this.field_82432_p.func_82897_a();
066                    this.field_82436_m = new ModelZombieVillager(1.0F, 0.0F, true);
067                    this.field_82433_n = new ModelZombieVillager(0.5F, 0.0F, true);
068                }
069    
070                this.mainModel = this.field_82432_p;
071                this.field_82423_g = this.field_82436_m;
072                this.field_82425_h = this.field_82433_n;
073            }
074            else
075            {
076                this.mainModel = this.field_82434_o;
077                this.field_82423_g = this.field_82437_k;
078                this.field_82425_h = this.field_82435_l;
079            }
080    
081            this.modelBipedMain = (ModelBiped)this.mainModel;
082        }
083    
084        protected void func_82430_a(EntityZombie par1EntityZombie, float par2, float par3, float par4)
085        {
086            if (par1EntityZombie.func_82230_o())
087            {
088                par3 += (float)(Math.cos((double)par1EntityZombie.ticksExisted * 3.25D) * Math.PI * 0.25D);
089            }
090    
091            super.rotateCorpse(par1EntityZombie, par2, par3, par4);
092        }
093    
094        protected void renderEquippedItems(EntityLiving par1EntityLiving, float par2)
095        {
096            this.func_82428_a((EntityZombie)par1EntityLiving, par2);
097        }
098    
099        public void doRenderLiving(EntityLiving par1EntityLiving, double par2, double par4, double par6, float par8, float par9)
100        {
101            this.func_82426_a((EntityZombie)par1EntityLiving, par2, par4, par6, par8, par9);
102        }
103    
104        /**
105         * Queries whether should render the specified pass or not.
106         */
107        protected int shouldRenderPass(EntityLiving par1EntityLiving, int par2, float par3)
108        {
109            return this.func_82429_a((EntityZombie)par1EntityLiving, par2, par3);
110        }
111    
112        protected void rotateCorpse(EntityLiving par1EntityLiving, float par2, float par3, float par4)
113        {
114            this.func_82430_a((EntityZombie)par1EntityLiving, par2, par3, par4);
115        }
116    
117        /**
118         * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
119         * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
120         * (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1,
121         * double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
122         */
123        public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9)
124        {
125            this.func_82426_a((EntityZombie)par1Entity, par2, par4, par6, par8, par9);
126        }
127    }