diff --git a/forge/forge_client/src/net/minecraft/src/forge/ForgeHooksClient.java b/forge/forge_client/src/net/minecraft/src/forge/ForgeHooksClient.java index d14e578f0..16b381780 100644 --- a/forge/forge_client/src/net/minecraft/src/forge/ForgeHooksClient.java +++ b/forge/forge_client/src/net/minecraft/src/forge/ForgeHooksClient.java @@ -16,6 +16,8 @@ import net.minecraft.src.ItemStack; import org.lwjgl.opengl.GL11; import java.util.*; +import net.minecraft.src.*; +import org.lwjgl.opengl.GL12; public class ForgeHooksClient { @@ -249,21 +251,38 @@ public class ForgeHooksClient return def; } } - - public static void renderCustomItem(ICustomItemRenderer customRenderer, RenderBlocks renderBlocks, int itemID, int metadata, float brightness) + + public static void renderEntityItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, EntityItem item) { - Tessellator tessellator = Tessellator.instance; - if (renderBlocks.useInventoryTint) + customRenderer.renderEntityItem(renderBlocks, item); + } + + public static void renderEquippedItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, EntityLiving entity, ItemStack item) + { + if (customRenderer.renderEquippedItemAsBlock(item)) { - int j = 0xffffff;//block.getRenderColor(i); - float f1 = (float) (j >> 16 & 0xff) / 255F; - float f3 = (float) (j >> 8 & 0xff) / 255F; - float f5 = (float) (j & 0xff) / 255F; - GL11.glColor4f(f1 * brightness, f3 * brightness, f5 * brightness, 1.0F); + GL11.glPushMatrix(); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + customRenderer.renderEquippedItem(renderBlocks, entity, item); + GL11.glPopMatrix(); } - - //ModLoader.RenderInvBlock(this, block, i, k); - customRenderer.renderInventory(renderBlocks, itemID, metadata); + else + { + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glTranslatef(0.0F, -0.3F, 0.0F); + GL11.glScalef(1.5F, 1.5F, 1.5F); + 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); + customRenderer.renderEquippedItem(renderBlocks, entity, item); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + } + } + + public static void renderInventoryItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, ItemStack item) + { + customRenderer.renderInventoryItem(renderBlocks, item); } } - diff --git a/forge/forge_client/src/net/minecraft/src/forge/ICustomItemRenderer.java b/forge/forge_client/src/net/minecraft/src/forge/ICustomItemRenderer.java deleted file mode 100755 index 7f676b861..000000000 --- a/forge/forge_client/src/net/minecraft/src/forge/ICustomItemRenderer.java +++ /dev/null @@ -1,8 +0,0 @@ -package net.minecraft.src.forge; - -import net.minecraft.src.RenderBlocks; - -public interface ICustomItemRenderer -{ - public void renderInventory(RenderBlocks render, int itemID, int metadata); -} diff --git a/forge/forge_client/src/net/minecraft/src/forge/IItemRenderer.java b/forge/forge_client/src/net/minecraft/src/forge/IItemRenderer.java new file mode 100644 index 000000000..8d38d5cd6 --- /dev/null +++ b/forge/forge_client/src/net/minecraft/src/forge/IItemRenderer.java @@ -0,0 +1,78 @@ +package net.minecraft.src.forge; + +import net.minecraft.src.EntityItem; +import net.minecraft.src.EntityLiving; +import net.minecraft.src.ItemStack; +import net.minecraft.src.RenderBlocks; + +public interface IItemRenderer +{ + /** Checks if this renderer should handle a specific item's render type + * @param item The item we are trying to render + * @param type A render type to check if this renderer handles + * @return true if this renderer should handle the given render type, + * otherwise false + */ + public boolean handleRenderType(ItemStack item, ItemRenderType type); + + /** Called to render an in-world item, e.g. one that has been thrown or + * dropped. The appropriate OpenGL transformations and scaling have already + * been applied, so Tessellator location (0,0,0) is the center of the + * EntityItem. + * @param render The RenderBlocks instance + * @param item The in-world item to be rendered + */ + public void renderEntityItem(RenderBlocks render, EntityItem item); + + /** Determines if a rotation effect should be used when rendering an + * EntityItem, like most default blocks do. + * @param item the item we are trying to render + * @return true if the EntityItem should rotate, otherwise false + */ + public boolean useEntityItemRotationEffect(ItemStack item); + + /** Determines if an up-and-down bobbing effect should be used when + * rendering an EntityItem, like all default blocks and items do. + * @param item the item we are trying to render + * @return true if the EntityItem should bob up and down, otherwise false + */ + public boolean useEntityItemBobbingEffect(ItemStack item); + + /** Called to render an item currently held in-hand by a living entity. If + * rendering as a 3D block, the item will be rotated to a 45-degree angle. + * To render a 2D texture with some thickness (like default items), see + * net.minecraft.src.ItemRenderer. In either case, rendering should be done + * in local coordinates from (0,0,0)-(1,1,1). + * @param render The RenderBlocks instance + * @param entity The entity holding this item + * @param item The equipped item to be rendered + */ + public void renderEquippedItem(RenderBlocks render, EntityLiving entity, ItemStack item); + + /** Determines if the currently equipped item should be rendered as a 3D + * block or as a 2D texture. + * @param item the item we are trying to render + * @return true if the equipped item should be rendered as a 3D block, + * otherwise false + */ + public boolean renderEquippedItemAsBlock(ItemStack item); + + /** Called to render an item in a GUI inventory slot. If rendering as a 3D + * block, the appropriate OpenGL translations and scaling have already been + * applied, and the rendering should be done in local coordinates from + * (0,0,0)-(1,1,1). If rendering as a 2D texture, the rendering should be in + * GUI pixel coordinates from (0, 0, 0)-(16, 16, 0). + * @param render The RenderBlocks instance + * @param item The item stack to render + */ + public void renderInventoryItem(RenderBlocks render, ItemStack item); + + /** Determines if the item should be rendered in GUI inventory slots as a 3D + * block or as a 2D texture. + * @param item the item we are trying to render + * @return true if the inventory item should be rendered as a 3D block, + * otherwise false + */ + public boolean renderInventoryItemAsBlock(ItemStack item); + +} diff --git a/forge/forge_client/src/net/minecraft/src/forge/ItemRenderType.java b/forge/forge_client/src/net/minecraft/src/forge/ItemRenderType.java new file mode 100644 index 000000000..16affa208 --- /dev/null +++ b/forge/forge_client/src/net/minecraft/src/forge/ItemRenderType.java @@ -0,0 +1,8 @@ +package net.minecraft.src.forge; + +public enum ItemRenderType +{ + ENTITY, // Render type for in-world EntityItems + EQUIPPED, // Render type for an item equipped in-hand + INVENTORY; // Render type for items shown in a GUI inventory slot +} diff --git a/forge/forge_client/src/net/minecraft/src/forge/MinecraftForgeClient.java b/forge/forge_client/src/net/minecraft/src/forge/MinecraftForgeClient.java index 0eeff4c4a..4d7c19965 100755 --- a/forge/forge_client/src/net/minecraft/src/forge/MinecraftForgeClient.java +++ b/forge/forge_client/src/net/minecraft/src/forge/MinecraftForgeClient.java @@ -7,6 +7,7 @@ package net.minecraft.src.forge; import net.minecraft.src.Block; import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; import net.minecraft.src.ModLoader; import net.minecraft.src.RenderBlocks; @@ -84,16 +85,27 @@ public class MinecraftForgeClient return ForgeHooksClient.renderPass; } - private static ICustomItemRenderer[] customItemRenderers = new ICustomItemRenderer[Item.itemsList.length]; + private static IItemRenderer[] customItemRenderers = new IItemRenderer[Item.itemsList.length]; - public static void registerCustomItemRenderer(int itemID, ICustomItemRenderer renderer) + /** Register a custom renderer for a specific item. This can be used to + * render the item in-world as an EntityItem, when the item is equipped, or + * when the item is in an inventory slot. + * @param itemID The item ID (shifted index) to handle rendering. + * @param renderer The IItemRenderer interface that handles rendering for + * this item. + */ + public static void registerItemRenderer(int itemID, IItemRenderer renderer) { customItemRenderers[itemID] = renderer; } - public static ICustomItemRenderer getCustomItemRenderer (int itemID) + public static IItemRenderer getItemRenderer(ItemStack item, ItemRenderType type) { - return customItemRenderers[itemID]; + IItemRenderer renderer = customItemRenderers[item.itemID]; + if (renderer != null && renderer.handleRenderType(item, type)) { + return customItemRenderers[item.itemID]; + } + return null; } private static boolean hasInit = false; diff --git a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch index 567e1c769..8214b898f 100644 --- a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch @@ -1,31 +1,32 @@ --- ../src_base/minecraft/net/minecraft/src/ItemRenderer.java 0000-00-00 00:00:00.000000000 -0000 +++ ../src_work/minecraft/net/minecraft/src/ItemRenderer.java 0000-00-00 00:00:00.000000000 -0000 -@@ -1,6 +1,10 @@ +@@ -1,6 +1,11 @@ package net.minecraft.src; import net.minecraft.client.Minecraft; +import net.minecraft.src.forge.ForgeHooksClient; -+import net.minecraft.src.forge.ICustomItemRenderer; ++import net.minecraft.src.forge.IItemRenderer; ++import net.minecraft.src.forge.ItemRenderType; +import net.minecraft.src.forge.MinecraftForgeClient; + import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; -@@ -33,21 +37,27 @@ +@@ -33,21 +38,27 @@ public void renderItem(EntityLiving par1EntityLiving, ItemStack par2ItemStack, int par3) { GL11.glPushMatrix(); -+ ICustomItemRenderer customRenderer = MinecraftForgeClient.getCustomItemRenderer(par2ItemStack.itemID); ++ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(par2ItemStack, ItemRenderType.EQUIPPED); - if (par2ItemStack.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType())) + if (customRenderer != null) -+ { -+ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(ForgeHooksClient.getTexture("/terrain.png", par2ItemStack.getItem()))); -+ ForgeHooksClient.renderCustomItem(customRenderer, renderBlocksInstance, par2ItemStack.itemID, par2ItemStack.getItemDamage(), par1EntityLiving.getEntityBrightness(1.0F)); -+ } -+ else if (par2ItemStack.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType())) { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); ++ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(ForgeHooksClient.getTexture(par2ItemStack.itemID < 256 ? "/terrain.png" : "/gui/items.png", par2ItemStack.getItem()))); ++ ForgeHooksClient.renderEquippedItem(customRenderer, renderBlocksInstance, par1EntityLiving, par2ItemStack); ++ } ++ else if (par2ItemStack.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType())) ++ { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(ForgeHooksClient.getTexture("/terrain.png", par2ItemStack.getItem()))); this.renderBlocksInstance.renderBlockAsItem(Block.blocksList[par2ItemStack.itemID], par2ItemStack.getItemDamage(), 1.0F); } @@ -34,12 +35,12 @@ if (par2ItemStack.itemID < 256) { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); -+ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(ForgeHooksClient.getTexture("/terrain.png", Block.blocksList[par2ItemStack.itemID]))); ++ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(ForgeHooksClient.getTexture("/terrain.png", par2ItemStack.getItem()))); } else { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/gui/items.png")); -+ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(ForgeHooksClient.getTexture("/gui/items.png", Item.itemsList[par2ItemStack.itemID]))); ++ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(ForgeHooksClient.getTexture("/gui/items.png", par2ItemStack.getItem()))); } Tessellator var4 = Tessellator.instance; diff --git a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch index faa45207d..b50b5ff58 100644 --- a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch @@ -1,53 +1,79 @@ --- ../src_base/minecraft/net/minecraft/src/RenderItem.java 0000-00-00 00:00:00.000000000 -0000 +++ ../src_work/minecraft/net/minecraft/src/RenderItem.java 0000-00-00 00:00:00.000000000 -0000 -@@ -1,6 +1,11 @@ +@@ -1,6 +1,12 @@ package net.minecraft.src; import java.util.Random; + +import net.minecraft.src.forge.ForgeHooksClient; -+import net.minecraft.src.forge.ICustomItemRenderer; ++import net.minecraft.src.forge.IItemRenderer; ++import net.minecraft.src.forge.ItemRenderType; +import net.minecraft.src.forge.MinecraftForgeClient; + import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; -@@ -54,11 +59,31 @@ - float var19; +@@ -55,10 +61,57 @@ float var18; float var23; -- + - if (var10.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[var10.itemID].getRenderType())) -+ -+ ICustomItemRenderer customRenderer = MinecraftForgeClient.getCustomItemRenderer(var10.itemID); ++ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var10, ItemRenderType.ENTITY); + if (customRenderer != null) { - GL11.glRotatef(var12, 0.0F, 1.0F, 0.0F); -- this.loadTexture("/terrain.png"); -+ loadTexture(ForgeHooksClient.getTexture("/terrain.png", var10.getItem())); -+ GL11.glScalef(0.5F, 0.5F, 0.5F); -+ for(int j = 0; j < var13; j++) ++ if (customRenderer.useEntityItemRotationEffect(var10)) + { -+ GL11.glPushMatrix(); -+ if (j > 0) -+ { -+ GL11.glTranslatef( -+ ((random.nextFloat() * 2.0F - 1.0F) * 0.2F) / 0.5F, -+ ((random.nextFloat() * 2.0F - 1.0F) * 0.2F) / 0.5F, -+ ((random.nextFloat() * 2.0F - 1.0F) * 0.2F) / 0.5F); -+ } -+ ForgeHooksClient.renderCustomItem(customRenderer, renderBlocks, var10.itemID, var10.getItemDamage(), par1EntityItem.getEntityBrightness(par9)); -+ GL11.glPopMatrix(); ++ GL11.glRotatef(var12, 0.0F, 1.0F, 0.0F); + } ++ if (!customRenderer.useEntityItemBobbingEffect(var10)) ++ { ++ GL11.glTranslatef(0.0F, -var11, 0.0F); ++ } ++ ++ if (var10.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[var10.itemID].getRenderType())) ++ { ++ this.loadTexture(ForgeHooksClient.getTexture("/terrain.png", var10.getItem())); ++ float var21 = 0.25F; ++ var15 = Block.blocksList[var10.itemID].getRenderType(); ++ ++ if (var15 == 1 || var15 == 19 || var15 == 12 || var15 == 2) ++ { ++ var21 = 0.5F; ++ } ++ ++ GL11.glScalef(var21, var21, var21); ++ ++ for(int j = 0; j < var13; j++) ++ { ++ GL11.glPushMatrix(); ++ if (j > 0) ++ { ++ GL11.glTranslatef( ++ ((random.nextFloat() * 2.0F - 1.0F) * 0.2F) / 0.5F, ++ ((random.nextFloat() * 2.0F - 1.0F) * 0.2F) / 0.5F, ++ ((random.nextFloat() * 2.0F - 1.0F) * 0.2F) / 0.5F); ++ } ++ ForgeHooksClient.renderEntityItem(customRenderer, renderBlocks, par1EntityItem); ++ GL11.glPopMatrix(); ++ } ++ } ++ else ++ { ++ this.loadTexture(ForgeHooksClient.getTexture(var10.itemID < 256 ? "/terrain.png" : "/gui/items.png", var10.getItem())); ++ GL11.glScalef(0.5F, 0.5F, 0.5F); ++ ForgeHooksClient.renderEntityItem(customRenderer, renderBlocks, par1EntityItem); ++ } ++ + } + else if (var10.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[var10.itemID].getRenderType())) + { -+ GL11.glRotatef(var12, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(var12, 0.0F, 1.0F, 0.0F); +- this.loadTexture("/terrain.png"); + this.loadTexture(ForgeHooksClient.getTexture("/terrain.png", Block.blocksList[var10.itemID])); float var21 = 0.25F; var15 = Block.blocksList[var10.itemID].getRenderType(); -@@ -94,7 +119,7 @@ +@@ -94,7 +147,7 @@ if (var10.getItem().func_46058_c()) { GL11.glScalef(0.5F, 0.5F, 0.5F); @@ -56,7 +82,7 @@ for (var14 = 0; var14 <= 1; ++var14) { -@@ -120,11 +145,11 @@ +@@ -120,11 +173,11 @@ if (var10.itemID < 256) { @@ -70,46 +96,16 @@ } if (this.field_27004_a) -@@ -186,10 +211,35 @@ - float var11; - float var12; - float var13; -- -- if (par3 < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par3].getRenderType())) -+ -+ ICustomItemRenderer customRenderer = MinecraftForgeClient.getCustomItemRenderer(par3); -+ if (customRenderer != null) -+ { -+ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(ForgeHooksClient.getTexture("/terrain.png", Item.itemsList[par3]))); -+ GL11.glPushMatrix(); -+ GL11.glTranslatef((float)(par6 - 2), (float)(par7 + 3), -3.0F + this.zLevel); -+ GL11.glScalef(10F, 10F, 10F); -+ GL11.glTranslatef(1.0F, 0.5F, 1.0F); -+ GL11.glScalef(1.0F, 1.0F, -1F); -+ GL11.glRotatef(210F, 1.0F, 0.0F, 0.0F); -+ GL11.glRotatef(45F, 0.0F, 1.0F, 0.0F); -+ int l1 = Item.itemsList[par3].getColorFromDamage(par4, 0); -+ float f2 = (float)(l1 >> 16 & 0xff) / 255F; -+ float f4 = (float)(l1 >> 8 & 0xff) / 255F; -+ float f5 = (float)(l1 & 0xff) / 255F; -+ if(field_27004_a) -+ { -+ GL11.glColor4f(f2, f4, f5, 1.0F); -+ } -+ GL11.glRotatef(-90F, 0.0F, 1.0F, 0.0F); -+ renderBlocks.useInventoryTint = field_27004_a; -+ ForgeHooksClient.renderCustomItem(customRenderer, renderBlocks, par3, par4, 1.0F); -+ renderBlocks.useInventoryTint = true; -+ GL11.glPopMatrix(); -+ } -+ else if (par3 < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par3].getRenderType())) +@@ -189,7 +242,7 @@ + + if (par3 < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par3].getRenderType())) { - par2RenderEngine.bindTexture(par2RenderEngine.getTexture("/terrain.png")); + par2RenderEngine.bindTexture(par2RenderEngine.getTexture(ForgeHooksClient.getTexture("/terrain.png", Block.blocksList[par3]))); Block var15 = Block.blocksList[par3]; GL11.glPushMatrix(); GL11.glTranslatef((float)(par6 - 2), (float)(par7 + 3), -3.0F + this.zLevel); -@@ -221,7 +271,7 @@ +@@ -221,7 +274,7 @@ if (Item.itemsList[par3].func_46058_c()) { GL11.glDisable(GL11.GL_LIGHTING); @@ -118,7 +114,7 @@ for (var8 = 0; var8 <= 1; ++var8) { -@@ -247,11 +297,11 @@ +@@ -247,11 +300,11 @@ if (par3 < 256) { @@ -132,3 +128,64 @@ } var8 = Item.itemsList[par3].getColorFromDamage(par4, 0); +@@ -279,8 +332,59 @@ + { + if (par3ItemStack != null) + { +- this.drawItemIntoGui(par1FontRenderer, par2RenderEngine, par3ItemStack.itemID, par3ItemStack.getItemDamage(), par3ItemStack.getIconIndex(), par4, par5); ++ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(par3ItemStack, ItemRenderType.INVENTORY); ++ if (customRenderer != null) ++ { ++ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(ForgeHooksClient.getTexture(par3ItemStack.itemID < 256 ? "/terrain.png" : "/gui/items.png", Item.itemsList[par3ItemStack.itemID]))); ++ if (customRenderer.renderInventoryItemAsBlock(par3ItemStack)) ++ { ++ GL11.glPushMatrix(); ++ GL11.glTranslatef((float)(par4 - 2), (float)(par5 + 3), -3.0F + this.zLevel); ++ GL11.glScalef(10F, 10F, 10F); ++ GL11.glTranslatef(1.0F, 0.5F, 1.0F); ++ GL11.glScalef(1.0F, 1.0F, -1F); ++ GL11.glRotatef(210F, 1.0F, 0.0F, 0.0F); ++ GL11.glRotatef(45F, 0.0F, 1.0F, 0.0F); ++ int color = Item.itemsList[par3ItemStack.itemID].getColorFromDamage(par4, 0); ++ float r = (float)(color >> 16 & 0xff) / 255F; ++ float g = (float)(color >> 8 & 0xff) / 255F; ++ float b = (float)(color & 0xff) / 255F; ++ if(field_27004_a) ++ { ++ GL11.glColor4f(r, g, b, 1.0F); ++ } ++ GL11.glRotatef(-90F, 0.0F, 1.0F, 0.0F); ++ renderBlocks.useInventoryTint = field_27004_a; ++ ForgeHooksClient.renderInventoryItem(customRenderer, renderBlocks, par3ItemStack); ++ renderBlocks.useInventoryTint = true; ++ GL11.glPopMatrix(); ++ } ++ else ++ { ++ GL11.glDisable(GL11.GL_LIGHTING); ++ GL11.glPushMatrix(); ++ GL11.glTranslatef((float)(par4), (float)(par5), -3.0F + this.zLevel); + ++ int color = Item.itemsList[par3ItemStack.itemID].getColorFromDamage(par4, 0); ++ float r = (float)(color >> 16 & 255) / 255.0F; ++ float g = (float)(color >> 8 & 255) / 255.0F; ++ float b = (float)(color & 255) / 255.0F; ++ ++ if (this.field_27004_a) ++ { ++ GL11.glColor4f(r, g, b, 1.0F); ++ } ++ ++ ForgeHooksClient.renderInventoryItem(customRenderer, renderBlocks, par3ItemStack); ++ GL11.glPopMatrix(); ++ GL11.glEnable(GL11.GL_LIGHTING); ++ } ++ } ++ else ++ { ++ this.drawItemIntoGui(par1FontRenderer, par2RenderEngine, par3ItemStack.itemID, par3ItemStack.getItemDamage(), par3ItemStack.getIconIndex(), par4, par5); ++ } ++ + if (par3ItemStack != null && par3ItemStack.hasEffect()) + { + GL11.glDepthFunc(GL11.GL_GREATER);