001 package net.minecraft.src; 002 003 import cpw.mods.fml.common.Side; 004 import cpw.mods.fml.common.asm.SideOnly; 005 import net.minecraft.client.Minecraft; 006 import org.lwjgl.opengl.GL11; 007 import org.lwjgl.opengl.GL12; 008 009 import net.minecraftforge.client.ForgeHooksClient; 010 import net.minecraftforge.client.IItemRenderer; 011 import net.minecraftforge.client.MinecraftForgeClient; 012 import static net.minecraftforge.client.IItemRenderer.ItemRenderType.*; 013 import static net.minecraftforge.client.IItemRenderer.ItemRendererHelper.*; 014 015 @SideOnly(Side.CLIENT) 016 public class ItemRenderer 017 { 018 /** A reference to the Minecraft object. */ 019 private Minecraft mc; 020 private ItemStack itemToRender = null; 021 022 /** 023 * How far the current item has been equipped (0 disequipped and 1 fully up) 024 */ 025 private float equippedProgress = 0.0F; 026 private float prevEquippedProgress = 0.0F; 027 028 /** Instance of RenderBlocks. */ 029 private RenderBlocks renderBlocksInstance = new RenderBlocks(); 030 private MapItemRenderer mapItemRenderer; 031 032 /** The index of the currently held item (0-8, or -1 if not yet updated) */ 033 private int equippedItemSlot = -1; 034 035 public ItemRenderer(Minecraft par1Minecraft) 036 { 037 this.mc = par1Minecraft; 038 this.mapItemRenderer = new MapItemRenderer(par1Minecraft.fontRenderer, par1Minecraft.gameSettings, par1Minecraft.renderEngine); 039 } 040 041 /** 042 * Renders the item stack for being in an entity's hand Args: itemStack 043 */ 044 public void renderItem(EntityLiving par1EntityLiving, ItemStack par2ItemStack, int par3) 045 { 046 GL11.glPushMatrix(); 047 IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(par2ItemStack, EQUIPPED); 048 049 if (customRenderer != null) 050 { 051 GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(par2ItemStack.getItem().getTextureFile())); 052 ForgeHooksClient.renderEquippedItem(customRenderer, renderBlocksInstance, par1EntityLiving, par2ItemStack); 053 } 054 else if (par2ItemStack.getItem() instanceof ItemBlock && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType())) 055 { 056 GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(par2ItemStack.getItem().getTextureFile())); 057 this.renderBlocksInstance.renderBlockAsItem(Block.blocksList[par2ItemStack.itemID], par2ItemStack.getItemDamage(), 1.0F); 058 } 059 else 060 { 061 GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(par2ItemStack.getItem().getTextureFile())); 062 063 Tessellator var5 = Tessellator.instance; 064 int var6 = par1EntityLiving.getItemIcon(par2ItemStack, par3); 065 float var7 = ((float)(var6 % 16 * 16) + 0.0F) / 256.0F; 066 float var8 = ((float)(var6 % 16 * 16) + 15.99F) / 256.0F; 067 float var9 = ((float)(var6 / 16 * 16) + 0.0F) / 256.0F; 068 float var10 = ((float)(var6 / 16 * 16) + 15.99F) / 256.0F; 069 float var11 = 0.0F; 070 float var12 = 0.3F; 071 GL11.glEnable(GL12.GL_RESCALE_NORMAL); 072 GL11.glTranslatef(-var11, -var12, 0.0F); 073 float var13 = 1.5F; 074 GL11.glScalef(var13, var13, var13); 075 GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F); 076 GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F); 077 GL11.glTranslatef(-0.9375F, -0.0625F, 0.0F); 078 this.renderItemIn2D(var5, var8, var9, var7, var10); 079 080 if (par2ItemStack != null && par2ItemStack.hasEffect() && par3 == 0) 081 { 082 GL11.glDepthFunc(GL11.GL_EQUAL); 083 GL11.glDisable(GL11.GL_LIGHTING); 084 this.mc.renderEngine.bindTexture(this.mc.renderEngine.getTexture("%blur%/misc/glint.png")); 085 GL11.glEnable(GL11.GL_BLEND); 086 GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); 087 float var14 = 0.76F; 088 GL11.glColor4f(0.5F * var14, 0.25F * var14, 0.8F * var14, 1.0F); 089 GL11.glMatrixMode(GL11.GL_TEXTURE); 090 GL11.glPushMatrix(); 091 float var15 = 0.125F; 092 GL11.glScalef(var15, var15, var15); 093 float var16 = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F; 094 GL11.glTranslatef(var16, 0.0F, 0.0F); 095 GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F); 096 this.renderItemIn2D(var5, 0.0F, 0.0F, 1.0F, 1.0F); 097 GL11.glPopMatrix(); 098 GL11.glPushMatrix(); 099 GL11.glScalef(var15, var15, var15); 100 var16 = (float)(Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F; 101 GL11.glTranslatef(-var16, 0.0F, 0.0F); 102 GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F); 103 this.renderItemIn2D(var5, 0.0F, 0.0F, 1.0F, 1.0F); 104 GL11.glPopMatrix(); 105 GL11.glMatrixMode(GL11.GL_MODELVIEW); 106 GL11.glDisable(GL11.GL_BLEND); 107 GL11.glEnable(GL11.GL_LIGHTING); 108 GL11.glDepthFunc(GL11.GL_LEQUAL); 109 } 110 111 GL11.glDisable(GL12.GL_RESCALE_NORMAL); 112 } 113 114 GL11.glPopMatrix(); 115 } 116 117 /** 118 * Renders an item held in hand as a 2D texture with thickness 119 */ 120 private void renderItemIn2D(Tessellator par1Tessellator, float par2, float par3, float par4, float par5) 121 { 122 float var6 = 1.0F; 123 float var7 = 0.0625F; 124 par1Tessellator.startDrawingQuads(); 125 par1Tessellator.setNormal(0.0F, 0.0F, 1.0F); 126 par1Tessellator.addVertexWithUV(0.0D, 0.0D, 0.0D, (double)par2, (double)par5); 127 par1Tessellator.addVertexWithUV((double)var6, 0.0D, 0.0D, (double)par4, (double)par5); 128 par1Tessellator.addVertexWithUV((double)var6, 1.0D, 0.0D, (double)par4, (double)par3); 129 par1Tessellator.addVertexWithUV(0.0D, 1.0D, 0.0D, (double)par2, (double)par3); 130 par1Tessellator.draw(); 131 par1Tessellator.startDrawingQuads(); 132 par1Tessellator.setNormal(0.0F, 0.0F, -1.0F); 133 par1Tessellator.addVertexWithUV(0.0D, 1.0D, (double)(0.0F - var7), (double)par2, (double)par3); 134 par1Tessellator.addVertexWithUV((double)var6, 1.0D, (double)(0.0F - var7), (double)par4, (double)par3); 135 par1Tessellator.addVertexWithUV((double)var6, 0.0D, (double)(0.0F - var7), (double)par4, (double)par5); 136 par1Tessellator.addVertexWithUV(0.0D, 0.0D, (double)(0.0F - var7), (double)par2, (double)par5); 137 par1Tessellator.draw(); 138 par1Tessellator.startDrawingQuads(); 139 par1Tessellator.setNormal(-1.0F, 0.0F, 0.0F); 140 int var8; 141 float var9; 142 float var10; 143 float var11; 144 145 for (var8 = 0; var8 < 16; ++var8) 146 { 147 var9 = (float)var8 / 16.0F; 148 var10 = par2 + (par4 - par2) * var9 - 0.001953125F; 149 var11 = var6 * var9; 150 par1Tessellator.addVertexWithUV((double)var11, 0.0D, (double)(0.0F - var7), (double)var10, (double)par5); 151 par1Tessellator.addVertexWithUV((double)var11, 0.0D, 0.0D, (double)var10, (double)par5); 152 par1Tessellator.addVertexWithUV((double)var11, 1.0D, 0.0D, (double)var10, (double)par3); 153 par1Tessellator.addVertexWithUV((double)var11, 1.0D, (double)(0.0F - var7), (double)var10, (double)par3); 154 } 155 156 par1Tessellator.draw(); 157 par1Tessellator.startDrawingQuads(); 158 par1Tessellator.setNormal(1.0F, 0.0F, 0.0F); 159 160 for (var8 = 0; var8 < 16; ++var8) 161 { 162 var9 = (float)var8 / 16.0F; 163 var10 = par2 + (par4 - par2) * var9 - 0.001953125F; 164 var11 = var6 * var9 + 0.0625F; 165 par1Tessellator.addVertexWithUV((double)var11, 1.0D, (double)(0.0F - var7), (double)var10, (double)par3); 166 par1Tessellator.addVertexWithUV((double)var11, 1.0D, 0.0D, (double)var10, (double)par3); 167 par1Tessellator.addVertexWithUV((double)var11, 0.0D, 0.0D, (double)var10, (double)par5); 168 par1Tessellator.addVertexWithUV((double)var11, 0.0D, (double)(0.0F - var7), (double)var10, (double)par5); 169 } 170 171 par1Tessellator.draw(); 172 par1Tessellator.startDrawingQuads(); 173 par1Tessellator.setNormal(0.0F, 1.0F, 0.0F); 174 175 for (var8 = 0; var8 < 16; ++var8) 176 { 177 var9 = (float)var8 / 16.0F; 178 var10 = par5 + (par3 - par5) * var9 - 0.001953125F; 179 var11 = var6 * var9 + 0.0625F; 180 par1Tessellator.addVertexWithUV(0.0D, (double)var11, 0.0D, (double)par2, (double)var10); 181 par1Tessellator.addVertexWithUV((double)var6, (double)var11, 0.0D, (double)par4, (double)var10); 182 par1Tessellator.addVertexWithUV((double)var6, (double)var11, (double)(0.0F - var7), (double)par4, (double)var10); 183 par1Tessellator.addVertexWithUV(0.0D, (double)var11, (double)(0.0F - var7), (double)par2, (double)var10); 184 } 185 186 par1Tessellator.draw(); 187 par1Tessellator.startDrawingQuads(); 188 par1Tessellator.setNormal(0.0F, -1.0F, 0.0F); 189 190 for (var8 = 0; var8 < 16; ++var8) 191 { 192 var9 = (float)var8 / 16.0F; 193 var10 = par5 + (par3 - par5) * var9 - 0.001953125F; 194 var11 = var6 * var9; 195 par1Tessellator.addVertexWithUV((double)var6, (double)var11, 0.0D, (double)par4, (double)var10); 196 par1Tessellator.addVertexWithUV(0.0D, (double)var11, 0.0D, (double)par2, (double)var10); 197 par1Tessellator.addVertexWithUV(0.0D, (double)var11, (double)(0.0F - var7), (double)par2, (double)var10); 198 par1Tessellator.addVertexWithUV((double)var6, (double)var11, (double)(0.0F - var7), (double)par4, (double)var10); 199 } 200 201 par1Tessellator.draw(); 202 } 203 204 /** 205 * Renders the active item in the player's hand when in first person mode. Args: partialTickTime 206 */ 207 public void renderItemInFirstPerson(float par1) 208 { 209 float var2 = this.prevEquippedProgress + (this.equippedProgress - this.prevEquippedProgress) * par1; 210 EntityClientPlayerMP var3 = this.mc.thePlayer; 211 float var4 = var3.prevRotationPitch + (var3.rotationPitch - var3.prevRotationPitch) * par1; 212 GL11.glPushMatrix(); 213 GL11.glRotatef(var4, 1.0F, 0.0F, 0.0F); 214 GL11.glRotatef(var3.prevRotationYaw + (var3.rotationYaw - var3.prevRotationYaw) * par1, 0.0F, 1.0F, 0.0F); 215 RenderHelper.enableStandardItemLighting(); 216 GL11.glPopMatrix(); 217 float var6; 218 float var7; 219 220 if (var3 instanceof EntityPlayerSP) 221 { 222 EntityPlayerSP var5 = (EntityPlayerSP)var3; 223 var6 = var5.prevRenderArmPitch + (var5.renderArmPitch - var5.prevRenderArmPitch) * par1; 224 var7 = var5.prevRenderArmYaw + (var5.renderArmYaw - var5.prevRenderArmYaw) * par1; 225 GL11.glRotatef((var3.rotationPitch - var6) * 0.1F, 1.0F, 0.0F, 0.0F); 226 GL11.glRotatef((var3.rotationYaw - var7) * 0.1F, 0.0F, 1.0F, 0.0F); 227 } 228 229 ItemStack var17 = this.itemToRender; 230 var6 = this.mc.theWorld.getLightBrightness(MathHelper.floor_double(var3.posX), MathHelper.floor_double(var3.posY), MathHelper.floor_double(var3.posZ)); 231 var6 = 1.0F; 232 int var18 = this.mc.theWorld.getLightBrightnessForSkyBlocks(MathHelper.floor_double(var3.posX), MathHelper.floor_double(var3.posY), MathHelper.floor_double(var3.posZ), 0); 233 int var8 = var18 % 65536; 234 int var9 = var18 / 65536; 235 OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var8 / 1.0F, (float)var9 / 1.0F); 236 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); 237 float var10; 238 float var21; 239 float var20; 240 241 if (var17 != null) 242 { 243 var18 = Item.itemsList[var17.itemID].getColorFromDamage(var17.getItemDamage(), 0); 244 var20 = (float)(var18 >> 16 & 255) / 255.0F; 245 var21 = (float)(var18 >> 8 & 255) / 255.0F; 246 var10 = (float)(var18 & 255) / 255.0F; 247 GL11.glColor4f(var6 * var20, var6 * var21, var6 * var10, 1.0F); 248 } 249 else 250 { 251 GL11.glColor4f(var6, var6, var6, 1.0F); 252 } 253 254 float var11; 255 float var12; 256 float var13; 257 Render var24; 258 RenderPlayer var26; 259 260 if (var17 != null && var17.getItem() instanceof ItemMap) 261 { 262 IItemRenderer custom = MinecraftForgeClient.getItemRenderer(var17, FIRST_PERSON_MAP); 263 GL11.glPushMatrix(); 264 var7 = 0.8F; 265 var20 = var3.getSwingProgress(par1); 266 var21 = MathHelper.sin(var20 * (float)Math.PI); 267 var10 = MathHelper.sin(MathHelper.sqrt_float(var20) * (float)Math.PI); 268 GL11.glTranslatef(-var10 * 0.4F, MathHelper.sin(MathHelper.sqrt_float(var20) * (float)Math.PI * 2.0F) * 0.2F, -var21 * 0.2F); 269 var20 = 1.0F - var4 / 45.0F + 0.1F; 270 271 if (var20 < 0.0F) 272 { 273 var20 = 0.0F; 274 } 275 276 if (var20 > 1.0F) 277 { 278 var20 = 1.0F; 279 } 280 281 var20 = -MathHelper.cos(var20 * (float)Math.PI) * 0.5F + 0.5F; 282 GL11.glTranslatef(0.0F, 0.0F * var7 - (1.0F - var2) * 1.2F - var20 * 0.5F + 0.04F, -0.9F * var7); 283 GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); 284 GL11.glRotatef(var20 * -85.0F, 0.0F, 0.0F, 1.0F); 285 GL11.glEnable(GL12.GL_RESCALE_NORMAL); 286 GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTextureForDownloadableImage(this.mc.thePlayer.skinUrl, this.mc.thePlayer.getTexture())); 287 288 for (var9 = 0; var9 < 2; ++var9) 289 { 290 int var22 = var9 * 2 - 1; 291 GL11.glPushMatrix(); 292 GL11.glTranslatef(-0.0F, -0.6F, 1.1F * (float)var22); 293 GL11.glRotatef((float)(-45 * var22), 1.0F, 0.0F, 0.0F); 294 GL11.glRotatef(-90.0F, 0.0F, 0.0F, 1.0F); 295 GL11.glRotatef(59.0F, 0.0F, 0.0F, 1.0F); 296 GL11.glRotatef((float)(-65 * var22), 0.0F, 1.0F, 0.0F); 297 var24 = RenderManager.instance.getEntityRenderObject(this.mc.thePlayer); 298 var26 = (RenderPlayer)var24; 299 var13 = 1.0F; 300 GL11.glScalef(var13, var13, var13); 301 var26.drawFirstPersonHand(); 302 GL11.glPopMatrix(); 303 } 304 305 var21 = var3.getSwingProgress(par1); 306 var10 = MathHelper.sin(var21 * var21 * (float)Math.PI); 307 var11 = MathHelper.sin(MathHelper.sqrt_float(var21) * (float)Math.PI); 308 GL11.glRotatef(-var10 * 20.0F, 0.0F, 1.0F, 0.0F); 309 GL11.glRotatef(-var11 * 20.0F, 0.0F, 0.0F, 1.0F); 310 GL11.glRotatef(-var11 * 80.0F, 1.0F, 0.0F, 0.0F); 311 var12 = 0.38F; 312 GL11.glScalef(var12, var12, var12); 313 GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); 314 GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); 315 GL11.glTranslatef(-1.0F, -1.0F, 0.0F); 316 var13 = 0.015625F; 317 GL11.glScalef(var13, var13, var13); 318 this.mc.renderEngine.bindTexture(this.mc.renderEngine.getTexture("/misc/mapbg.png")); 319 Tessellator var28 = Tessellator.instance; 320 GL11.glNormal3f(0.0F, 0.0F, -1.0F); 321 var28.startDrawingQuads(); 322 byte var27 = 7; 323 var28.addVertexWithUV((double)(0 - var27), (double)(128 + var27), 0.0D, 0.0D, 1.0D); 324 var28.addVertexWithUV((double)(128 + var27), (double)(128 + var27), 0.0D, 1.0D, 1.0D); 325 var28.addVertexWithUV((double)(128 + var27), (double)(0 - var27), 0.0D, 1.0D, 0.0D); 326 var28.addVertexWithUV((double)(0 - var27), (double)(0 - var27), 0.0D, 0.0D, 0.0D); 327 var28.draw(); 328 MapData var16 = ((ItemMap)var17.getItem()).getMapData(var17, this.mc.theWorld); 329 if (custom == null) 330 { 331 this.mapItemRenderer.renderMap(this.mc.thePlayer, this.mc.renderEngine, var16); 332 } 333 else 334 { 335 custom.renderItem(FIRST_PERSON_MAP, var17, mc.thePlayer, mc.renderEngine, var16); 336 } 337 GL11.glPopMatrix(); 338 } 339 else if (var17 != null) 340 { 341 GL11.glPushMatrix(); 342 var7 = 0.8F; 343 344 if (var3.getItemInUseCount() > 0) 345 { 346 EnumAction var19 = var17.getItemUseAction(); 347 348 if (var19 == EnumAction.eat || var19 == EnumAction.drink) 349 { 350 var21 = (float)var3.getItemInUseCount() - par1 + 1.0F; 351 var10 = 1.0F - var21 / (float)var17.getMaxItemUseDuration(); 352 var11 = 1.0F - var10; 353 var11 = var11 * var11 * var11; 354 var11 = var11 * var11 * var11; 355 var11 = var11 * var11 * var11; 356 var12 = 1.0F - var11; 357 GL11.glTranslatef(0.0F, MathHelper.abs(MathHelper.cos(var21 / 4.0F * (float)Math.PI) * 0.1F) * (float)((double)var10 > 0.2D ? 1 : 0), 0.0F); 358 GL11.glTranslatef(var12 * 0.6F, -var12 * 0.5F, 0.0F); 359 GL11.glRotatef(var12 * 90.0F, 0.0F, 1.0F, 0.0F); 360 GL11.glRotatef(var12 * 10.0F, 1.0F, 0.0F, 0.0F); 361 GL11.glRotatef(var12 * 30.0F, 0.0F, 0.0F, 1.0F); 362 } 363 } 364 else 365 { 366 var20 = var3.getSwingProgress(par1); 367 var21 = MathHelper.sin(var20 * (float)Math.PI); 368 var10 = MathHelper.sin(MathHelper.sqrt_float(var20) * (float)Math.PI); 369 GL11.glTranslatef(-var10 * 0.4F, MathHelper.sin(MathHelper.sqrt_float(var20) * (float)Math.PI * 2.0F) * 0.2F, -var21 * 0.2F); 370 } 371 372 GL11.glTranslatef(0.7F * var7, -0.65F * var7 - (1.0F - var2) * 0.6F, -0.9F * var7); 373 GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); 374 GL11.glEnable(GL12.GL_RESCALE_NORMAL); 375 var20 = var3.getSwingProgress(par1); 376 var21 = MathHelper.sin(var20 * var20 * (float)Math.PI); 377 var10 = MathHelper.sin(MathHelper.sqrt_float(var20) * (float)Math.PI); 378 GL11.glRotatef(-var21 * 20.0F, 0.0F, 1.0F, 0.0F); 379 GL11.glRotatef(-var10 * 20.0F, 0.0F, 0.0F, 1.0F); 380 GL11.glRotatef(-var10 * 80.0F, 1.0F, 0.0F, 0.0F); 381 var11 = 0.4F; 382 GL11.glScalef(var11, var11, var11); 383 float var14; 384 float var15; 385 386 if (var3.getItemInUseCount() > 0) 387 { 388 EnumAction var23 = var17.getItemUseAction(); 389 390 if (var23 == EnumAction.block) 391 { 392 GL11.glTranslatef(-0.5F, 0.2F, 0.0F); 393 GL11.glRotatef(30.0F, 0.0F, 1.0F, 0.0F); 394 GL11.glRotatef(-80.0F, 1.0F, 0.0F, 0.0F); 395 GL11.glRotatef(60.0F, 0.0F, 1.0F, 0.0F); 396 } 397 else if (var23 == EnumAction.bow) 398 { 399 GL11.glRotatef(-18.0F, 0.0F, 0.0F, 1.0F); 400 GL11.glRotatef(-12.0F, 0.0F, 1.0F, 0.0F); 401 GL11.glRotatef(-8.0F, 1.0F, 0.0F, 0.0F); 402 GL11.glTranslatef(-0.9F, 0.2F, 0.0F); 403 var13 = (float)var17.getMaxItemUseDuration() - ((float)var3.getItemInUseCount() - par1 + 1.0F); 404 var14 = var13 / 20.0F; 405 var14 = (var14 * var14 + var14 * 2.0F) / 3.0F; 406 407 if (var14 > 1.0F) 408 { 409 var14 = 1.0F; 410 } 411 412 if (var14 > 0.1F) 413 { 414 GL11.glTranslatef(0.0F, MathHelper.sin((var13 - 0.1F) * 1.3F) * 0.01F * (var14 - 0.1F), 0.0F); 415 } 416 417 GL11.glTranslatef(0.0F, 0.0F, var14 * 0.1F); 418 GL11.glRotatef(-335.0F, 0.0F, 0.0F, 1.0F); 419 GL11.glRotatef(-50.0F, 0.0F, 1.0F, 0.0F); 420 GL11.glTranslatef(0.0F, 0.5F, 0.0F); 421 var15 = 1.0F + var14 * 0.2F; 422 GL11.glScalef(1.0F, 1.0F, var15); 423 GL11.glTranslatef(0.0F, -0.5F, 0.0F); 424 GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F); 425 GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F); 426 } 427 } 428 429 if (var17.getItem().shouldRotateAroundWhenRendering()) 430 { 431 GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); 432 } 433 434 if (var17.getItem().requiresMultipleRenderPasses()) 435 { 436 this.renderItem(var3, var17, 0); 437 for (int x = 1; x < var17.getItem().getRenderPasses(var17.getItemDamage()); x++) 438 { 439 int var25 = Item.itemsList[var17.itemID].getColorFromDamage(var17.getItemDamage(), 1); 440 var13 = (float)(var25 >> 16 & 255) / 255.0F; 441 var14 = (float)(var25 >> 8 & 255) / 255.0F; 442 var15 = (float)(var25 & 255) / 255.0F; 443 GL11.glColor4f(var6 * var13, var6 * var14, var6 * var15, 1.0F); 444 this.renderItem(var3, var17, x); 445 } 446 } 447 else 448 { 449 this.renderItem(var3, var17, 0); 450 } 451 452 GL11.glPopMatrix(); 453 } 454 else 455 { 456 GL11.glPushMatrix(); 457 var7 = 0.8F; 458 var20 = var3.getSwingProgress(par1); 459 var21 = MathHelper.sin(var20 * (float)Math.PI); 460 var10 = MathHelper.sin(MathHelper.sqrt_float(var20) * (float)Math.PI); 461 GL11.glTranslatef(-var10 * 0.3F, MathHelper.sin(MathHelper.sqrt_float(var20) * (float)Math.PI * 2.0F) * 0.4F, -var21 * 0.4F); 462 GL11.glTranslatef(0.8F * var7, -0.75F * var7 - (1.0F - var2) * 0.6F, -0.9F * var7); 463 GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); 464 GL11.glEnable(GL12.GL_RESCALE_NORMAL); 465 var20 = var3.getSwingProgress(par1); 466 var21 = MathHelper.sin(var20 * var20 * (float)Math.PI); 467 var10 = MathHelper.sin(MathHelper.sqrt_float(var20) * (float)Math.PI); 468 GL11.glRotatef(var10 * 70.0F, 0.0F, 1.0F, 0.0F); 469 GL11.glRotatef(-var21 * 20.0F, 0.0F, 0.0F, 1.0F); 470 GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTextureForDownloadableImage(this.mc.thePlayer.skinUrl, this.mc.thePlayer.getTexture())); 471 GL11.glTranslatef(-1.0F, 3.6F, 3.5F); 472 GL11.glRotatef(120.0F, 0.0F, 0.0F, 1.0F); 473 GL11.glRotatef(200.0F, 1.0F, 0.0F, 0.0F); 474 GL11.glRotatef(-135.0F, 0.0F, 1.0F, 0.0F); 475 GL11.glScalef(1.0F, 1.0F, 1.0F); 476 GL11.glTranslatef(5.6F, 0.0F, 0.0F); 477 var24 = RenderManager.instance.getEntityRenderObject(this.mc.thePlayer); 478 var26 = (RenderPlayer)var24; 479 var13 = 1.0F; 480 GL11.glScalef(var13, var13, var13); 481 var26.drawFirstPersonHand(); 482 GL11.glPopMatrix(); 483 } 484 485 GL11.glDisable(GL12.GL_RESCALE_NORMAL); 486 RenderHelper.disableStandardItemLighting(); 487 } 488 489 /** 490 * Renders all the overlays that are in first person mode. Args: partialTickTime 491 */ 492 public void renderOverlays(float par1) 493 { 494 GL11.glDisable(GL11.GL_ALPHA_TEST); 495 int var2; 496 497 if (this.mc.thePlayer.isBurning()) 498 { 499 var2 = this.mc.renderEngine.getTexture("/terrain.png"); 500 GL11.glBindTexture(GL11.GL_TEXTURE_2D, var2); 501 this.renderFireInFirstPerson(par1); 502 } 503 504 if (this.mc.thePlayer.isEntityInsideOpaqueBlock()) 505 { 506 var2 = MathHelper.floor_double(this.mc.thePlayer.posX); 507 int var3 = MathHelper.floor_double(this.mc.thePlayer.posY); 508 int var4 = MathHelper.floor_double(this.mc.thePlayer.posZ); 509 int var5 = this.mc.renderEngine.getTexture("/terrain.png"); 510 GL11.glBindTexture(GL11.GL_TEXTURE_2D, var5); 511 int var6 = this.mc.theWorld.getBlockId(var2, var3, var4); 512 513 if (this.mc.theWorld.isBlockNormalCube(var2, var3, var4)) 514 { 515 this.renderInsideOfBlock(par1, Block.blocksList[var6].getBlockTextureFromSide(2)); 516 } 517 else 518 { 519 for (int var7 = 0; var7 < 8; ++var7) 520 { 521 float var8 = ((float)((var7 >> 0) % 2) - 0.5F) * this.mc.thePlayer.width * 0.9F; 522 float var9 = ((float)((var7 >> 1) % 2) - 0.5F) * this.mc.thePlayer.height * 0.2F; 523 float var10 = ((float)((var7 >> 2) % 2) - 0.5F) * this.mc.thePlayer.width * 0.9F; 524 int var11 = MathHelper.floor_float((float)var2 + var8); 525 int var12 = MathHelper.floor_float((float)var3 + var9); 526 int var13 = MathHelper.floor_float((float)var4 + var10); 527 528 if (this.mc.theWorld.isBlockNormalCube(var11, var12, var13)) 529 { 530 var6 = this.mc.theWorld.getBlockId(var11, var12, var13); 531 } 532 } 533 } 534 535 if (Block.blocksList[var6] != null) 536 { 537 this.renderInsideOfBlock(par1, Block.blocksList[var6].getBlockTextureFromSide(2)); 538 } 539 } 540 541 if (this.mc.thePlayer.isInsideOfMaterial(Material.water)) 542 { 543 var2 = this.mc.renderEngine.getTexture("/misc/water.png"); 544 GL11.glBindTexture(GL11.GL_TEXTURE_2D, var2); 545 this.renderWarpedTextureOverlay(par1); 546 } 547 548 GL11.glEnable(GL11.GL_ALPHA_TEST); 549 } 550 551 /** 552 * Renders the texture of the block the player is inside as an overlay. Args: partialTickTime, blockTextureIndex 553 */ 554 private void renderInsideOfBlock(float par1, int par2) 555 { 556 Tessellator var3 = Tessellator.instance; 557 this.mc.thePlayer.getBrightness(par1); 558 float var4 = 0.1F; 559 GL11.glColor4f(var4, var4, var4, 0.5F); 560 GL11.glPushMatrix(); 561 float var5 = -1.0F; 562 float var6 = 1.0F; 563 float var7 = -1.0F; 564 float var8 = 1.0F; 565 float var9 = -0.5F; 566 float var10 = 0.0078125F; 567 float var11 = (float)(par2 % 16) / 256.0F - var10; 568 float var12 = ((float)(par2 % 16) + 15.99F) / 256.0F + var10; 569 float var13 = (float)(par2 / 16) / 256.0F - var10; 570 float var14 = ((float)(par2 / 16) + 15.99F) / 256.0F + var10; 571 var3.startDrawingQuads(); 572 var3.addVertexWithUV((double)var5, (double)var7, (double)var9, (double)var12, (double)var14); 573 var3.addVertexWithUV((double)var6, (double)var7, (double)var9, (double)var11, (double)var14); 574 var3.addVertexWithUV((double)var6, (double)var8, (double)var9, (double)var11, (double)var13); 575 var3.addVertexWithUV((double)var5, (double)var8, (double)var9, (double)var12, (double)var13); 576 var3.draw(); 577 GL11.glPopMatrix(); 578 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); 579 } 580 581 /** 582 * Renders a texture that warps around based on the direction the player is looking. Texture needs to be bound 583 * before being called. Used for the water overlay. Args: parialTickTime 584 */ 585 private void renderWarpedTextureOverlay(float par1) 586 { 587 Tessellator var2 = Tessellator.instance; 588 float var3 = this.mc.thePlayer.getBrightness(par1); 589 GL11.glColor4f(var3, var3, var3, 0.5F); 590 GL11.glEnable(GL11.GL_BLEND); 591 GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); 592 GL11.glPushMatrix(); 593 float var4 = 4.0F; 594 float var5 = -1.0F; 595 float var6 = 1.0F; 596 float var7 = -1.0F; 597 float var8 = 1.0F; 598 float var9 = -0.5F; 599 float var10 = -this.mc.thePlayer.rotationYaw / 64.0F; 600 float var11 = this.mc.thePlayer.rotationPitch / 64.0F; 601 var2.startDrawingQuads(); 602 var2.addVertexWithUV((double)var5, (double)var7, (double)var9, (double)(var4 + var10), (double)(var4 + var11)); 603 var2.addVertexWithUV((double)var6, (double)var7, (double)var9, (double)(0.0F + var10), (double)(var4 + var11)); 604 var2.addVertexWithUV((double)var6, (double)var8, (double)var9, (double)(0.0F + var10), (double)(0.0F + var11)); 605 var2.addVertexWithUV((double)var5, (double)var8, (double)var9, (double)(var4 + var10), (double)(0.0F + var11)); 606 var2.draw(); 607 GL11.glPopMatrix(); 608 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); 609 GL11.glDisable(GL11.GL_BLEND); 610 } 611 612 /** 613 * Renders the fire on the screen for first person mode. Arg: partialTickTime 614 */ 615 private void renderFireInFirstPerson(float par1) 616 { 617 Tessellator var2 = Tessellator.instance; 618 GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.9F); 619 GL11.glEnable(GL11.GL_BLEND); 620 GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); 621 float var3 = 1.0F; 622 623 for (int var4 = 0; var4 < 2; ++var4) 624 { 625 GL11.glPushMatrix(); 626 int var5 = Block.fire.blockIndexInTexture + var4 * 16; 627 int var6 = (var5 & 15) << 4; 628 int var7 = var5 & 240; 629 float var8 = (float)var6 / 256.0F; 630 float var9 = ((float)var6 + 15.99F) / 256.0F; 631 float var10 = (float)var7 / 256.0F; 632 float var11 = ((float)var7 + 15.99F) / 256.0F; 633 float var12 = (0.0F - var3) / 2.0F; 634 float var13 = var12 + var3; 635 float var14 = 0.0F - var3 / 2.0F; 636 float var15 = var14 + var3; 637 float var16 = -0.5F; 638 GL11.glTranslatef((float)(-(var4 * 2 - 1)) * 0.24F, -0.3F, 0.0F); 639 GL11.glRotatef((float)(var4 * 2 - 1) * 10.0F, 0.0F, 1.0F, 0.0F); 640 var2.startDrawingQuads(); 641 var2.addVertexWithUV((double)var12, (double)var14, (double)var16, (double)var9, (double)var11); 642 var2.addVertexWithUV((double)var13, (double)var14, (double)var16, (double)var8, (double)var11); 643 var2.addVertexWithUV((double)var13, (double)var15, (double)var16, (double)var8, (double)var10); 644 var2.addVertexWithUV((double)var12, (double)var15, (double)var16, (double)var9, (double)var10); 645 var2.draw(); 646 GL11.glPopMatrix(); 647 } 648 649 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); 650 GL11.glDisable(GL11.GL_BLEND); 651 } 652 653 public void updateEquippedItem() 654 { 655 this.prevEquippedProgress = this.equippedProgress; 656 EntityClientPlayerMP var1 = this.mc.thePlayer; 657 ItemStack var2 = var1.inventory.getCurrentItem(); 658 boolean var3 = this.equippedItemSlot == var1.inventory.currentItem && var2 == this.itemToRender; 659 660 if (this.itemToRender == null && var2 == null) 661 { 662 var3 = true; 663 } 664 665 if (var2 != null && this.itemToRender != null && var2 != this.itemToRender && var2.itemID == this.itemToRender.itemID && var2.getItemDamage() == this.itemToRender.getItemDamage()) 666 { 667 this.itemToRender = var2; 668 var3 = true; 669 } 670 671 float var4 = 0.4F; 672 float var5 = var3 ? 1.0F : 0.0F; 673 float var6 = var5 - this.equippedProgress; 674 675 if (var6 < -var4) 676 { 677 var6 = -var4; 678 } 679 680 if (var6 > var4) 681 { 682 var6 = var4; 683 } 684 685 this.equippedProgress += var6; 686 687 if (this.equippedProgress < 0.1F) 688 { 689 this.itemToRender = var2; 690 this.equippedItemSlot = var1.inventory.currentItem; 691 } 692 } 693 694 public void func_78444_b() 695 { 696 this.equippedProgress = 0.0F; 697 } 698 699 public void func_78445_c() 700 { 701 this.equippedProgress = 0.0F; 702 } 703 }