package net.tropicraft.client.entity.render; import java.util.UUID; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderLiving; import net.minecraft.client.renderer.tileentity.TileEntitySkullRenderer; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTUtil; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StringUtils; import net.minecraft.world.World; import net.tropicraft.client.entity.model.ModelKoaMan; import net.tropicraft.entity.koa.EntityKoaHunter; import net.tropicraft.entity.koa.EntityKoaShaman; import net.tropicraft.entity.koa.EntityKoaTrader; import net.tropicraft.util.TropicraftUtils; import org.lwjgl.opengl.GL11; import com.mojang.authlib.GameProfile; public class RenderKoaMan extends RenderLiving { //lots of code copied from RenderBiped, but maybe we should extend RenderBiped and add to it for future maintainability? //same for ModelBiped instead of ModelBase int counter; public RenderKoaMan(ModelKoaMan modelbase, float f) { super(modelbase, f); mainModel = (ModelKoaMan)modelbase; shadowSize = f; counter = 300; } @Override /** * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. */ protected ResourceLocation getEntityTexture(Entity entity) { if (entity instanceof EntityKoaShaman) { return TropicraftUtils.bindTextureEntity("koa/KoaShaman"); } else if (entity instanceof EntityKoaTrader) { return TropicraftUtils.bindTextureEntity("koa/KoaManTrader"); } else if (entity instanceof EntityKoaHunter) { return TropicraftUtils.bindTextureEntity("koa/KoaManHunter"); } else { return TropicraftUtils.bindTextureEntity("koa/KoaMan3"); } } public void setRenderPassModel(ModelKoaMan modelbase) { renderPassModel = modelbase; } protected void renderLivingAt(EntityLiving entityliving, double d, double d1, double d2) { GL11.glTranslatef((float)d, (float)d1, (float)d2); } protected void rotateCorpse(EntityLiving entityliving, float f, float f1, float f2) { GL11.glRotatef(180F - f1, 0.0F, 1.0F, 0.0F); if(entityliving.deathTime > 0) { float f3 = ((((float)entityliving.deathTime + f2) - 1.0F) / 20F) * 1.6F; f3 = MathHelper.sqrt_float(f3); if(f3 > 1.0F) { f3 = 1.0F; } GL11.glRotatef(f3 * getDeathMaxRotation(entityliving), 0.0F, 0.0F, 1.0F); } } protected float renderSwingProgress(EntityLiving entityliving, float f) { return entityliving.getSwingProgress(f); } protected float handleRotationFloat(EntityLiving entityliving, float f) { return (float)entityliving.ticksExisted + f; } protected int inheritRenderPass(EntityLiving entityliving, int i, float f) { return shouldRenderPass(entityliving, i, f); } protected int shouldRenderPass(EntityLiving entityliving, int i, float f) { return -1; } protected float getDeathMaxRotation(EntityLiving entityliving) { return 90F; } protected int getColorMultiplier(EntityLiving entityliving, float f, float f1) { return 0; } protected void preRenderCallback(EntityLiving entityliving, float f) { } protected void renderLivingLabel(EntityLiving entityliving, String s, double d, double d1, double d2, int i) { float f = entityliving.getDistanceToEntity(renderManager.livingPlayer); if(f > (float)i) { return; } FontRenderer fontrenderer = getFontRendererFromRenderManager(); float f1 = 1.6F; float f2 = 0.01666667F * f1; GL11.glPushMatrix(); GL11.glTranslatef((float)d + 0.0F, (float)d1 + 2.3F, (float)d2); GL11.glNormal3f(0.0F, 1.0F, 0.0F); GL11.glRotatef(-renderManager.playerViewY, 0.0F, 1.0F, 0.0F); GL11.glRotatef(renderManager.playerViewX, 1.0F, 0.0F, 0.0F); GL11.glScalef(-f2, -f2, f2); GL11.glDisable(2896 /*GL_LIGHTING*/); GL11.glDepthMask(false); //GL11.glDisable(2929 /*GL_DEPTH_TEST*/); GL11.glEnable(3042 /*GL_BLEND*/); GL11.glBlendFunc(770, 771); Tessellator tessellator = Tessellator.instance; byte byte0 = 0; if(s != null && s.equals("deadmau5")) { byte0 = -10; } GL11.glDisable(3553 /*GL_TEXTURE_2D*/); tessellator.startDrawingQuads(); int j = fontrenderer.getStringWidth(s) / 2; tessellator.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F); tessellator.addVertex(-j - 1, -1 + byte0, 0.0D); tessellator.addVertex(-j - 1, 8 + byte0, 0.0D); tessellator.addVertex(j + 1, 8 + byte0, 0.0D); tessellator.addVertex(j + 1, -1 + byte0, 0.0D); tessellator.draw(); GL11.glEnable(3553 /*GL_TEXTURE_2D*/); fontrenderer.drawString(s, -fontrenderer.getStringWidth(s) / 2, byte0, 0x20ffffff); //GL11.glEnable(2929 /*GL_DEPTH_TEST*/); GL11.glDepthMask(true); fontrenderer.drawString(s, -fontrenderer.getStringWidth(s) / 2, byte0, -1); GL11.glEnable(2896 /*GL_LIGHTING*/); GL11.glDisable(3042 /*GL_BLEND*/); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glPopMatrix(); } protected void passSpecialRender(EntityLiving entityliving, double d, double d1, double d2) { if (entityliving instanceof EntityLiving) { if (renderManager.livingPlayer.getDistanceToEntity(entityliving) < 12) { renderName((EntityLiving)entityliving, d, d1, d2); } } //c_CoroAIUtil.renderJobs((c_EnhAI)entityliving); } protected void renderName(EntityLiving entitykoa, double d, double d1, double d2) { // System.out.println("counter: " + counter); if(Minecraft.isGuiEnabled() && entitykoa != renderManager.livingPlayer) { float f = 1.6F; float f1 = 0.01666667F * f; float f2 = entitykoa.getDistanceToEntity(renderManager.livingPlayer); float f3 = entitykoa.isSneaking() ? 32F : 64F; String s = entitykoa.getCustomNameTag(); //s = entitykoa.debugInfo; if(f2 < f3) { if(!entitykoa.isSneaking()) { if(entitykoa.isPlayerSleeping()) { renderLivingLabel(entitykoa, s, d, d1 - 1.5D, d2, 24); } else { //put all talk logic code in here } renderLivingLabel(entitykoa, s, d, d1, d2, 24); } else { FontRenderer fontrenderer = getFontRendererFromRenderManager(); GL11.glPushMatrix(); GL11.glTranslatef((float)d + 0.0F, (float)d1 + 2.3F, (float)d2); GL11.glNormal3f(0.0F, 1.0F, 0.0F); GL11.glRotatef(-renderManager.playerViewY, 0.0F, 1.0F, 0.0F); GL11.glRotatef(renderManager.playerViewX, 1.0F, 0.0F, 0.0F); GL11.glScalef(-f1, -f1, f1); GL11.glDisable(2896 /*GL_LIGHTING*/); GL11.glTranslatef(0.0F, 0.25F / f1, 0.0F); GL11.glDepthMask(false); GL11.glEnable(3042 /*GL_BLEND*/); GL11.glBlendFunc(770, 771); Tessellator tessellator = Tessellator.instance; GL11.glDisable(3553 /*GL_TEXTURE_2D*/); tessellator.startDrawingQuads(); int i = fontrenderer.getStringWidth(s) / 2; tessellator.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F); tessellator.addVertex(-i - 1, -1D, 0.0D); tessellator.addVertex(-i - 1, 8D, 0.0D); tessellator.addVertex(i + 1, 8D, 0.0D); tessellator.addVertex(i + 1, -1D, 0.0D); tessellator.draw(); GL11.glEnable(3553 /*GL_TEXTURE_2D*/); GL11.glDepthMask(true); fontrenderer.drawString(s, -fontrenderer.getStringWidth(s) / 2, 0, 0x20ffffff); GL11.glEnable(2896 /*GL_LIGHTING*/); GL11.glDisable(3042 /*GL_BLEND*/); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glPopMatrix(); } } } }/* public void doRender(Entity entity, double d, double d1, double d2, float f, float f1) { doRenderLiving((EntityLiving)entity, d, d1, d2, f, f1); }*/ private World getWorldFromRenderManager() { return this.renderManager.worldObj; } private void renderShadowOnBlock(Block block, double d, double d1, double d2, int i, int j, int k, float f, float f1, double d3, double d4, double d5) { Tessellator tessellator = Tessellator.instance; if(!block.renderAsNormalBlock()) { return; } double d6 = ((double)f - (d1 - ((double)j + d4)) / 2D) * 0.5D * (double)getWorldFromRenderManager().getLightBrightness(i, j, k); if(d6 < 0.0D) { return; } if(d6 > 1.0D) { d6 = 1.0D; } tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, (float)d6); double d7 = (double)i + block.getBlockBoundsMinX() + d3; double d8 = (double)i + block.getBlockBoundsMaxX() + d3; double d9 = (double)j + block.getBlockBoundsMinY() + d4 + 0.015625D; double d10 = (double)k + block.getBlockBoundsMinZ() + d5; double d11 = (double)k + block.getBlockBoundsMaxZ() + d5; float f2 = (float)((d - d7) / 2D / (double)f1 + 0.5D); float f3 = (float)((d - d8) / 2D / (double)f1 + 0.5D); float f4 = (float)((d2 - d10) / 2D / (double)f1 + 0.5D); float f5 = (float)((d2 - d11) / 2D / (double)f1 + 0.5D); tessellator.addVertexWithUV(d7, d9, d10, f2, f4); tessellator.addVertexWithUV(d7, d9, d11, f2, f5); tessellator.addVertexWithUV(d8, d9, d11, f3, f5); tessellator.addVertexWithUV(d8, d9, d10, f3, f4); } @Override protected void renderEquippedItems(EntityLivingBase p_77029_1_, float p_77029_2_) { super.renderEquippedItems(p_77029_1_, p_77029_2_); GL11.glColor3f(1.0F, 1.0F, 1.0F); super.renderEquippedItems(p_77029_1_, p_77029_2_); ItemStack itemstack = p_77029_1_.getHeldItem(); ItemStack itemstack1 = ((EntityLiving)p_77029_1_).func_130225_q(3); Item item; float f1; if (itemstack1 != null) { GL11.glPushMatrix(); this.mainModel.bipedHead.postRender(0.0625F); item = itemstack1.getItem(); net.minecraftforge.client.IItemRenderer customRenderer = net.minecraftforge.client.MinecraftForgeClient.getItemRenderer(itemstack1, net.minecraftforge.client.IItemRenderer.ItemRenderType.EQUIPPED); boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(net.minecraftforge.client.IItemRenderer.ItemRenderType.EQUIPPED, itemstack1, net.minecraftforge.client.IItemRenderer.ItemRendererHelper.BLOCK_3D)); if (item instanceof ItemBlock) { if (is3D || RenderBlocks.renderItemIn3d(Block.getBlockFromItem(item).getRenderType())) { f1 = 0.625F; GL11.glTranslatef(0.0F, -0.25F, 0.0F); GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); GL11.glScalef(f1, -f1, -f1); } this.renderManager.itemRenderer.renderItem(p_77029_1_, itemstack1, 0); } else if (item == Items.skull) { f1 = 1.0625F; GL11.glScalef(f1, -f1, -f1); GameProfile gameprofile = null; if (itemstack1.hasTagCompound()) { NBTTagCompound nbttagcompound = itemstack1.getTagCompound(); if (nbttagcompound.hasKey("SkullOwner", 10)) { gameprofile = NBTUtil.func_152459_a(nbttagcompound.getCompoundTag("SkullOwner")); } else if (nbttagcompound.hasKey("SkullOwner", 8) && !StringUtils.isNullOrEmpty(nbttagcompound.getString("SkullOwner"))) { gameprofile = new GameProfile((UUID)null, nbttagcompound.getString("SkullOwner")); } } TileEntitySkullRenderer.field_147536_b.func_152674_a(-0.5F, 0.0F, -0.5F, 1, 180.0F, itemstack1.getItemDamage(), gameprofile); } GL11.glPopMatrix(); } if (itemstack != null && itemstack.getItem() != null) { item = itemstack.getItem(); GL11.glPushMatrix(); if (this.mainModel.isChild) { f1 = 0.5F; GL11.glTranslatef(0.0F, 0.625F, 0.0F); GL11.glRotatef(-20.0F, -1.0F, 0.0F, 0.0F); GL11.glScalef(f1, f1, f1); } this.mainModel.bipedRightArm.postRender(0.0625F); GL11.glTranslatef(-0.0625F, 0.4375F, 0.0625F); net.minecraftforge.client.IItemRenderer customRenderer = net.minecraftforge.client.MinecraftForgeClient.getItemRenderer(itemstack, net.minecraftforge.client.IItemRenderer.ItemRenderType.EQUIPPED); boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(net.minecraftforge.client.IItemRenderer.ItemRenderType.EQUIPPED, itemstack, net.minecraftforge.client.IItemRenderer.ItemRendererHelper.BLOCK_3D)); if (item instanceof ItemBlock && (is3D || RenderBlocks.renderItemIn3d(Block.getBlockFromItem(item).getRenderType()))) { f1 = 0.5F; GL11.glTranslatef(0.0F, 0.1875F, -0.3125F); f1 *= 0.75F; GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F); GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); GL11.glScalef(-f1, -f1, f1); } else if (item == Items.bow) { f1 = 0.625F; GL11.glTranslatef(0.0F, 0.125F, 0.3125F); GL11.glRotatef(-20.0F, 0.0F, 1.0F, 0.0F); GL11.glScalef(f1, -f1, f1); GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F); GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); } else if (item.isFull3D()) { f1 = 0.625F; if (item.shouldRotateAroundWhenRendering()) { GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(0.0F, -0.125F, 0.0F); } this.func_82422_c(); GL11.glScalef(f1, -f1, f1); GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F); GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); } else { f1 = 0.375F; GL11.glTranslatef(0.25F, 0.1875F, -0.1875F); GL11.glScalef(f1, f1, f1); GL11.glRotatef(60.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F); GL11.glRotatef(20.0F, 0.0F, 0.0F, 1.0F); } float f2; int i; float f5; if (itemstack.getItem().requiresMultipleRenderPasses()) { for (i = 0; i < itemstack.getItem().getRenderPasses(itemstack.getItemDamage()); ++i) { int j = itemstack.getItem().getColorFromItemStack(itemstack, i); f5 = (float)(j >> 16 & 255) / 255.0F; f2 = (float)(j >> 8 & 255) / 255.0F; float f3 = (float)(j & 255) / 255.0F; GL11.glColor4f(f5, f2, f3, 1.0F); this.renderManager.itemRenderer.renderItem(p_77029_1_, itemstack, i); } } else { i = itemstack.getItem().getColorFromItemStack(itemstack, 0); float f4 = (float)(i >> 16 & 255) / 255.0F; f5 = (float)(i >> 8 & 255) / 255.0F; f2 = (float)(i & 255) / 255.0F; GL11.glColor4f(f4, f5, f2, 1.0F); this.renderManager.itemRenderer.renderItem(p_77029_1_, itemstack, 0); } GL11.glPopMatrix(); } } protected void func_82422_c() { GL11.glTranslatef(0.0F, 0.1875F, 0.0F); } protected ModelKoaMan mainModel; protected ModelKoaMan renderPassModel; }