package minefantasy.client.entityrender; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.model.ModelBase; import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityHanging; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import org.lwjgl.opengl.GL11; @SideOnly(Side.CLIENT) public abstract class RenderLivingMF extends RendererLivingEntityMF { public RenderLivingMF(ModelBase base, float shadow) { super(base, shadow); } protected boolean func_130007_b(EntityLiving par1EntityLiving) { return super.func_110813_b(par1EntityLiving) && (par1EntityLiving.getAlwaysRenderNameTagForRender() || par1EntityLiving.hasCustomNameTag() && par1EntityLiving == this.renderManager.field_96451_i); } public void doRenderLiving(EntityLiving par1EntityLiving, double par2, double par4, double par6, float par8, float par9) { super.doRenderLiving(par1EntityLiving, par2, par4, par6, par8, par9); this.renderLeash(par1EntityLiving, par2, par4, par6, par8, par9); } private double func_110828_a(double par1, double par3, double par5) { return par1 + (par3 - par1) * par5; } protected void renderLeash(EntityLiving par1EntityLiving, double par2, double par4, double par6, float par8, float par9) { Entity entity = par1EntityLiving.getLeashedToEntity(); if (entity != null) { par4 -= (1.6D - (double)par1EntityLiving.height) * 0.5D; Tessellator tessellator = Tessellator.instance; double d3 = this.func_110828_a((double)entity.prevRotationYaw, (double)entity.rotationYaw, (double)(par9 * 0.5F)) * 0.01745329238474369D; double d4 = this.func_110828_a((double)entity.prevRotationPitch, (double)entity.rotationPitch, (double)(par9 * 0.5F)) * 0.01745329238474369D; double d5 = Math.cos(d3); double d6 = Math.sin(d3); double d7 = Math.sin(d4); if (entity instanceof EntityHanging) { d5 = 0.0D; d6 = 0.0D; d7 = -1.0D; } double d8 = Math.cos(d4); double d9 = this.func_110828_a(entity.prevPosX, entity.posX, (double)par9) - d5 * 0.7D - d6 * 0.5D * d8; double d10 = this.func_110828_a(entity.prevPosY + (double)entity.getEyeHeight() * 0.7D, entity.posY + (double)entity.getEyeHeight() * 0.7D, (double)par9) - d7 * 0.5D - 0.25D; double d11 = this.func_110828_a(entity.prevPosZ, entity.posZ, (double)par9) - d6 * 0.7D + d5 * 0.5D * d8; double d12 = this.func_110828_a((double)par1EntityLiving.prevRenderYawOffset, (double)par1EntityLiving.renderYawOffset, (double)par9) * 0.01745329238474369D + (Math.PI / 2D); d5 = Math.cos(d12) * (double)par1EntityLiving.width * 0.4D; d6 = Math.sin(d12) * (double)par1EntityLiving.width * 0.4D; double d13 = this.func_110828_a(par1EntityLiving.prevPosX, par1EntityLiving.posX, (double)par9) + d5; double d14 = this.func_110828_a(par1EntityLiving.prevPosY, par1EntityLiving.posY, (double)par9); double d15 = this.func_110828_a(par1EntityLiving.prevPosZ, par1EntityLiving.posZ, (double)par9) + d6; par2 += d5; par6 += d6; double d16 = (double)((float)(d9 - d13)); double d17 = (double)((float)(d10 - d14)); double d18 = (double)((float)(d11 - d15)); GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_CULL_FACE); boolean flag = true; double d19 = 0.025D; tessellator.startDrawing(5); int i; float f2; for (i = 0; i <= 24; ++i) { if (i % 2 == 0) { tessellator.setColorRGBA_F(0.5F, 0.4F, 0.3F, 1.0F); } else { tessellator.setColorRGBA_F(0.35F, 0.28F, 0.21000001F, 1.0F); } f2 = (float)i / 24.0F; tessellator.addVertex(par2 + d16 * (double)f2 + 0.0D, par4 + d17 * (double)(f2 * f2 + f2) * 0.5D + (double)((24.0F - (float)i) / 18.0F + 0.125F), par6 + d18 * (double)f2); tessellator.addVertex(par2 + d16 * (double)f2 + 0.025D, par4 + d17 * (double)(f2 * f2 + f2) * 0.5D + (double)((24.0F - (float)i) / 18.0F + 0.125F) + 0.025D, par6 + d18 * (double)f2); } tessellator.draw(); tessellator.startDrawing(5); for (i = 0; i <= 24; ++i) { if (i % 2 == 0) { tessellator.setColorRGBA_F(0.5F, 0.4F, 0.3F, 1.0F); } else { tessellator.setColorRGBA_F(0.35F, 0.28F, 0.21000001F, 1.0F); } f2 = (float)i / 24.0F; tessellator.addVertex(par2 + d16 * (double)f2 + 0.0D, par4 + d17 * (double)(f2 * f2 + f2) * 0.5D + (double)((24.0F - (float)i) / 18.0F + 0.125F) + 0.025D, par6 + d18 * (double)f2); tessellator.addVertex(par2 + d16 * (double)f2 + 0.025D, par4 + d17 * (double)(f2 * f2 + f2) * 0.5D + (double)((24.0F - (float)i) / 18.0F + 0.125F), par6 + d18 * (double)f2 + 0.025D); } tessellator.draw(); GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_CULL_FACE); } } protected boolean func_110813_b(EntityLivingBase par1EntityLivingBase) { return this.func_130007_b((EntityLiving)par1EntityLivingBase); } public void renderPlayer(EntityLivingBase par1EntityLivingBase, double par2, double par4, double par6, float par8, float par9) { this.doRenderLiving((EntityLiving)par1EntityLivingBase, par2, par4, par6, par8, par9); } /** * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic * (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1, * double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that. */ public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9) { this.doRenderLiving((EntityLiving)par1Entity, par2, par4, par6, par8, par9); } }