package net.minecraft.client.renderer.entity; import Oskar13.OskarStart; import Oskar13.TheCharacters.Characters; import Oskar13.TheCharacters.ModelSystem.IModelArmor; import Oskar13.TheCharacters.ModelSystem.ModelPlayerBase; import Oskar13.TheCharacters.ModelSystem.PlayerModel; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.model.ModelBiped; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.tileentity.TileEntitySkullRenderer; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumAction; import net.minecraft.item.EnumArmorMaterial; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.util.MathHelper; import org.lwjgl.opengl.GL11; import static net.minecraftforge.client.IItemRenderer.ItemRenderType.*; import static net.minecraftforge.client.IItemRenderer.ItemRendererHelper.*; import net.minecraftforge.client.IItemRenderer; import net.minecraftforge.client.MinecraftForgeClient; import net.minecraftforge.client.ForgeHooksClient; @SideOnly(Side.CLIENT) public class RenderPlayer extends RenderLiving { //IModelPlayerArmor IModelPlayerArmor; private static ModelPlayerBase baseModel; private static ModelPlayerBase armorModel; private static String lastPM = null; public static String armorFilenamePrefix[] = { "cloth", "chain", "iron", "diamond", "gold" }; public RenderPlayer() { super(Characters.getModel(FMLClientHandler.instance().getClient().session.username).base, Characters.getModel(FMLClientHandler.instance().getClient().session.username).shadowSize); baseModel = (ModelPlayerBase)mainModel; armorModel = Characters.getModel(FMLClientHandler.instance().getClient().session.username).armor; } /** * Set the specified armor model as the player model. Args: player, armorSlot, partialTick */ protected int setArmorModel(EntityPlayer entityplayer, int i, float f) { ItemStack itemstack = entityplayer.inventory.armorItemInSlot(3 - i); if (itemstack != null) { Item item = itemstack.getItem(); if (item instanceof ItemArmor) { String s = armorModel.textureUrl; if (s != null) { s = s.replaceAll("%NAME%", entityplayer.username); } loadDownloadableImageTexture(s, ((IModelArmor)armorModel).texturePath(armorFilenamePrefix[((ItemArmor)item).renderIndex], i)); armorModel.init(((IModelArmor)armorModel).setStrechLayer(i)); ((IModelArmor)armorModel).setVisibleBoxes(i); armorModel.isSneak = baseModel.isSneak; armorModel.armorSlowdown = baseModel.armorSlowdown; armorModel.hasBow = baseModel.hasBow; setRenderPassModel(armorModel); return itemstack.isItemEnchanted() ? 15 : 1; } } return -1; } protected void func_82439_b(EntityPlayer par1EntityPlayer, int par2, float par3) { ItemStack var4 = par1EntityPlayer.inventory.armorItemInSlot(3 - par2); if (var4 != null) { Item var5 = var4.getItem(); if (var5 instanceof ItemArmor) { ItemArmor var6 = (ItemArmor)var5; this.loadTexture(ForgeHooksClient.getArmorTexture(var4, "/armor/" + armorFilenamePrefix[var6.renderIndex] + "_" + (par2 == 2 ? 2 : 1) + "_b.png")); float var7 = 1.0F; GL11.glColor3f(var7, var7, var7); } } } private void updateModel(EntityPlayer entityplayer) { PlayerModel playermodel = Characters.OtherPlayerModel(entityplayer); if (lastPM != playermodel.name) { playermodel.base.init(0.0F); mainModel = baseModel = playermodel.base; armorModel = playermodel.armor; shadowSize = playermodel.shadowSize; lastPM = playermodel.name; } } public void renderPlayer(EntityPlayer par1EntityPlayer, double par2, double par4, double par6, float par8, float par9) { updateModel(par1EntityPlayer); float var10 = 1.0F; GL11.glColor3f(var10, var10, var10); ItemStack var11 = par1EntityPlayer.inventory.getCurrentItem(); if (var11 != null && par1EntityPlayer.getItemInUseCount() > 0) { EnumAction var12 = var11.getItemUseAction(); if (var12 == EnumAction.block) { this.armorModel.heldItemRight = this.armorModel.heldItemRight = this.baseModel.heldItemRight = 3; } else if (var12 == EnumAction.bow) { this.armorModel.aimedBow = this.armorModel.aimedBow = this.baseModel.aimedBow = true; } } double var14 = par4 - (double)par1EntityPlayer.yOffset; if (par1EntityPlayer.isSneaking() && !(par1EntityPlayer instanceof EntityPlayerSP)) { var14 -= 0.125D; } super.doRenderLiving(par1EntityPlayer, par2, var14, par6, par8, par9); } /** * Used to render a player's name above their head */ protected void renderName(EntityPlayer par1EntityPlayer, double par2, double par4, double par6) { if (Minecraft.isGuiEnabled() && par1EntityPlayer != this.renderManager.livingPlayer && !par1EntityPlayer.getHasActivePotion()) { float var8 = 1.6F; float var9 = 0.016666668F * var8; double var10 = par1EntityPlayer.getDistanceSqToEntity(this.renderManager.livingPlayer); float var12 = 1F; if (var10 < (double)(var12 * var12)) { String var13 = par1EntityPlayer.username; if (par1EntityPlayer.isSneaking()) { FontRenderer var14 = this.getFontRendererFromRenderManager(); GL11.glPushMatrix(); GL11.glTranslatef((float)par2 + 0.0F, (float)par4 + 2.3F, (float)par6); GL11.glNormal3f(0.0F, 1.0F, 0.0F); GL11.glRotatef(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); GL11.glRotatef(this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); GL11.glScalef(-var9, -var9, var9); GL11.glDisable(GL11.GL_LIGHTING); GL11.glTranslatef(0.0F, 0.25F / var9, 0.0F); GL11.glDepthMask(false); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); Tessellator var15 = Tessellator.instance; GL11.glDisable(GL11.GL_TEXTURE_2D); var15.startDrawingQuads(); int var16 = var14.getStringWidth(var13) / 2; var15.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F); var15.addVertex((double)(-var16 - 1), -1.0D, 0.0D); var15.addVertex((double)(-var16 - 1), 8.0D, 0.0D); var15.addVertex((double)(var16 + 1), 8.0D, 0.0D); var15.addVertex((double)(var16 + 1), -1.0D, 0.0D); var15.draw(); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glDepthMask(true); var14.drawString(var13, -var14.getStringWidth(var13) / 2, 0, 553648127); GL11.glEnable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_BLEND); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glPopMatrix(); } else if (par1EntityPlayer.isPlayerSleeping()) { this.renderLivingLabel(par1EntityPlayer, var13, par2, par4 - 1.5D, par6, 64); } else { this.renderLivingLabel(par1EntityPlayer, var13, par2, par4, par6, 64); } } } } /** * Method for adding special render rules */ protected void renderSpecials(EntityPlayer par1EntityPlayer, float par2) { float var3 = 1.0F; GL11.glColor3f(var3, var3, var3); super.renderEquippedItems(par1EntityPlayer, par2); super.renderArrowsStuckInEntity(par1EntityPlayer, par2); ItemStack var4 = par1EntityPlayer.inventory.armorItemInSlot(3); if (var4 != null) { GL11.glPushMatrix(); //this.baseModel.bipedHead.postRender(0.0625F); float var5; if (var4 != null && var4.getItem() instanceof ItemBlock) { IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var4, EQUIPPED); boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(EQUIPPED, var4, BLOCK_3D)); if (is3D || RenderBlocks.renderItemIn3d(Block.blocksList[var4.itemID].getRenderType())) { var5 = 0.625F; GL11.glTranslatef(0.0F, -0.25F, 0.0F); GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); GL11.glScalef(var5, -var5, -var5); } this.renderManager.itemRenderer.renderItem(par1EntityPlayer, var4, 0); } else if (var4.getItem().itemID == Item.skull.itemID) { var5 = 1.0625F; GL11.glScalef(var5, -var5, -var5); String var6 = ""; if (var4.hasTagCompound() && var4.getTagCompound().hasKey("SkullOwner")) { var6 = var4.getTagCompound().getString("SkullOwner"); } TileEntitySkullRenderer.skullRenderer.func_82393_a(-0.5F, 0.0F, -0.5F, 1, 180.0F, var4.getItemDamage(), var6); } GL11.glPopMatrix(); } float var7; float var8; if (par1EntityPlayer.username.equals("deadmau5") && this.loadDownloadableImageTexture(par1EntityPlayer.skinUrl, (String)null)) { for (int var20 = 0; var20 < 2; ++var20) { float var25 = par1EntityPlayer.prevRotationYaw + (par1EntityPlayer.rotationYaw - par1EntityPlayer.prevRotationYaw) * par2 - (par1EntityPlayer.prevRenderYawOffset + (par1EntityPlayer.renderYawOffset - par1EntityPlayer.prevRenderYawOffset) * par2); var7 = par1EntityPlayer.prevRotationPitch + (par1EntityPlayer.rotationPitch - par1EntityPlayer.prevRotationPitch) * par2; GL11.glPushMatrix(); GL11.glRotatef(var25, 0.0F, 1.0F, 0.0F); GL11.glRotatef(var7, 1.0F, 0.0F, 0.0F); GL11.glTranslatef(0.375F * (float)(var20 * 2 - 1), 0.0F, 0.0F); GL11.glTranslatef(0.0F, -0.375F, 0.0F); GL11.glRotatef(-var7, 1.0F, 0.0F, 0.0F); GL11.glRotatef(-var25, 0.0F, 1.0F, 0.0F); var8 = 1.3333334F; GL11.glScalef(var8, var8, var8); this.baseModel.renderEars(0.0625F); GL11.glPopMatrix(); } } float var11; if (this.loadDownloadableImageTexture(par1EntityPlayer.playerCloakUrl, (String)null) && !par1EntityPlayer.getHasActivePotion() && !par1EntityPlayer.getHideCape()) { GL11.glPushMatrix(); GL11.glTranslatef(0.0F, 0.0F, 0.125F); double var22 = par1EntityPlayer.field_71091_bM + (par1EntityPlayer.field_71094_bP - par1EntityPlayer.field_71091_bM) * (double)par2 - (par1EntityPlayer.prevPosX + (par1EntityPlayer.posX - par1EntityPlayer.prevPosX) * (double)par2); double var24 = par1EntityPlayer.field_71096_bN + (par1EntityPlayer.field_71095_bQ - par1EntityPlayer.field_71096_bN) * (double)par2 - (par1EntityPlayer.prevPosY + (par1EntityPlayer.posY - par1EntityPlayer.prevPosY) * (double)par2); double var9 = par1EntityPlayer.field_71097_bO + (par1EntityPlayer.field_71085_bR - par1EntityPlayer.field_71097_bO) * (double)par2 - (par1EntityPlayer.prevPosZ + (par1EntityPlayer.posZ - par1EntityPlayer.prevPosZ) * (double)par2); var11 = par1EntityPlayer.prevRenderYawOffset + (par1EntityPlayer.renderYawOffset - par1EntityPlayer.prevRenderYawOffset) * par2; double var12 = (double)MathHelper.sin(var11 * (float)Math.PI / 180.0F); double var14 = (double)(-MathHelper.cos(var11 * (float)Math.PI / 180.0F)); float var16 = (float)var24 * 10.0F; if (var16 < -6.0F) { var16 = -6.0F; } if (var16 > 32.0F) { var16 = 32.0F; } float var17 = (float)(var22 * var12 + var9 * var14) * 100.0F; float var18 = (float)(var22 * var14 - var9 * var12) * 100.0F; if (var17 < 0.0F) { var17 = 0.0F; } float var19 = par1EntityPlayer.prevCameraYaw + (par1EntityPlayer.cameraYaw - par1EntityPlayer.prevCameraYaw) * par2; var16 += MathHelper.sin((par1EntityPlayer.prevDistanceWalkedModified + (par1EntityPlayer.distanceWalkedModified - par1EntityPlayer.prevDistanceWalkedModified) * par2) * 6.0F) * 32.0F * var19; if (par1EntityPlayer.isSneaking()) { var16 += 25.0F; } GL11.glRotatef(6.0F + var17 / 2.0F + var16, 1.0F, 0.0F, 0.0F); GL11.glRotatef(var18 / 2.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(-var18 / 2.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); // this.baseModel.renderCloak(0.0625F); GL11.glPopMatrix(); } ItemStack var21 = par1EntityPlayer.inventory.getCurrentItem(); if (var21 != null) { GL11.glPushMatrix(); // this.baseModel.bipedRightArm.postRender(0.0625F); GL11.glTranslatef(-0.0625F, 0.4375F, 0.0625F); if (par1EntityPlayer.fishEntity != null) { var21 = new ItemStack(Item.stick); } EnumAction var23 = null; if (par1EntityPlayer.getItemInUseCount() > 0) { var23 = var21.getItemUseAction(); } IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var21, EQUIPPED); boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(EQUIPPED, var21, BLOCK_3D)); if (var21.getItem() instanceof ItemBlock && (is3D || RenderBlocks.renderItemIn3d(Block.blocksList[var21.itemID].getRenderType()))) { var7 = 0.5F; GL11.glTranslatef(0.0F, 0.1875F, -0.3125F); var7 *= 0.75F; GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F); GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); GL11.glScalef(-var7, -var7, var7); } else if (var21.itemID == Item.bow.itemID) { var7 = 0.625F; GL11.glTranslatef(0.0F, 0.125F, 0.3125F); GL11.glRotatef(-20.0F, 0.0F, 1.0F, 0.0F); GL11.glScalef(var7, -var7, var7); GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F); GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); } else if (Item.itemsList[var21.itemID].isFull3D()) { var7 = 0.625F; if (Item.itemsList[var21.itemID].shouldRotateAroundWhenRendering()) { GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(0.0F, -0.125F, 0.0F); } if (par1EntityPlayer.getItemInUseCount() > 0 && var23 == EnumAction.block) { GL11.glTranslatef(0.05F, 0.0F, -0.1F); GL11.glRotatef(-50.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(-10.0F, 1.0F, 0.0F, 0.0F); GL11.glRotatef(-60.0F, 0.0F, 0.0F, 1.0F); } GL11.glTranslatef(0.0F, 0.1875F, 0.0F); GL11.glScalef(var7, -var7, var7); GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F); GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); } else { var7 = 0.375F; GL11.glTranslatef(0.25F, 0.1875F, -0.1875F); GL11.glScalef(var7, var7, var7); 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 var10; int var27; float var28; if (var21.getItem().requiresMultipleRenderPasses()) { for (var27 = 0; var27 < var21.getItem().getRenderPasses(var21.getItemDamage()); ++var27) { int var26 = var21.getItem().getColorFromItemStack(var21, var27); var28 = (float)(var26 >> 16 & 255) / 255.0F; var10 = (float)(var26 >> 8 & 255) / 255.0F; var11 = (float)(var26 & 255) / 255.0F; GL11.glColor4f(var28, var10, var11, 1.0F); this.renderManager.itemRenderer.renderItem(par1EntityPlayer, var21, var27); } } else { var27 = var21.getItem().getColorFromItemStack(var21, 0); var8 = (float)(var27 >> 16 & 255) / 255.0F; var28 = (float)(var27 >> 8 & 255) / 255.0F; var10 = (float)(var27 & 255) / 255.0F; GL11.glColor4f(var8, var28, var10, 1.0F); this.renderManager.itemRenderer.renderItem(par1EntityPlayer, var21, 0); } GL11.glPopMatrix(); } } protected void renderPlayerScale(EntityPlayer par1EntityPlayer, float par2) { float var3 = 0.9375F; GL11.glScalef(var3, var3, var3); } public void func_82441_a(EntityPlayer par1EntityPlayer) { float var2 = 1.0F; GL11.glColor3f(var2, var2, var2); this.baseModel.onGround = 0.0F; this.baseModel.setRotationAngles(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, par1EntityPlayer); //this.baseModel.bipedRightArm.render(0.0625F); } /** * Renders player with sleeping offset if sleeping */ protected void renderPlayerSleep(EntityPlayer par1EntityPlayer, double par2, double par4, double par6) { if (par1EntityPlayer.isEntityAlive() && par1EntityPlayer.isPlayerSleeping()) { super.renderLivingAt(par1EntityPlayer, par2 + (double)par1EntityPlayer.field_71079_bU, par4 + (double)par1EntityPlayer.field_71082_cx, par6 + (double)par1EntityPlayer.field_71089_bV); } else { super.renderLivingAt(par1EntityPlayer, par2, par4, par6); } } /** * Rotates the player if the player is sleeping. This method is called in rotateCorpse. */ protected void rotatePlayer(EntityPlayer par1EntityPlayer, float par2, float par3, float par4) { if (par1EntityPlayer.isEntityAlive() && par1EntityPlayer.isPlayerSleeping()) { GL11.glRotatef(par1EntityPlayer.getBedOrientationInDegrees(), 0.0F, 1.0F, 0.0F); GL11.glRotatef(this.getDeathMaxRotation(par1EntityPlayer), 0.0F, 0.0F, 1.0F); GL11.glRotatef(270.0F, 0.0F, 1.0F, 0.0F); } else { super.rotateCorpse(par1EntityPlayer, par2, par3, par4); } } /** * Passes the specialRender and renders it */ protected void passSpecialRender(EntityLiving par1EntityLiving, double par2, double par4, double par6) { this.renderName((EntityPlayer)par1EntityLiving, par2, par4, par6); } /** * Allows the render to do any OpenGL state modifications necessary before the model is rendered. Args: * entityLiving, partialTickTime */ protected void preRenderCallback(EntityLiving par1EntityLiving, float par2) { this.renderPlayerScale((EntityPlayer)par1EntityLiving, par2); } protected void func_82408_c(EntityLiving par1EntityLiving, int par2, float par3) { this.func_82439_b((EntityPlayer)par1EntityLiving, par2, par3); } /** * Queries whether should render the specified pass or not. */ protected int shouldRenderPass(EntityLiving par1EntityLiving, int par2, float par3) { return this.setArmorModel((EntityPlayer)par1EntityLiving, par2, par3); } protected void renderEquippedItems(EntityLiving par1EntityLiving, float par2) { this.renderSpecials((EntityPlayer)par1EntityLiving, par2); } protected void rotateCorpse(EntityLiving par1EntityLiving, float par2, float par3, float par4) { this.rotatePlayer((EntityPlayer)par1EntityLiving, par2, par3, par4); } /** * Sets a simple glTranslate on a LivingEntity. */ protected void renderLivingAt(EntityLiving par1EntityLiving, double par2, double par4, double par6) { this.renderPlayerSleep((EntityPlayer)par1EntityLiving, par2, par4, par6); } public void doRenderLiving(EntityLiving par1EntityLiving, double par2, double par4, double par6, float par8, float par9) { this.renderPlayer((EntityPlayer)par1EntityLiving, 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.renderPlayer((EntityPlayer)par1Entity, par2, par4, par6, par8, par9); } }