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 addb6bdec..0f945c91a 100644 --- a/forge/forge_client/src/net/minecraft/src/forge/ForgeHooksClient.java +++ b/forge/forge_client/src/net/minecraft/src/forge/ForgeHooksClient.java @@ -252,16 +252,19 @@ public class ForgeHooksClient } } - public static void renderEntityItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, EntityItem item, int itemID, int metadata) + public static void renderEntityItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, EntityItem item) { - customRenderer.renderEntityItem(renderBlocks, item, itemID, metadata); + customRenderer.renderEntityItem(renderBlocks, item); } - public static void renderEquippedItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, EntityLiving entity, int itemID, int metadata) + public static void renderEquippedItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, EntityLiving entity, ItemStack item) { - if (customRenderer.renderEquippedItemAsBlock()) + if (customRenderer.renderEquippedItemAsBlock(item.itemID)) { - customRenderer.renderEquippedItem(renderBlocks, entity, itemID, metadata); + GL11.glPushMatrix(); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + customRenderer.renderEquippedItem(renderBlocks, entity, item); + GL11.glPopMatrix(); } else { @@ -272,14 +275,14 @@ public class ForgeHooksClient 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, itemID, metadata); + customRenderer.renderEquippedItem(renderBlocks, entity, item); GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glPopMatrix(); } } - public static void renderInventoryItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, int itemID, int metadata) + public static void renderInventoryItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, ItemStack item) { - customRenderer.renderInventoryItem(renderBlocks, itemID, metadata); + customRenderer.renderInventoryItem(renderBlocks, item); } } diff --git a/forge/forge_client/src/net/minecraft/src/forge/IItemRenderer.java b/forge/forge_client/src/net/minecraft/src/forge/IItemRenderer.java index b3ee775af..50f3e0c25 100644 --- a/forge/forge_client/src/net/minecraft/src/forge/IItemRenderer.java +++ b/forge/forge_client/src/net/minecraft/src/forge/IItemRenderer.java @@ -2,16 +2,18 @@ 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 render type + /** Checks if this renderer should handle a specific item's render type + * @param itemID 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(ItemRenderType type); + public boolean handleRenderType(int itemID, 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 @@ -19,22 +21,20 @@ public interface IItemRenderer * EntityItem. * @param render The RenderBlocks instance * @param item The in-world item to be rendered - * @param itemID The item's ID (shifted index) - * @param metadata The item's metadata or damage value */ - public void renderEntityItem(RenderBlocks render, EntityItem item, int itemID, int metadata); + public void renderEntityItem(RenderBlocks render, EntityItem item); /** Determines if a rotation effect should be used when rendering an * EntityItem, like most default blocks do. * @return true if the EntityItem should rotate, otherwise false */ - public boolean useEntityItemRotationEffect(); + public boolean useEntityItemRotationEffect(int itemID); /** Determines if an up-and-down bobbing effect should be used when * rendering an EntityItem, like all default blocks and items do. * @return true if the EntityItem should bob up and down, otherwise false */ - public boolean useEntityItemBobbingEffect(); + public boolean useEntityItemBobbingEffect(int itemID); /** 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. @@ -43,17 +43,16 @@ public interface IItemRenderer * in local coordinates from (0,0,0)-(1,1,1). * @param render The RenderBlocks instance * @param entity The entity holding this item - * @param itemID The item's ID (shifted index) - * @param metadata The item's metadata or damage value + * @param item The equipped item to be rendered */ - public void renderEquippedItem(RenderBlocks render, EntityLiving entity, int itemID, int metadata); + 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. * @return true if the equipped item should be rendered as a 3D block, * otherwise false */ - public boolean renderEquippedItemAsBlock(); + public boolean renderEquippedItemAsBlock(int itemID); /** 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 @@ -61,16 +60,15 @@ public interface IItemRenderer * (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 itemID The item's ID (shifted index) - * @param metadata The item's metadata or damage value + * @param item The item stack to render */ - public void renderInventoryItem(RenderBlocks render, int itemID, int metadata); + 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. * @return true if the inventory item should be rendered as a 3D block, * otherwise false */ - public boolean renderInventoryItemAsBlock(); - + public boolean renderInventoryItemAsBlock(int itemID); + } diff --git a/forge/forge_client/src/net/minecraft/src/forge/ItemRenderType.java b/forge/forge_client/src/net/minecraft/src/forge/ItemRenderType.java index 149fac019..16affa208 100644 --- a/forge/forge_client/src/net/minecraft/src/forge/ItemRenderType.java +++ b/forge/forge_client/src/net/minecraft/src/forge/ItemRenderType.java @@ -2,7 +2,7 @@ package net.minecraft.src.forge; public enum ItemRenderType { - ENTITY, - EQUIPPED, - INVENTORY; + 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 07c7f72ac..7a5b08bbe 100755 --- a/forge/forge_client/src/net/minecraft/src/forge/MinecraftForgeClient.java +++ b/forge/forge_client/src/net/minecraft/src/forge/MinecraftForgeClient.java @@ -101,8 +101,8 @@ public class MinecraftForgeClient public static IItemRenderer getItemRenderer(int itemID, ItemRenderType type) { IItemRenderer renderer = customItemRenderers[itemID]; - if (renderer != null && renderer.handleRenderType(type)) { - return customItemRenderers[itemID]; + if (renderer != null && renderer.handleRenderType(itemID, type)) { + return renderer; } return null; } diff --git a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch index a6e289ba3..39ce29dc9 100644 --- a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch @@ -24,7 +24,7 @@ - GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); - this.renderBlocksInstance.renderBlockAsItem(Block.blocksList[par2ItemStack.itemID], par2ItemStack.getItemDamage(), 1.0F); + 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.itemID, par2ItemStack.getItemDamage()); ++ ForgeHooksClient.renderEquippedItem(customRenderer, renderBlocksInstance, par1EntityLiving, par2ItemStack); } - else + else if (par2ItemStack.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType())) diff --git a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch index c9b36c69e..9a8f41b6b 100644 --- a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch @@ -20,11 +20,11 @@ + IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var10.itemID, ItemRenderType.ENTITY); + if (customRenderer != null) + { -+ if (customRenderer.useEntityItemRotationEffect()) ++ if (customRenderer.useEntityItemRotationEffect(var10.itemID)) + { + GL11.glRotatef(var12, 0.0F, 1.0F, 0.0F); + } -+ if (!customRenderer.useEntityItemBobbingEffect()) ++ if (!customRenderer.useEntityItemBobbingEffect(var10.itemID)) + { + GL11.glTranslatef(0.0F, -var11, 0.0F); + } @@ -52,7 +52,7 @@ + ((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, var10.itemID, var10.getItemDamage()); ++ ForgeHooksClient.renderEntityItem(customRenderer, renderBlocks, par1EntityItem); + GL11.glPopMatrix(); + } + } @@ -60,7 +60,7 @@ + { + 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, var10.itemID, var10.getItemDamage()); ++ ForgeHooksClient.renderEntityItem(customRenderer, renderBlocks, par1EntityItem); + } + + } @@ -95,68 +95,16 @@ } if (this.field_27004_a) -@@ -187,9 +240,58 @@ - float var12; - float var13; +@@ -189,7 +242,7 @@ -- if (par3 < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par3].getRenderType())) -+ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(par3, ItemRenderType.INVENTORY); -+ if (customRenderer != null) + if (par3 < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par3].getRenderType())) { - par2RenderEngine.bindTexture(par2RenderEngine.getTexture("/terrain.png")); -+ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(ForgeHooksClient.getTexture(par3 < 256 ? "/terrain.png" : "/gui/items.png", Item.itemsList[par3]))); -+ -+ if (customRenderer.renderInventoryItemAsBlock()) -+ { -+ 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.renderInventoryItem(customRenderer, renderBlocks, par3, par4); -+ renderBlocks.useInventoryTint = true; -+ GL11.glPopMatrix(); -+ } -+ else -+ { -+ GL11.glDisable(GL11.GL_LIGHTING); -+ GL11.glPushMatrix(); -+ GL11.glTranslatef((float)(par6), (float)(par7), -3.0F + this.zLevel); -+ -+ int var8 = Item.itemsList[par3].getColorFromDamage(par4, 0); -+ float var14 = (float)(var8 >> 16 & 255) / 255.0F; -+ float var16 = (float)(var8 >> 8 & 255) / 255.0F; -+ var11 = (float)(var8 & 255) / 255.0F; -+ -+ if (this.field_27004_a) -+ { -+ GL11.glColor4f(var14, var16, var11, 1.0F); -+ } -+ -+ ForgeHooksClient.renderInventoryItem(customRenderer, renderBlocks, par3, par4); -+ GL11.glPopMatrix(); -+ GL11.glEnable(GL11.GL_LIGHTING); -+ } -+ } -+ else if (par3 < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par3].getRenderType())) -+ { + 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 +323,7 @@ +@@ -221,7 +274,7 @@ if (Item.itemsList[par3].func_46058_c()) { GL11.glDisable(GL11.GL_LIGHTING); @@ -165,7 +113,7 @@ for (var8 = 0; var8 <= 1; ++var8) { -@@ -247,11 +349,11 @@ +@@ -247,11 +300,11 @@ if (par3 < 256) { @@ -179,3 +127,63 @@ } var8 = Item.itemsList[par3].getColorFromDamage(par4, 0); +@@ -279,7 +332,59 @@ + { + if (par3ItemStack != null) + { ++ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(par3ItemStack.itemID, 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.itemID)) ++ { ++ 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()) + {