001 package net.minecraft.client.renderer.entity; 002 003 import cpw.mods.fml.relauncher.Side; 004 import cpw.mods.fml.relauncher.SideOnly; 005 import java.util.Random; 006 import net.minecraft.block.Block; 007 import net.minecraft.client.Minecraft; 008 import net.minecraft.client.gui.FontRenderer; 009 import net.minecraft.client.renderer.ItemRenderer; 010 import net.minecraft.client.renderer.RenderBlocks; 011 import net.minecraft.client.renderer.RenderEngine; 012 import net.minecraft.client.renderer.Tessellator; 013 import net.minecraft.entity.Entity; 014 import net.minecraft.entity.item.EntityItem; 015 import net.minecraft.item.Item; 016 import net.minecraft.item.ItemBlock; 017 import net.minecraft.item.ItemStack; 018 import net.minecraft.util.MathHelper; 019 import org.lwjgl.opengl.GL11; 020 import org.lwjgl.opengl.GL12; 021 022 import net.minecraftforge.client.ForgeHooksClient; 023 024 @SideOnly(Side.CLIENT) 025 public class RenderItem extends Render 026 { 027 private RenderBlocks itemRenderBlocks = new RenderBlocks(); 028 029 /** The RNG used in RenderItem (for bobbing itemstacks on the ground) */ 030 private Random random = new Random(); 031 public boolean field_77024_a = true; 032 033 /** Defines the zLevel of rendering of item on GUI. */ 034 public float zLevel = 0.0F; 035 public static boolean field_82407_g = false; 036 037 public RenderItem() 038 { 039 this.shadowSize = 0.15F; 040 this.shadowOpaque = 0.75F; 041 } 042 043 /** 044 * Renders the item 045 */ 046 public void doRenderItem(EntityItem par1EntityItem, double par2, double par4, double par6, float par8, float par9) 047 { 048 this.random.setSeed(187L); 049 ItemStack var10 = par1EntityItem.func_92014_d(); 050 051 if (var10.getItem() != null) 052 { 053 GL11.glPushMatrix(); 054 float var11 = shouldBob() ? MathHelper.sin(((float)par1EntityItem.age + par9) / 10.0F + par1EntityItem.hoverStart) * 0.1F + 0.1F : 0F; 055 float var12 = (((float)par1EntityItem.age + par9) / 20.0F + par1EntityItem.hoverStart) * (180F / (float)Math.PI); 056 byte var13 = getMiniBlockCountForItemStack(var10); 057 058 GL11.glTranslatef((float)par2, (float)par4 + var11, (float)par6); 059 GL11.glEnable(GL12.GL_RESCALE_NORMAL); 060 int var16; 061 float var19; 062 float var20; 063 float var24; 064 065 if (ForgeHooksClient.renderEntityItem(par1EntityItem, var10, var11, var12, random, renderManager.renderEngine, renderBlocks)) 066 { 067 ; 068 } 069 else if (var10.getItem() instanceof ItemBlock && RenderBlocks.renderItemIn3d(Block.blocksList[var10.itemID].getRenderType())) 070 { 071 GL11.glRotatef(var12, 0.0F, 1.0F, 0.0F); 072 073 if (field_82407_g) 074 { 075 GL11.glScalef(1.25F, 1.25F, 1.25F); 076 GL11.glTranslatef(0.0F, 0.05F, 0.0F); 077 GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); 078 } 079 080 this.loadTexture(Block.blocksList[var10.itemID].getTextureFile()); 081 float var22 = 0.25F; 082 var16 = Block.blocksList[var10.itemID].getRenderType(); 083 084 if (var16 == 1 || var16 == 19 || var16 == 12 || var16 == 2) 085 { 086 var22 = 0.5F; 087 } 088 089 GL11.glScalef(var22, var22, var22); 090 091 for (int var23 = 0; var23 < var13; ++var23) 092 { 093 GL11.glPushMatrix(); 094 095 if (var23 > 0) 096 { 097 var24 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / var22; 098 var19 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / var22; 099 var20 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / var22; 100 GL11.glTranslatef(var24, var19, var20); 101 } 102 103 var24 = 1.0F; 104 this.itemRenderBlocks.renderBlockAsItem(Block.blocksList[var10.itemID], var10.getItemDamage(), var24); 105 GL11.glPopMatrix(); 106 } 107 } 108 else 109 { 110 int var15; 111 float var17; 112 113 if (var10.getItem().requiresMultipleRenderPasses()) 114 { 115 if (field_82407_g) 116 { 117 GL11.glScalef(0.5128205F, 0.5128205F, 0.5128205F); 118 GL11.glTranslatef(0.0F, -0.05F, 0.0F); 119 } 120 else 121 { 122 GL11.glScalef(0.5F, 0.5F, 0.5F); 123 } 124 125 126 for (var15 = 0; var15 <= var10.getItem().getRenderPasses(var10.getItemDamage()); ++var15) 127 { 128 this.loadTexture(Item.itemsList[var10.itemID].getTextureFile()); 129 this.random.setSeed(187L); 130 var16 = var10.getItem().getIconIndex(var10, var15); 131 var17 = 1.0F; 132 133 if (this.field_77024_a) 134 { 135 int var18 = Item.itemsList[var10.itemID].getColorFromItemStack(var10, var15); 136 var19 = (float)(var18 >> 16 & 255) / 255.0F; 137 var20 = (float)(var18 >> 8 & 255) / 255.0F; 138 float var21 = (float)(var18 & 255) / 255.0F; 139 GL11.glColor4f(var19 * var17, var20 * var17, var21 * var17, 1.0F); 140 this.func_77020_a(par1EntityItem, var16, var13, par9, var19 * var17, var20 * var17, var21 * var17); 141 } 142 else 143 { 144 this.func_77020_a(par1EntityItem, var16, var13, par9, 1.0F, 1.0F, 1.0F); 145 } 146 } 147 } 148 else 149 { 150 if (field_82407_g) 151 { 152 GL11.glScalef(0.5128205F, 0.5128205F, 0.5128205F); 153 GL11.glTranslatef(0.0F, -0.05F, 0.0F); 154 } 155 else 156 { 157 GL11.glScalef(0.5F, 0.5F, 0.5F); 158 } 159 160 var15 = var10.getIconIndex(); 161 162 this.loadTexture(var10.getItem().getTextureFile()); 163 164 if (this.field_77024_a) 165 { 166 var16 = Item.itemsList[var10.itemID].getColorFromItemStack(var10, 0); 167 var17 = (float)(var16 >> 16 & 255) / 255.0F; 168 var24 = (float)(var16 >> 8 & 255) / 255.0F; 169 var19 = (float)(var16 & 255) / 255.0F; 170 var20 = 1.0F; 171 this.func_77020_a(par1EntityItem, var15, var13, par9, var17 * var20, var24 * var20, var19 * var20); 172 } 173 else 174 { 175 this.func_77020_a(par1EntityItem, var15, var13, par9, 1.0F, 1.0F, 1.0F); 176 } 177 } 178 } 179 180 GL11.glDisable(GL12.GL_RESCALE_NORMAL); 181 GL11.glPopMatrix(); 182 } 183 } 184 185 private void func_77020_a(EntityItem par1EntityItem, int par2, int par3, float par4, float par5, float par6, float par7) 186 { 187 Tessellator var8 = Tessellator.instance; 188 float var9 = (float)(par2 % 16 * 16 + 0) / 256.0F; 189 float var10 = (float)(par2 % 16 * 16 + 16) / 256.0F; 190 float var11 = (float)(par2 / 16 * 16 + 0) / 256.0F; 191 float var12 = (float)(par2 / 16 * 16 + 16) / 256.0F; 192 float var13 = 1.0F; 193 float var14 = 0.5F; 194 float var15 = 0.25F; 195 float var17; 196 197 if (this.renderManager.options.fancyGraphics) 198 { 199 GL11.glPushMatrix(); 200 201 if (field_82407_g) 202 { 203 GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); 204 } 205 else 206 { 207 GL11.glRotatef((((float)par1EntityItem.age + par4) / 20.0F + par1EntityItem.hoverStart) * (180F / (float)Math.PI), 0.0F, 1.0F, 0.0F); 208 } 209 210 float var16 = 0.0625F; 211 var17 = 0.021875F; 212 ItemStack var18 = par1EntityItem.func_92014_d(); 213 int var19 = var18.stackSize; 214 byte var24 = getMiniItemCountForItemStack(var18); 215 216 217 GL11.glTranslatef(-var14, -var15, -((var16 + var17) * (float)var24 / 2.0F)); 218 219 for (int var20 = 0; var20 < var24; ++var20) 220 { 221 // Makes items offset when in 3D, like when in 2D, looks much better. Considered a vanilla bug... 222 if (var20 > 0 && shouldSpreadItems()) 223 { 224 float x = (random.nextFloat() * 2.0F - 1.0F) * 0.3F / 0.5F; 225 float y = (random.nextFloat() * 2.0F - 1.0F) * 0.3F / 0.5F; 226 float z = (random.nextFloat() * 2.0F - 1.0F) * 0.3F / 0.5F; 227 GL11.glTranslatef(x, y, var16 + var17); 228 } 229 else 230 { 231 GL11.glTranslatef(0f, 0f, var16 + var17); 232 } 233 234 this.loadTexture(Item.itemsList[var18.itemID].getTextureFile()); 235 236 GL11.glColor4f(par5, par6, par7, 1.0F); 237 ItemRenderer.renderItemIn2D(var8, var10, var11, var9, var12, var16); 238 239 if (var18 != null && var18.hasEffect()) 240 { 241 GL11.glDepthFunc(GL11.GL_EQUAL); 242 GL11.glDisable(GL11.GL_LIGHTING); 243 this.renderManager.renderEngine.bindTexture(this.renderManager.renderEngine.getTexture("%blur%/misc/glint.png")); 244 GL11.glEnable(GL11.GL_BLEND); 245 GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); 246 float var21 = 0.76F; 247 GL11.glColor4f(0.5F * var21, 0.25F * var21, 0.8F * var21, 1.0F); 248 GL11.glMatrixMode(GL11.GL_TEXTURE); 249 GL11.glPushMatrix(); 250 float var22 = 0.125F; 251 GL11.glScalef(var22, var22, var22); 252 float var23 = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F; 253 GL11.glTranslatef(var23, 0.0F, 0.0F); 254 GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F); 255 ItemRenderer.renderItemIn2D(var8, 0.0F, 0.0F, 1.0F, 1.0F, var16); 256 GL11.glPopMatrix(); 257 GL11.glPushMatrix(); 258 GL11.glScalef(var22, var22, var22); 259 var23 = (float)(Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F; 260 GL11.glTranslatef(-var23, 0.0F, 0.0F); 261 GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F); 262 ItemRenderer.renderItemIn2D(var8, 0.0F, 0.0F, 1.0F, 1.0F, 0.0625F); 263 GL11.glPopMatrix(); 264 GL11.glMatrixMode(GL11.GL_MODELVIEW); 265 GL11.glDisable(GL11.GL_BLEND); 266 GL11.glEnable(GL11.GL_LIGHTING); 267 GL11.glDepthFunc(GL11.GL_LEQUAL); 268 } 269 } 270 271 GL11.glPopMatrix(); 272 } 273 else 274 { 275 for (int var25 = 0; var25 < par3; ++var25) 276 { 277 GL11.glPushMatrix(); 278 279 if (var25 > 0) 280 { 281 var17 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F; 282 float var27 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F; 283 float var26 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F; 284 GL11.glTranslatef(var17, var27, var26); 285 } 286 287 if (!field_82407_g) 288 { 289 GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); 290 } 291 292 GL11.glColor4f(par5, par6, par7, 1.0F); 293 var8.startDrawingQuads(); 294 var8.setNormal(0.0F, 1.0F, 0.0F); 295 var8.addVertexWithUV((double)(0.0F - var14), (double)(0.0F - var15), 0.0D, (double)var9, (double)var12); 296 var8.addVertexWithUV((double)(var13 - var14), (double)(0.0F - var15), 0.0D, (double)var10, (double)var12); 297 var8.addVertexWithUV((double)(var13 - var14), (double)(1.0F - var15), 0.0D, (double)var10, (double)var11); 298 var8.addVertexWithUV((double)(0.0F - var14), (double)(1.0F - var15), 0.0D, (double)var9, (double)var11); 299 var8.draw(); 300 GL11.glPopMatrix(); 301 } 302 } 303 } 304 305 /** 306 * Renders the item's icon or block into the UI at the specified position. 307 */ 308 public void renderItemIntoGUI(FontRenderer par1FontRenderer, RenderEngine par2RenderEngine, ItemStack par3ItemStack, int par4, int par5) 309 { 310 int var6 = par3ItemStack.itemID; 311 int var7 = par3ItemStack.getItemDamage(); 312 int var8 = par3ItemStack.getIconIndex(); 313 int var10; 314 float var12; 315 float var13; 316 float var16; 317 318 if (par3ItemStack.getItem() instanceof ItemBlock && RenderBlocks.renderItemIn3d(Block.blocksList[par3ItemStack.itemID].getRenderType())) 319 { 320 Block var15 = Block.blocksList[var6]; 321 par2RenderEngine.bindTexture(par2RenderEngine.getTexture(var15.getTextureFile())); 322 GL11.glPushMatrix(); 323 GL11.glTranslatef((float)(par4 - 2), (float)(par5 + 3), -3.0F + this.zLevel); 324 GL11.glScalef(10.0F, 10.0F, 10.0F); 325 GL11.glTranslatef(1.0F, 0.5F, 1.0F); 326 GL11.glScalef(1.0F, 1.0F, -1.0F); 327 GL11.glRotatef(210.0F, 1.0F, 0.0F, 0.0F); 328 GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); 329 var10 = Item.itemsList[var6].getColorFromItemStack(par3ItemStack, 0); 330 var16 = (float)(var10 >> 16 & 255) / 255.0F; 331 var12 = (float)(var10 >> 8 & 255) / 255.0F; 332 var13 = (float)(var10 & 255) / 255.0F; 333 334 if (this.field_77024_a) 335 { 336 GL11.glColor4f(var16, var12, var13, 1.0F); 337 } 338 339 GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); 340 this.itemRenderBlocks.useInventoryTint = this.field_77024_a; 341 this.itemRenderBlocks.renderBlockAsItem(var15, var7, 1.0F); 342 this.itemRenderBlocks.useInventoryTint = true; 343 GL11.glPopMatrix(); 344 } 345 else 346 { 347 int var9; 348 349 if (Item.itemsList[var6].requiresMultipleRenderPasses()) 350 { 351 GL11.glDisable(GL11.GL_LIGHTING); 352 par2RenderEngine.bindTexture(par2RenderEngine.getTexture(Item.itemsList[var6].getTextureFile())); 353 354 for (var9 = 0; var9 < Item.itemsList[var6].getRenderPasses(var7); ++var9) 355 { 356 var10 = Item.itemsList[var6].getIconIndex(par3ItemStack, var9); 357 int var11 = Item.itemsList[var6].getColorFromItemStack(par3ItemStack, var9); 358 var12 = (float)(var11 >> 16 & 255) / 255.0F; 359 var13 = (float)(var11 >> 8 & 255) / 255.0F; 360 float var14 = (float)(var11 & 255) / 255.0F; 361 362 if (this.field_77024_a) 363 { 364 GL11.glColor4f(var12, var13, var14, 1.0F); 365 } 366 367 this.renderTexturedQuad(par4, par5, var10 % 16 * 16, var10 / 16 * 16, 16, 16); 368 } 369 370 GL11.glEnable(GL11.GL_LIGHTING); 371 } 372 else if (var8 >= 0) 373 { 374 GL11.glDisable(GL11.GL_LIGHTING); 375 376 par2RenderEngine.bindTexture(par2RenderEngine.getTexture(par3ItemStack.getItem().getTextureFile())); 377 378 var9 = Item.itemsList[var6].getColorFromItemStack(par3ItemStack, 0); 379 float var17 = (float)(var9 >> 16 & 255) / 255.0F; 380 var16 = (float)(var9 >> 8 & 255) / 255.0F; 381 var12 = (float)(var9 & 255) / 255.0F; 382 383 if (this.field_77024_a) 384 { 385 GL11.glColor4f(var17, var16, var12, 1.0F); 386 } 387 388 this.renderTexturedQuad(par4, par5, var8 % 16 * 16, var8 / 16 * 16, 16, 16); 389 GL11.glEnable(GL11.GL_LIGHTING); 390 } 391 } 392 393 GL11.glEnable(GL11.GL_CULL_FACE); 394 } 395 396 /** 397 * Render the item's icon or block into the GUI, including the glint effect. 398 */ 399 public void renderItemAndEffectIntoGUI(FontRenderer par1FontRenderer, RenderEngine par2RenderEngine, ItemStack par3ItemStack, int par4, int par5) 400 { 401 if (par3ItemStack != null) 402 { 403 if (!ForgeHooksClient.renderInventoryItem(renderBlocks, par2RenderEngine, par3ItemStack, field_77024_a, zLevel, (float)par4, (float)par5)) 404 { 405 this.renderItemIntoGUI(par1FontRenderer, par2RenderEngine, par3ItemStack, par4, par5); 406 } 407 408 if (par3ItemStack != null && par3ItemStack.hasEffect()) 409 { 410 GL11.glDepthFunc(GL11.GL_GREATER); 411 GL11.glDisable(GL11.GL_LIGHTING); 412 GL11.glDepthMask(false); 413 par2RenderEngine.bindTexture(par2RenderEngine.getTexture("%blur%/misc/glint.png")); 414 this.zLevel -= 50.0F; 415 GL11.glEnable(GL11.GL_BLEND); 416 GL11.glBlendFunc(GL11.GL_DST_COLOR, GL11.GL_DST_COLOR); 417 GL11.glColor4f(0.5F, 0.25F, 0.8F, 1.0F); 418 this.func_77018_a(par4 * 431278612 + par5 * 32178161, par4 - 2, par5 - 2, 20, 20); 419 GL11.glDisable(GL11.GL_BLEND); 420 GL11.glDepthMask(true); 421 this.zLevel += 50.0F; 422 GL11.glEnable(GL11.GL_LIGHTING); 423 GL11.glDepthFunc(GL11.GL_LEQUAL); 424 } 425 } 426 } 427 428 private void func_77018_a(int par1, int par2, int par3, int par4, int par5) 429 { 430 for (int var6 = 0; var6 < 2; ++var6) 431 { 432 if (var6 == 0) 433 { 434 GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); 435 } 436 437 if (var6 == 1) 438 { 439 GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); 440 } 441 442 float var7 = 0.00390625F; 443 float var8 = 0.00390625F; 444 float var9 = (float)(Minecraft.getSystemTime() % (long)(3000 + var6 * 1873)) / (3000.0F + (float)(var6 * 1873)) * 256.0F; 445 float var10 = 0.0F; 446 Tessellator var11 = Tessellator.instance; 447 float var12 = 4.0F; 448 449 if (var6 == 1) 450 { 451 var12 = -1.0F; 452 } 453 454 var11.startDrawingQuads(); 455 var11.addVertexWithUV((double)(par2 + 0), (double)(par3 + par5), (double)this.zLevel, (double)((var9 + (float)par5 * var12) * var7), (double)((var10 + (float)par5) * var8)); 456 var11.addVertexWithUV((double)(par2 + par4), (double)(par3 + par5), (double)this.zLevel, (double)((var9 + (float)par4 + (float)par5 * var12) * var7), (double)((var10 + (float)par5) * var8)); 457 var11.addVertexWithUV((double)(par2 + par4), (double)(par3 + 0), (double)this.zLevel, (double)((var9 + (float)par4) * var7), (double)((var10 + 0.0F) * var8)); 458 var11.addVertexWithUV((double)(par2 + 0), (double)(par3 + 0), (double)this.zLevel, (double)((var9 + 0.0F) * var7), (double)((var10 + 0.0F) * var8)); 459 var11.draw(); 460 } 461 } 462 463 /** 464 * Renders the item's overlay information. Examples being stack count or damage on top of the item's image at the 465 * specified position. 466 */ 467 public void renderItemOverlayIntoGUI(FontRenderer par1FontRenderer, RenderEngine par2RenderEngine, ItemStack par3ItemStack, int par4, int par5) 468 { 469 if (par3ItemStack != null) 470 { 471 if (par3ItemStack.stackSize > 1) 472 { 473 String var6 = "" + par3ItemStack.stackSize; 474 GL11.glDisable(GL11.GL_LIGHTING); 475 GL11.glDisable(GL11.GL_DEPTH_TEST); 476 par1FontRenderer.drawStringWithShadow(var6, par4 + 19 - 2 - par1FontRenderer.getStringWidth(var6), par5 + 6 + 3, 16777215); 477 GL11.glEnable(GL11.GL_LIGHTING); 478 GL11.glEnable(GL11.GL_DEPTH_TEST); 479 } 480 481 if (par3ItemStack.isItemDamaged()) 482 { 483 int var11 = (int)Math.round(13.0D - (double)par3ItemStack.getItemDamageForDisplay() * 13.0D / (double)par3ItemStack.getMaxDamage()); 484 int var7 = (int)Math.round(255.0D - (double)par3ItemStack.getItemDamageForDisplay() * 255.0D / (double)par3ItemStack.getMaxDamage()); 485 GL11.glDisable(GL11.GL_LIGHTING); 486 GL11.glDisable(GL11.GL_DEPTH_TEST); 487 GL11.glDisable(GL11.GL_TEXTURE_2D); 488 Tessellator var8 = Tessellator.instance; 489 int var9 = 255 - var7 << 16 | var7 << 8; 490 int var10 = (255 - var7) / 4 << 16 | 16128; 491 this.renderQuad(var8, par4 + 2, par5 + 13, 13, 2, 0); 492 this.renderQuad(var8, par4 + 2, par5 + 13, 12, 1, var10); 493 this.renderQuad(var8, par4 + 2, par5 + 13, var11, 1, var9); 494 GL11.glEnable(GL11.GL_TEXTURE_2D); 495 GL11.glEnable(GL11.GL_LIGHTING); 496 GL11.glEnable(GL11.GL_DEPTH_TEST); 497 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); 498 } 499 } 500 } 501 502 /** 503 * Adds a quad to the tesselator at the specified position with the set width and height and color. Args: 504 * tessellator, x, y, width, height, color 505 */ 506 private void renderQuad(Tessellator par1Tessellator, int par2, int par3, int par4, int par5, int par6) 507 { 508 par1Tessellator.startDrawingQuads(); 509 par1Tessellator.setColorOpaque_I(par6); 510 par1Tessellator.addVertex((double)(par2 + 0), (double)(par3 + 0), 0.0D); 511 par1Tessellator.addVertex((double)(par2 + 0), (double)(par3 + par5), 0.0D); 512 par1Tessellator.addVertex((double)(par2 + par4), (double)(par3 + par5), 0.0D); 513 par1Tessellator.addVertex((double)(par2 + par4), (double)(par3 + 0), 0.0D); 514 par1Tessellator.draw(); 515 } 516 517 /** 518 * Adds a textured quad to the tesselator at the specified position with the specified texture coords, width and 519 * height. Args: x, y, u, v, width, height 520 */ 521 public void renderTexturedQuad(int par1, int par2, int par3, int par4, int par5, int par6) 522 { 523 float var7 = 0.00390625F; 524 float var8 = 0.00390625F; 525 Tessellator var9 = Tessellator.instance; 526 var9.startDrawingQuads(); 527 var9.addVertexWithUV((double)(par1 + 0), (double)(par2 + par6), (double)this.zLevel, (double)((float)(par3 + 0) * var7), (double)((float)(par4 + par6) * var8)); 528 var9.addVertexWithUV((double)(par1 + par5), (double)(par2 + par6), (double)this.zLevel, (double)((float)(par3 + par5) * var7), (double)((float)(par4 + par6) * var8)); 529 var9.addVertexWithUV((double)(par1 + par5), (double)(par2 + 0), (double)this.zLevel, (double)((float)(par3 + par5) * var7), (double)((float)(par4 + 0) * var8)); 530 var9.addVertexWithUV((double)(par1 + 0), (double)(par2 + 0), (double)this.zLevel, (double)((float)(par3 + 0) * var7), (double)((float)(par4 + 0) * var8)); 531 var9.draw(); 532 } 533 534 /** 535 * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then 536 * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic 537 * (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1, 538 * double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that. 539 */ 540 public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9) 541 { 542 this.doRenderItem((EntityItem)par1Entity, par2, par4, par6, par8, par9); 543 } 544 545 /* ==== Forge start ===== */ 546 /** 547 * Items should spread out when rendered in 3d? 548 * @return 549 */ 550 public boolean shouldSpreadItems() 551 { 552 return true; 553 } 554 555 /** 556 * Items should have a bob effect 557 * @return 558 */ 559 public boolean shouldBob() 560 { 561 return true; 562 } 563 564 public byte getMiniBlockCountForItemStack(ItemStack stack) 565 { 566 byte var13 = 1; 567 if (stack.stackSize > 1) 568 { 569 var13 = 2; 570 } 571 572 if (stack.stackSize > 5) 573 { 574 var13 = 3; 575 } 576 577 if (stack.stackSize > 20) 578 { 579 var13 = 4; 580 } 581 582 if (stack.stackSize > 40) 583 { 584 var13 = 5; 585 } 586 return var13; 587 } 588 589 /** 590 * Allows for a subclass to override how many rendered items appear in a 591 * "mini item 3d stack" 592 * @param stack 593 * @return 594 */ 595 public byte getMiniItemCountForItemStack(ItemStack stack) 596 { 597 byte var24; 598 int var19 = stack.stackSize; 599 if (var19 < 2) 600 { 601 var24 = 1; 602 } 603 else if (var19 < 16) 604 { 605 var24 = 2; 606 } 607 else if (var19 < 32) 608 { 609 var24 = 3; 610 } 611 else 612 { 613 var24 = 4; 614 } 615 return var24; 616 } 617 }