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.ModelBat;
006    import net.minecraft.entity.Entity;
007    import net.minecraft.entity.EntityLiving;
008    import net.minecraft.entity.passive.EntityBat;
009    import net.minecraft.util.MathHelper;
010    import org.lwjgl.opengl.GL11;
011    
012    @SideOnly(Side.CLIENT)
013    public class RenderBat extends RenderLiving
014    {
015        /**
016         * not actually sure this is size, is not used as of now, but the model would be recreated if the value changed and
017         * it seems a good match for a bats size
018         */
019        private int renderedBatSize;
020    
021        public RenderBat()
022        {
023            super(new ModelBat(), 0.25F);
024            this.renderedBatSize = ((ModelBat)this.mainModel).getBatSize();
025        }
026    
027        public void func_82443_a(EntityBat par1EntityBat, double par2, double par4, double par6, float par8, float par9)
028        {
029            int var10 = ((ModelBat)this.mainModel).getBatSize();
030    
031            if (var10 != this.renderedBatSize)
032            {
033                this.renderedBatSize = var10;
034                this.mainModel = new ModelBat();
035            }
036    
037            super.doRenderLiving(par1EntityBat, par2, par4, par6, par8, par9);
038        }
039    
040        protected void func_82442_a(EntityBat par1EntityBat, float par2)
041        {
042            GL11.glScalef(0.35F, 0.35F, 0.35F);
043        }
044    
045        protected void func_82445_a(EntityBat par1EntityBat, double par2, double par4, double par6)
046        {
047            super.renderLivingAt(par1EntityBat, par2, par4, par6);
048        }
049    
050        protected void func_82444_a(EntityBat par1EntityBat, float par2, float par3, float par4)
051        {
052            if (!par1EntityBat.getIsBatHanging())
053            {
054                GL11.glTranslatef(0.0F, MathHelper.cos(par2 * 0.3F) * 0.1F, 0.0F);
055            }
056            else
057            {
058                GL11.glTranslatef(0.0F, -0.1F, 0.0F);
059            }
060    
061            super.rotateCorpse(par1EntityBat, par2, par3, par4);
062        }
063    
064        /**
065         * Allows the render to do any OpenGL state modifications necessary before the model is rendered. Args:
066         * entityLiving, partialTickTime
067         */
068        protected void preRenderCallback(EntityLiving par1EntityLiving, float par2)
069        {
070            this.func_82442_a((EntityBat)par1EntityLiving, par2);
071        }
072    
073        protected void rotateCorpse(EntityLiving par1EntityLiving, float par2, float par3, float par4)
074        {
075            this.func_82444_a((EntityBat)par1EntityLiving, par2, par3, par4);
076        }
077    
078        /**
079         * Sets a simple glTranslate on a LivingEntity.
080         */
081        protected void renderLivingAt(EntityLiving par1EntityLiving, double par2, double par4, double par6)
082        {
083            this.func_82445_a((EntityBat)par1EntityLiving, par2, par4, par6);
084        }
085    
086        public void doRenderLiving(EntityLiving par1EntityLiving, double par2, double par4, double par6, float par8, float par9)
087        {
088            this.func_82443_a((EntityBat)par1EntityLiving, par2, par4, par6, par8, par9);
089        }
090    
091        /**
092         * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
093         * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
094         * (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1,
095         * double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
096         */
097        public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9)
098        {
099            this.func_82443_a((EntityBat)par1Entity, par2, par4, par6, par8, par9);
100        }
101    }