    001    package net.minecraft.src;
    002
    003    import cpw.mods.fml.common.Side;
    004    import cpw.mods.fml.common.asm.SideOnly;
    005    import java.util.Random;
    006    import org.lwjgl.opengl.GL11;
    007    import org.lwjgl.opengl.GL12;
    008
    009    @SideOnly(Side.CLIENT)
    010    public class RenderEnderman extends RenderLiving
    011    {
    012        /** The model of the enderman */
    013        private ModelEnderman endermanModel;
    014        private Random rnd = new Random();
    015
    016        public RenderEnderman()
    017        {
    018            super(new ModelEnderman(), 0.5F);
    019            this.endermanModel = (ModelEnderman)super.mainModel;
    020            this.setRenderPassModel(this.endermanModel);
    021        }
    022
    023        /**
    024         * Renders the enderman
    025         */
    026        public void renderEnderman(EntityEnderman par1EntityEnderman, double par2, double par4, double par6, float par8, float par9)
    027        {
    028            this.endermanModel.isCarrying = par1EntityEnderman.getCarried() > 0;
    029            this.endermanModel.isAttacking = par1EntityEnderman.func_70823_r();
    030
    031            if (par1EntityEnderman.func_70823_r())
    032            {
    033                double var10 = 0.02D;
    034                par2 += this.rnd.nextGaussian() * var10;
    035                par6 += this.rnd.nextGaussian() * var10;
    036            }
    037
    038            super.doRenderLiving(par1EntityEnderman, par2, par4, par6, par8, par9);
    039        }
    040
    041        /**
    042         * Render the block an enderman is carrying
    043         */
    044        protected void renderCarrying(EntityEnderman par1EntityEnderman, float par2)
    045        {
    046            super.renderEquippedItems(par1EntityEnderman, par2);
    047
    048            if (par1EntityEnderman.getCarried() > 0)
    049            {
    050                GL11.glEnable(GL12.GL_RESCALE_NORMAL);
    051                GL11.glPushMatrix();
    052                float var3 = 0.5F;
    053                GL11.glTranslatef(0.0F, 0.6875F, -0.75F);
    054                var3 *= 1.0F;
    055                GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F);
    056                GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
    057                GL11.glScalef(-var3, -var3, var3);
    058                int var4 = par1EntityEnderman.getBrightnessForRender(par2);
    059                int var5 = var4 % 65536;
    060                int var6 = var4 / 65536;
    061                OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var5 / 1.0F, (float)var6 / 1.0F);
    062                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    063                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    064                this.loadTexture("/terrain.png");
    065                this.renderBlocks.renderBlockAsItem(Block.blocksList[par1EntityEnderman.getCarried()], par1EntityEnderman.getCarryingData(), 1.0F);
    066                GL11.glPopMatrix();
    067                GL11.glDisable(GL12.GL_RESCALE_NORMAL);
    068            }
    069        }
    070
    071        /**
    072         * Render the endermans eyes
    073         */
    074        protected int renderEyes(EntityEnderman par1EntityEnderman, int par2, float par3)
    075        {
    076            if (par2 != 0)
    077            {
    078                return -1;
    079            }
    080            else
    081            {
    082                this.loadTexture("/mob/enderman_eyes.png");
    083                float var4 = 1.0F;
    084                GL11.glEnable(GL11.GL_BLEND);
    085                GL11.glDisable(GL11.GL_ALPHA_TEST);
    086                GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE);
    087                GL11.glDisable(GL11.GL_LIGHTING);
    088
    089                if (par1EntityEnderman.func_82150_aj())
    090                {
    091                    GL11.glDepthMask(false);
    092                }
    093                else
    094                {
    095                    GL11.glDepthMask(true);
    096                }
    097
    098                char var5 = 61680;
    099                int var6 = var5 % 65536;
    100                int var7 = var5 / 65536;
    101                OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var6 / 1.0F, (float)var7 / 1.0F);
    102                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    103                GL11.glEnable(GL11.GL_LIGHTING);
    104                GL11.glColor4f(1.0F, 1.0F, 1.0F, var4);
    105                return 1;
    106            }
    107        }
    108
    109        /**
    110         * Queries whether should render the specified pass or not.
    111         */
    112        protected int shouldRenderPass(EntityLiving par1EntityLiving, int par2, float par3)
    113        {
    114            return this.renderEyes((EntityEnderman)par1EntityLiving, par2, par3);
    115        }
    116
    117        protected void renderEquippedItems(EntityLiving par1EntityLiving, float par2)
    118        {
    119            this.renderCarrying((EntityEnderman)par1EntityLiving, par2);
    120        }
    121
    122        public void doRenderLiving(EntityLiving par1EntityLiving, double par2, double par4, double par6, float par8, float par9)
    123        {
    124            this.renderEnderman((EntityEnderman)par1EntityLiving, par2, par4, par6, par8, par9);
    125        }
    126
    127        /**
    128         * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
    129         * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
    130         * (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1,
    131         * double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
    132         */
    133        public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9)
    134        {
    135            this.renderEnderman((EntityEnderman)par1Entity, par2, par4, par6, par8, par9);
    136        }
    137    }