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