package net.minecraft.client.renderer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityClientPlayerMP; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.entity.RenderPlayer; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.texture.TextureUtil; import net.minecraft.entity.EntityLivingBase; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.EnumAction; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemCloth; import net.minecraft.item.ItemMap; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; import net.minecraft.world.storage.MapData; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.client.IItemRenderer; import net.minecraftforge.client.IItemRenderer.ItemRenderType; import net.minecraftforge.client.MinecraftForgeClient; import static net.minecraftforge.client.IItemRenderer.ItemRenderType.*; import static net.minecraftforge.client.IItemRenderer.ItemRendererHelper.*; @SideOnly(Side.CLIENT) public class ItemRenderer { private static final ResourceLocation RES_ITEM_GLINT = new ResourceLocation("textures/misc/enchanted_item_glint.png"); private static final ResourceLocation RES_MAP_BACKGROUND = new ResourceLocation("textures/map/map_background.png"); private static final ResourceLocation RES_UNDERWATER_OVERLAY = new ResourceLocation("textures/misc/underwater.png"); /** A reference to the Minecraft object. */ private Minecraft mc; private ItemStack itemToRender; /** How far the current item has been equipped (0 disequipped and 1 fully up) */ private float equippedProgress; private float prevEquippedProgress; private RenderBlocks renderBlocksIr = new RenderBlocks(); /** The index of the currently held item (0-8, or -1 if not yet updated) */ private int equippedItemSlot = -1; private static final String __OBFID = "CL_00000953"; public ItemRenderer(Minecraft p_i1247_1_) { this.mc = p_i1247_1_; } /** * Renders the item stack for being in an entity's hand Args: itemStack */ public void renderItem(EntityLivingBase p_78443_1_, ItemStack p_78443_2_, int p_78443_3_) { this.renderItem(p_78443_1_, p_78443_2_, p_78443_3_, EQUIPPED); } public void renderItem(EntityLivingBase p_78443_1_, ItemStack p_78443_2_, int p_78443_3_, ItemRenderType type) { GL11.glPushMatrix(); TextureManager texturemanager = this.mc.getTextureManager(); Item item = p_78443_2_.getItem(); Block block = Block.getBlockFromItem(item); if (p_78443_2_ != null && block != null && block.getRenderBlockPass() != 0) { GL11.glEnable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_CULL_FACE); OpenGlHelper.glBlendFunc(770, 771, 1, 0); } IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(p_78443_2_, type); if (customRenderer != null) { texturemanager.bindTexture(texturemanager.getResourceLocation(p_78443_2_.getItemSpriteNumber())); ForgeHooksClient.renderEquippedItem(type, customRenderer, renderBlocksIr, p_78443_1_, p_78443_2_); } else if (p_78443_2_.getItemSpriteNumber() == 0 && item instanceof ItemBlock && RenderBlocks.renderItemIn3d(block.getRenderType())) { texturemanager.bindTexture(texturemanager.getResourceLocation(0)); if (p_78443_2_ != null && block != null && block.getRenderBlockPass() != 0) { GL11.glDepthMask(false); this.renderBlocksIr.renderBlockAsItem(block, p_78443_2_.getMetadata(), 1.0F); GL11.glDepthMask(true); } else { this.renderBlocksIr.renderBlockAsItem(block, p_78443_2_.getMetadata(), 1.0F); } } else { IIcon iicon = p_78443_1_.getItemIcon(p_78443_2_, p_78443_3_); if (iicon == null) { GL11.glPopMatrix(); return; } texturemanager.bindTexture(texturemanager.getResourceLocation(p_78443_2_.getItemSpriteNumber())); TextureUtil.func_152777_a(false, false, 1.0F); Tessellator tessellator = Tessellator.instance; float f = iicon.getMinU(); float f1 = iicon.getMaxU(); float f2 = iicon.getMinV(); float f3 = iicon.getMaxV(); float f4 = 0.0F; float f5 = 0.3F; GL11.glEnable(GL12.GL_RESCALE_NORMAL); GL11.glTranslatef(-f4, -f5, 0.0F); float f6 = 1.5F; GL11.glScalef(f6, f6, f6); GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(-0.9375F, -0.0625F, 0.0F); renderItemIn2D(tessellator, f1, f2, f, f3, iicon.getIconWidth(), iicon.getIconHeight(), 0.0625F); if (p_78443_2_.hasEffect(p_78443_3_)) { GL11.glDepthFunc(GL11.GL_EQUAL); GL11.glDisable(GL11.GL_LIGHTING); texturemanager.bindTexture(RES_ITEM_GLINT); GL11.glEnable(GL11.GL_BLEND); OpenGlHelper.glBlendFunc(768, 1, 1, 0); float f7 = 0.76F; GL11.glColor4f(0.5F * f7, 0.25F * f7, 0.8F * f7, 1.0F); GL11.glMatrixMode(GL11.GL_TEXTURE); GL11.glPushMatrix(); float f8 = 0.125F; GL11.glScalef(f8, f8, f8); float f9 = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F; GL11.glTranslatef(f9, 0.0F, 0.0F); GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F); renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glScalef(f8, f8, f8); f9 = (float)(Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F; GL11.glTranslatef(-f9, 0.0F, 0.0F); GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F); renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F); GL11.glPopMatrix(); GL11.glMatrixMode(GL11.GL_MODELVIEW); GL11.glDisable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_LIGHTING); GL11.glDepthFunc(GL11.GL_LEQUAL); } GL11.glDisable(GL12.GL_RESCALE_NORMAL); texturemanager.bindTexture(texturemanager.getResourceLocation(p_78443_2_.getItemSpriteNumber())); TextureUtil.func_147945_b(); } if (p_78443_2_ != null && block != null && block.getRenderBlockPass() != 0) { GL11.glDisable(GL11.GL_BLEND); } GL11.glPopMatrix(); } /** * Renders an item held in hand as a 2D texture with thickness */ public static void renderItemIn2D(Tessellator p_78439_0_, float p_78439_1_, float p_78439_2_, float p_78439_3_, float p_78439_4_, int p_78439_5_, int p_78439_6_, float p_78439_7_) { p_78439_0_.startDrawingQuads(); p_78439_0_.setNormal(0.0F, 0.0F, 1.0F); p_78439_0_.addVertexWithUV(0.0D, 0.0D, 0.0D, (double)p_78439_1_, (double)p_78439_4_); p_78439_0_.addVertexWithUV(1.0D, 0.0D, 0.0D, (double)p_78439_3_, (double)p_78439_4_); p_78439_0_.addVertexWithUV(1.0D, 1.0D, 0.0D, (double)p_78439_3_, (double)p_78439_2_); p_78439_0_.addVertexWithUV(0.0D, 1.0D, 0.0D, (double)p_78439_1_, (double)p_78439_2_); p_78439_0_.draw(); p_78439_0_.startDrawingQuads(); p_78439_0_.setNormal(0.0F, 0.0F, -1.0F); p_78439_0_.addVertexWithUV(0.0D, 1.0D, (double)(0.0F - p_78439_7_), (double)p_78439_1_, (double)p_78439_2_); p_78439_0_.addVertexWithUV(1.0D, 1.0D, (double)(0.0F - p_78439_7_), (double)p_78439_3_, (double)p_78439_2_); p_78439_0_.addVertexWithUV(1.0D, 0.0D, (double)(0.0F - p_78439_7_), (double)p_78439_3_, (double)p_78439_4_); p_78439_0_.addVertexWithUV(0.0D, 0.0D, (double)(0.0F - p_78439_7_), (double)p_78439_1_, (double)p_78439_4_); p_78439_0_.draw(); float f5 = 0.5F * (p_78439_1_ - p_78439_3_) / (float)p_78439_5_; float f6 = 0.5F * (p_78439_4_ - p_78439_2_) / (float)p_78439_6_; p_78439_0_.startDrawingQuads(); p_78439_0_.setNormal(-1.0F, 0.0F, 0.0F); int k; float f7; float f8; for (k = 0; k < p_78439_5_; ++k) { f7 = (float)k / (float)p_78439_5_; f8 = p_78439_1_ + (p_78439_3_ - p_78439_1_) * f7 - f5; p_78439_0_.addVertexWithUV((double)f7, 0.0D, (double)(0.0F - p_78439_7_), (double)f8, (double)p_78439_4_); p_78439_0_.addVertexWithUV((double)f7, 0.0D, 0.0D, (double)f8, (double)p_78439_4_); p_78439_0_.addVertexWithUV((double)f7, 1.0D, 0.0D, (double)f8, (double)p_78439_2_); p_78439_0_.addVertexWithUV((double)f7, 1.0D, (double)(0.0F - p_78439_7_), (double)f8, (double)p_78439_2_); } p_78439_0_.draw(); p_78439_0_.startDrawingQuads(); p_78439_0_.setNormal(1.0F, 0.0F, 0.0F); float f9; for (k = 0; k < p_78439_5_; ++k) { f7 = (float)k / (float)p_78439_5_; f8 = p_78439_1_ + (p_78439_3_ - p_78439_1_) * f7 - f5; f9 = f7 + 1.0F / (float)p_78439_5_; p_78439_0_.addVertexWithUV((double)f9, 1.0D, (double)(0.0F - p_78439_7_), (double)f8, (double)p_78439_2_); p_78439_0_.addVertexWithUV((double)f9, 1.0D, 0.0D, (double)f8, (double)p_78439_2_); p_78439_0_.addVertexWithUV((double)f9, 0.0D, 0.0D, (double)f8, (double)p_78439_4_); p_78439_0_.addVertexWithUV((double)f9, 0.0D, (double)(0.0F - p_78439_7_), (double)f8, (double)p_78439_4_); } p_78439_0_.draw(); p_78439_0_.startDrawingQuads(); p_78439_0_.setNormal(0.0F, 1.0F, 0.0F); for (k = 0; k < p_78439_6_; ++k) { f7 = (float)k / (float)p_78439_6_; f8 = p_78439_4_ + (p_78439_2_ - p_78439_4_) * f7 - f6; f9 = f7 + 1.0F / (float)p_78439_6_; p_78439_0_.addVertexWithUV(0.0D, (double)f9, 0.0D, (double)p_78439_1_, (double)f8); p_78439_0_.addVertexWithUV(1.0D, (double)f9, 0.0D, (double)p_78439_3_, (double)f8); p_78439_0_.addVertexWithUV(1.0D, (double)f9, (double)(0.0F - p_78439_7_), (double)p_78439_3_, (double)f8); p_78439_0_.addVertexWithUV(0.0D, (double)f9, (double)(0.0F - p_78439_7_), (double)p_78439_1_, (double)f8); } p_78439_0_.draw(); p_78439_0_.startDrawingQuads(); p_78439_0_.setNormal(0.0F, -1.0F, 0.0F); for (k = 0; k < p_78439_6_; ++k) { f7 = (float)k / (float)p_78439_6_; f8 = p_78439_4_ + (p_78439_2_ - p_78439_4_) * f7 - f6; p_78439_0_.addVertexWithUV(1.0D, (double)f7, 0.0D, (double)p_78439_3_, (double)f8); p_78439_0_.addVertexWithUV(0.0D, (double)f7, 0.0D, (double)p_78439_1_, (double)f8); p_78439_0_.addVertexWithUV(0.0D, (double)f7, (double)(0.0F - p_78439_7_), (double)p_78439_1_, (double)f8); p_78439_0_.addVertexWithUV(1.0D, (double)f7, (double)(0.0F - p_78439_7_), (double)p_78439_3_, (double)f8); } p_78439_0_.draw(); } /** * Renders the active item in the player's hand when in first person mode. Args: partialTickTime */ public void renderItemInFirstPerson(float p_78440_1_) { float f1 = this.prevEquippedProgress + (this.equippedProgress - this.prevEquippedProgress) * p_78440_1_; EntityClientPlayerMP entityclientplayermp = this.mc.thePlayer; float f2 = entityclientplayermp.prevRotationPitch + (entityclientplayermp.rotationPitch - entityclientplayermp.prevRotationPitch) * p_78440_1_; GL11.glPushMatrix(); GL11.glRotatef(f2, 1.0F, 0.0F, 0.0F); GL11.glRotatef(entityclientplayermp.prevRotationYaw + (entityclientplayermp.rotationYaw - entityclientplayermp.prevRotationYaw) * p_78440_1_, 0.0F, 1.0F, 0.0F); RenderHelper.enableStandardItemLighting(); GL11.glPopMatrix(); EntityPlayerSP entityplayersp = (EntityPlayerSP)entityclientplayermp; float f3 = entityplayersp.prevRenderArmPitch + (entityplayersp.renderArmPitch - entityplayersp.prevRenderArmPitch) * p_78440_1_; float f4 = entityplayersp.prevRenderArmYaw + (entityplayersp.renderArmYaw - entityplayersp.prevRenderArmYaw) * p_78440_1_; GL11.glRotatef((entityclientplayermp.rotationPitch - f3) * 0.1F, 1.0F, 0.0F, 0.0F); GL11.glRotatef((entityclientplayermp.rotationYaw - f4) * 0.1F, 0.0F, 1.0F, 0.0F); ItemStack itemstack = this.itemToRender; if (itemstack != null && itemstack.getItem() instanceof ItemCloth) { GL11.glEnable(GL11.GL_BLEND); OpenGlHelper.glBlendFunc(770, 771, 1, 0); } int i = this.mc.theWorld.getLightBrightnessForSkyBlocks(MathHelper.floor_double(entityclientplayermp.posX), MathHelper.floor_double(entityclientplayermp.posY), MathHelper.floor_double(entityclientplayermp.posZ), 0); int j = i % 65536; int k = i / 65536; OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j / 1.0F, (float)k / 1.0F); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); float f5; float f6; float f7; if (itemstack != null) { int l = itemstack.getItem().getColorFromItemStack(itemstack, 0); f5 = (float)(l >> 16 & 255) / 255.0F; f6 = (float)(l >> 8 & 255) / 255.0F; f7 = (float)(l & 255) / 255.0F; GL11.glColor4f(f5, f6, f7, 1.0F); } else { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); } float f8; float f9; float f10; float f13; Render render; RenderPlayer renderplayer; if (itemstack != null && itemstack.getItem() instanceof ItemMap) { GL11.glPushMatrix(); f13 = 0.8F; f5 = entityclientplayermp.getSwingProgress(p_78440_1_); f6 = MathHelper.sin(f5 * (float)Math.PI); f7 = MathHelper.sin(MathHelper.sqrt_float(f5) * (float)Math.PI); GL11.glTranslatef(-f7 * 0.4F, MathHelper.sin(MathHelper.sqrt_float(f5) * (float)Math.PI * 2.0F) * 0.2F, -f6 * 0.2F); f5 = 1.0F - f2 / 45.0F + 0.1F; if (f5 < 0.0F) { f5 = 0.0F; } if (f5 > 1.0F) { f5 = 1.0F; } f5 = -MathHelper.cos(f5 * (float)Math.PI) * 0.5F + 0.5F; GL11.glTranslatef(0.0F, 0.0F * f13 - (1.0F - f1) * 1.2F - f5 * 0.5F + 0.04F, -0.9F * f13); GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(f5 * -85.0F, 0.0F, 0.0F, 1.0F); GL11.glEnable(GL12.GL_RESCALE_NORMAL); this.mc.getTextureManager().bindTexture(entityclientplayermp.getLocationSkin()); for (int i1 = 0; i1 < 2; ++i1) { int j1 = i1 * 2 - 1; GL11.glPushMatrix(); GL11.glTranslatef(-0.0F, -0.6F, 1.1F * (float)j1); GL11.glRotatef((float)(-45 * j1), 1.0F, 0.0F, 0.0F); GL11.glRotatef(-90.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(59.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef((float)(-65 * j1), 0.0F, 1.0F, 0.0F); render = RenderManager.instance.getEntityRenderObject(this.mc.thePlayer); renderplayer = (RenderPlayer)render; f10 = 1.0F; GL11.glScalef(f10, f10, f10); renderplayer.renderFirstPersonArm(this.mc.thePlayer); GL11.glPopMatrix(); } f6 = entityclientplayermp.getSwingProgress(p_78440_1_); f7 = MathHelper.sin(f6 * f6 * (float)Math.PI); f8 = MathHelper.sin(MathHelper.sqrt_float(f6) * (float)Math.PI); GL11.glRotatef(-f7 * 20.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(-f8 * 20.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(-f8 * 80.0F, 1.0F, 0.0F, 0.0F); f9 = 0.38F; GL11.glScalef(f9, f9, f9); GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(-1.0F, -1.0F, 0.0F); f10 = 0.015625F; GL11.glScalef(f10, f10, f10); this.mc.getTextureManager().bindTexture(RES_MAP_BACKGROUND); Tessellator tessellator = Tessellator.instance; GL11.glNormal3f(0.0F, 0.0F, -1.0F); tessellator.startDrawingQuads(); byte b0 = 7; tessellator.addVertexWithUV((double)(0 - b0), (double)(128 + b0), 0.0D, 0.0D, 1.0D); tessellator.addVertexWithUV((double)(128 + b0), (double)(128 + b0), 0.0D, 1.0D, 1.0D); tessellator.addVertexWithUV((double)(128 + b0), (double)(0 - b0), 0.0D, 1.0D, 0.0D); tessellator.addVertexWithUV((double)(0 - b0), (double)(0 - b0), 0.0D, 0.0D, 0.0D); tessellator.draw(); IItemRenderer custom = MinecraftForgeClient.getItemRenderer(itemstack, FIRST_PERSON_MAP); MapData mapdata = ((ItemMap)itemstack.getItem()).getMapData(itemstack, this.mc.theWorld); if (custom == null) { if (mapdata != null) { this.mc.entityRenderer.getMapItemRenderer().func_148250_a(mapdata, false); } } else { custom.renderItem(FIRST_PERSON_MAP, itemstack, mc.thePlayer, mc.getTextureManager(), mapdata); } GL11.glPopMatrix(); } else if (itemstack != null) { GL11.glPushMatrix(); f13 = 0.8F; if (entityclientplayermp.getItemInUseCount() > 0) { EnumAction enumaction = itemstack.getItemUseAction(); if (enumaction == EnumAction.eat || enumaction == EnumAction.drink) { f6 = (float)entityclientplayermp.getItemInUseCount() - p_78440_1_ + 1.0F; f7 = 1.0F - f6 / (float)itemstack.getMaxItemUseDuration(); f8 = 1.0F - f7; f8 = f8 * f8 * f8; f8 = f8 * f8 * f8; f8 = f8 * f8 * f8; f9 = 1.0F - f8; GL11.glTranslatef(0.0F, MathHelper.abs(MathHelper.cos(f6 / 4.0F * (float)Math.PI) * 0.1F) * (float)((double)f7 > 0.2D ? 1 : 0), 0.0F); GL11.glTranslatef(f9 * 0.6F, -f9 * 0.5F, 0.0F); GL11.glRotatef(f9 * 90.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(f9 * 10.0F, 1.0F, 0.0F, 0.0F); GL11.glRotatef(f9 * 30.0F, 0.0F, 0.0F, 1.0F); } } else { f5 = entityclientplayermp.getSwingProgress(p_78440_1_); f6 = MathHelper.sin(f5 * (float)Math.PI); f7 = MathHelper.sin(MathHelper.sqrt_float(f5) * (float)Math.PI); GL11.glTranslatef(-f7 * 0.4F, MathHelper.sin(MathHelper.sqrt_float(f5) * (float)Math.PI * 2.0F) * 0.2F, -f6 * 0.2F); } GL11.glTranslatef(0.7F * f13, -0.65F * f13 - (1.0F - f1) * 0.6F, -0.9F * f13); GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); GL11.glEnable(GL12.GL_RESCALE_NORMAL); f5 = entityclientplayermp.getSwingProgress(p_78440_1_); f6 = MathHelper.sin(f5 * f5 * (float)Math.PI); f7 = MathHelper.sin(MathHelper.sqrt_float(f5) * (float)Math.PI); GL11.glRotatef(-f6 * 20.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(-f7 * 20.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(-f7 * 80.0F, 1.0F, 0.0F, 0.0F); f8 = 0.4F; GL11.glScalef(f8, f8, f8); float f11; float f12; if (entityclientplayermp.getItemInUseCount() > 0) { EnumAction enumaction1 = itemstack.getItemUseAction(); if (enumaction1 == EnumAction.block) { GL11.glTranslatef(-0.5F, 0.2F, 0.0F); GL11.glRotatef(30.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(-80.0F, 1.0F, 0.0F, 0.0F); GL11.glRotatef(60.0F, 0.0F, 1.0F, 0.0F); } else if (enumaction1 == EnumAction.bow) { GL11.glRotatef(-18.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(-12.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(-8.0F, 1.0F, 0.0F, 0.0F); GL11.glTranslatef(-0.9F, 0.2F, 0.0F); f10 = (float)itemstack.getMaxItemUseDuration() - ((float)entityclientplayermp.getItemInUseCount() - p_78440_1_ + 1.0F); f11 = f10 / 20.0F; f11 = (f11 * f11 + f11 * 2.0F) / 3.0F; if (f11 > 1.0F) { f11 = 1.0F; } if (f11 > 0.1F) { GL11.glTranslatef(0.0F, MathHelper.sin((f10 - 0.1F) * 1.3F) * 0.01F * (f11 - 0.1F), 0.0F); } GL11.glTranslatef(0.0F, 0.0F, f11 * 0.1F); GL11.glRotatef(-335.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(-50.0F, 0.0F, 1.0F, 0.0F); GL11.glTranslatef(0.0F, 0.5F, 0.0F); f12 = 1.0F + f11 * 0.2F; GL11.glScalef(1.0F, 1.0F, f12); GL11.glTranslatef(0.0F, -0.5F, 0.0F); GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F); } } if (itemstack.getItem().shouldRotateAroundWhenRendering()) { GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); } if (itemstack.getItem().requiresMultipleRenderPasses()) { this.renderItem(entityclientplayermp, itemstack, 0, EQUIPPED_FIRST_PERSON); for (int x = 1; x < itemstack.getItem().getRenderPasses(itemstack.getMetadata()); x++) { int k1 = itemstack.getItem().getColorFromItemStack(itemstack, x); f10 = (float)(k1 >> 16 & 255) / 255.0F; f11 = (float)(k1 >> 8 & 255) / 255.0F; f12 = (float)(k1 & 255) / 255.0F; GL11.glColor4f(1.0F * f10, 1.0F * f11, 1.0F * f12, 1.0F); this.renderItem(entityclientplayermp, itemstack, x, EQUIPPED_FIRST_PERSON); } } else { this.renderItem(entityclientplayermp, itemstack, 0, EQUIPPED_FIRST_PERSON); } GL11.glPopMatrix(); } else if (!entityclientplayermp.isInvisible()) { GL11.glPushMatrix(); f13 = 0.8F; f5 = entityclientplayermp.getSwingProgress(p_78440_1_); f6 = MathHelper.sin(f5 * (float)Math.PI); f7 = MathHelper.sin(MathHelper.sqrt_float(f5) * (float)Math.PI); GL11.glTranslatef(-f7 * 0.3F, MathHelper.sin(MathHelper.sqrt_float(f5) * (float)Math.PI * 2.0F) * 0.4F, -f6 * 0.4F); GL11.glTranslatef(0.8F * f13, -0.75F * f13 - (1.0F - f1) * 0.6F, -0.9F * f13); GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); GL11.glEnable(GL12.GL_RESCALE_NORMAL); f5 = entityclientplayermp.getSwingProgress(p_78440_1_); f6 = MathHelper.sin(f5 * f5 * (float)Math.PI); f7 = MathHelper.sin(MathHelper.sqrt_float(f5) * (float)Math.PI); GL11.glRotatef(f7 * 70.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(-f6 * 20.0F, 0.0F, 0.0F, 1.0F); this.mc.getTextureManager().bindTexture(entityclientplayermp.getLocationSkin()); GL11.glTranslatef(-1.0F, 3.6F, 3.5F); GL11.glRotatef(120.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(200.0F, 1.0F, 0.0F, 0.0F); GL11.glRotatef(-135.0F, 0.0F, 1.0F, 0.0F); GL11.glScalef(1.0F, 1.0F, 1.0F); GL11.glTranslatef(5.6F, 0.0F, 0.0F); render = RenderManager.instance.getEntityRenderObject(this.mc.thePlayer); renderplayer = (RenderPlayer)render; f10 = 1.0F; GL11.glScalef(f10, f10, f10); renderplayer.renderFirstPersonArm(this.mc.thePlayer); GL11.glPopMatrix(); } if (itemstack != null && itemstack.getItem() instanceof ItemCloth) { GL11.glDisable(GL11.GL_BLEND); } GL11.glDisable(GL12.GL_RESCALE_NORMAL); RenderHelper.disableStandardItemLighting(); } /** * Renders all the overlays that are in first person mode. Args: partialTickTime */ public void renderOverlays(float p_78447_1_) { GL11.glDisable(GL11.GL_ALPHA_TEST); if (this.mc.thePlayer.isBurning()) { if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderBlockOverlayEvent(this.mc.thePlayer, p_78447_1_, net.minecraftforge.client.event.RenderBlockOverlayEvent.OverlayType.FIRE, Blocks.fire, MathHelper.floor_double(this.mc.thePlayer.posX), MathHelper.floor_double(this.mc.thePlayer.posY), MathHelper.floor_double(this.mc.thePlayer.posZ)))) this.renderFireInFirstPerson(p_78447_1_); } if (this.mc.thePlayer.isEntityInsideOpaqueBlock()) { int i = MathHelper.floor_double(this.mc.thePlayer.posX); int j = MathHelper.floor_double(this.mc.thePlayer.posY); int k = MathHelper.floor_double(this.mc.thePlayer.posZ); Block block = this.mc.theWorld.getBlock(i, j, k); int block2_X = i, block2_Y = j, block2_Z = k; if (this.mc.theWorld.getBlock(i, j, k).isNormalCube()) { if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderBlockOverlayEvent(this.mc.thePlayer, p_78447_1_, net.minecraftforge.client.event.RenderBlockOverlayEvent.OverlayType.BLOCK, block, i, j, k))) this.renderInsideOfBlock(p_78447_1_, block.getBlockTextureFromSide(2)); } else { for (int l = 0; l < 8; ++l) { float f1 = ((float)((l >> 0) % 2) - 0.5F) * this.mc.thePlayer.width * 0.9F; float f2 = ((float)((l >> 1) % 2) - 0.5F) * this.mc.thePlayer.height * 0.2F; float f3 = ((float)((l >> 2) % 2) - 0.5F) * this.mc.thePlayer.width * 0.9F; int i1 = MathHelper.floor_float((float)i + f1); int j1 = MathHelper.floor_float((float)j + f2); int k1 = MathHelper.floor_float((float)k + f3); if (this.mc.theWorld.getBlock(i1, j1, k1).isNormalCube()) { block = this.mc.theWorld.getBlock(i1, j1, k1); block2_X = i; block2_Y = j; block2_Z = k; } } } if (block.getMaterial() != Material.air) { if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderBlockOverlayEvent(this.mc.thePlayer, p_78447_1_, net.minecraftforge.client.event.RenderBlockOverlayEvent.OverlayType.BLOCK, block, block2_X, block2_Y, block2_Z))) this.renderInsideOfBlock(p_78447_1_, block.getBlockTextureFromSide(2)); } } if (this.mc.thePlayer.isInsideOfMaterial(Material.water)) { if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderBlockOverlayEvent(this.mc.thePlayer, p_78447_1_, net.minecraftforge.client.event.RenderBlockOverlayEvent.OverlayType.WATER, Blocks.water, MathHelper.floor_double(this.mc.thePlayer.posX), MathHelper.floor_double(this.mc.thePlayer.posY), MathHelper.floor_double(this.mc.thePlayer.posZ)))) this.renderWaterOverlayTexture(p_78447_1_); } GL11.glEnable(GL11.GL_ALPHA_TEST); } /** * Renders the texture of the block the player is inside as an overlay. Args: partialTickTime, blockTextureIndex */ private void renderInsideOfBlock(float p_78446_1_, IIcon p_78446_2_) { this.mc.getTextureManager().bindTexture(TextureMap.locationBlocksTexture); Tessellator tessellator = Tessellator.instance; float f1 = 0.1F; GL11.glColor4f(f1, f1, f1, 0.5F); GL11.glPushMatrix(); float f2 = -1.0F; float f3 = 1.0F; float f4 = -1.0F; float f5 = 1.0F; float f6 = -0.5F; float f7 = p_78446_2_.getMinU(); float f8 = p_78446_2_.getMaxU(); float f9 = p_78446_2_.getMinV(); float f10 = p_78446_2_.getMaxV(); tessellator.startDrawingQuads(); tessellator.addVertexWithUV((double)f2, (double)f4, (double)f6, (double)f8, (double)f10); tessellator.addVertexWithUV((double)f3, (double)f4, (double)f6, (double)f7, (double)f10); tessellator.addVertexWithUV((double)f3, (double)f5, (double)f6, (double)f7, (double)f9); tessellator.addVertexWithUV((double)f2, (double)f5, (double)f6, (double)f8, (double)f9); tessellator.draw(); GL11.glPopMatrix(); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); } /** * Renders a texture that warps around based on the direction the player is looking. Texture needs to be bound * before being called. Used for the water overlay. Args: parialTickTime */ private void renderWaterOverlayTexture(float p_78448_1_) { this.mc.getTextureManager().bindTexture(RES_UNDERWATER_OVERLAY); Tessellator tessellator = Tessellator.instance; float f1 = this.mc.thePlayer.getBrightness(p_78448_1_); GL11.glColor4f(f1, f1, f1, 0.5F); GL11.glEnable(GL11.GL_BLEND); OpenGlHelper.glBlendFunc(770, 771, 1, 0); GL11.glPushMatrix(); float f2 = 4.0F; float f3 = -1.0F; float f4 = 1.0F; float f5 = -1.0F; float f6 = 1.0F; float f7 = -0.5F; float f8 = -this.mc.thePlayer.rotationYaw / 64.0F; float f9 = this.mc.thePlayer.rotationPitch / 64.0F; tessellator.startDrawingQuads(); tessellator.addVertexWithUV((double)f3, (double)f5, (double)f7, (double)(f2 + f8), (double)(f2 + f9)); tessellator.addVertexWithUV((double)f4, (double)f5, (double)f7, (double)(0.0F + f8), (double)(f2 + f9)); tessellator.addVertexWithUV((double)f4, (double)f6, (double)f7, (double)(0.0F + f8), (double)(0.0F + f9)); tessellator.addVertexWithUV((double)f3, (double)f6, (double)f7, (double)(f2 + f8), (double)(0.0F + f9)); tessellator.draw(); GL11.glPopMatrix(); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDisable(GL11.GL_BLEND); } /** * Renders the fire on the screen for first person mode. Arg: partialTickTime */ private void renderFireInFirstPerson(float p_78442_1_) { Tessellator tessellator = Tessellator.instance; GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.9F); GL11.glEnable(GL11.GL_BLEND); OpenGlHelper.glBlendFunc(770, 771, 1, 0); float f1 = 1.0F; for (int i = 0; i < 2; ++i) { GL11.glPushMatrix(); IIcon iicon = Blocks.fire.getFireIcon(1); this.mc.getTextureManager().bindTexture(TextureMap.locationBlocksTexture); float f2 = iicon.getMinU(); float f3 = iicon.getMaxU(); float f4 = iicon.getMinV(); float f5 = iicon.getMaxV(); float f6 = (0.0F - f1) / 2.0F; float f7 = f6 + f1; float f8 = 0.0F - f1 / 2.0F; float f9 = f8 + f1; float f10 = -0.5F; GL11.glTranslatef((float)(-(i * 2 - 1)) * 0.24F, -0.3F, 0.0F); GL11.glRotatef((float)(i * 2 - 1) * 10.0F, 0.0F, 1.0F, 0.0F); tessellator.startDrawingQuads(); tessellator.addVertexWithUV((double)f6, (double)f8, (double)f10, (double)f3, (double)f5); tessellator.addVertexWithUV((double)f7, (double)f8, (double)f10, (double)f2, (double)f5); tessellator.addVertexWithUV((double)f7, (double)f9, (double)f10, (double)f2, (double)f4); tessellator.addVertexWithUV((double)f6, (double)f9, (double)f10, (double)f3, (double)f4); tessellator.draw(); GL11.glPopMatrix(); } GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDisable(GL11.GL_BLEND); } public void updateEquippedItem() { this.prevEquippedProgress = this.equippedProgress; EntityClientPlayerMP entityclientplayermp = this.mc.thePlayer; ItemStack itemstack = entityclientplayermp.inventory.getCurrentItem(); boolean flag = this.equippedItemSlot == entityclientplayermp.inventory.currentItem && itemstack == this.itemToRender; if (this.itemToRender == null && itemstack == null) { flag = true; } if (itemstack != null && this.itemToRender != null && itemstack != this.itemToRender && itemstack.getItem() == this.itemToRender.getItem() && itemstack.getMetadata() == this.itemToRender.getMetadata()) { this.itemToRender = itemstack; flag = true; } float f = 0.4F; float f1 = flag ? 1.0F : 0.0F; float f2 = f1 - this.equippedProgress; if (f2 < -f) { f2 = -f; } if (f2 > f) { f2 = f; } this.equippedProgress += f2; if (this.equippedProgress < 0.1F) { this.itemToRender = itemstack; this.equippedItemSlot = entityclientplayermp.inventory.currentItem; } } /** * Resets equippedProgress */ public void resetEquippedProgress() { this.equippedProgress = 0.0F; } /** * Resets equippedProgress */ public void resetEquippedProgress2() { this.equippedProgress = 0.0F; } }