From 2524cf273b9e47db1e2d3c6c2a021402686b5bf5 Mon Sep 17 00:00:00 2001 From: newthead Date: Thu, 15 Mar 2012 21:26:09 -0700 Subject: [PATCH 01/13] Added new item render interfaces to Forge client --- .../src/forge/ICustomItemRenderer.java | 8 --- .../src/forge/IEntityItemRenderer.java | 8 +++ .../src/forge/IEquippedItemRenderer.java | 8 +++ .../src/forge/IInventoryItemRenderer.java | 8 +++ .../src/forge/MinecraftForgeClient.java | 61 +++++++++++++++++-- 5 files changed, 80 insertions(+), 13 deletions(-) delete mode 100755 forge/forge_client/src/net/minecraft/src/forge/ICustomItemRenderer.java create mode 100644 forge/forge_client/src/net/minecraft/src/forge/IEntityItemRenderer.java create mode 100644 forge/forge_client/src/net/minecraft/src/forge/IEquippedItemRenderer.java create mode 100644 forge/forge_client/src/net/minecraft/src/forge/IInventoryItemRenderer.java 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/IEntityItemRenderer.java b/forge/forge_client/src/net/minecraft/src/forge/IEntityItemRenderer.java new file mode 100644 index 000000000..e517b4a65 --- /dev/null +++ b/forge/forge_client/src/net/minecraft/src/forge/IEntityItemRenderer.java @@ -0,0 +1,8 @@ +package net.minecraft.src.forge; + +import net.minecraft.src.RenderBlocks; + +public interface IEntityItemRenderer +{ + public void renderEntityItem(RenderBlocks render, int itemID, int metadata); +} diff --git a/forge/forge_client/src/net/minecraft/src/forge/IEquippedItemRenderer.java b/forge/forge_client/src/net/minecraft/src/forge/IEquippedItemRenderer.java new file mode 100644 index 000000000..d8e8d3fca --- /dev/null +++ b/forge/forge_client/src/net/minecraft/src/forge/IEquippedItemRenderer.java @@ -0,0 +1,8 @@ +package net.minecraft.src.forge; + +import net.minecraft.src.RenderBlocks; + +public interface IEquippedItemRenderer +{ + public void renderEquippedItem(RenderBlocks render, int itemID, int metadata); +} diff --git a/forge/forge_client/src/net/minecraft/src/forge/IInventoryItemRenderer.java b/forge/forge_client/src/net/minecraft/src/forge/IInventoryItemRenderer.java new file mode 100644 index 000000000..7a82b236f --- /dev/null +++ b/forge/forge_client/src/net/minecraft/src/forge/IInventoryItemRenderer.java @@ -0,0 +1,8 @@ +package net.minecraft.src.forge; + +import net.minecraft.src.RenderBlocks; + +public interface IInventoryItemRenderer +{ + public void renderInventoryItem(RenderBlocks render, int itemID, int metadata); +} 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..6f4d70be8 100755 --- a/forge/forge_client/src/net/minecraft/src/forge/MinecraftForgeClient.java +++ b/forge/forge_client/src/net/minecraft/src/forge/MinecraftForgeClient.java @@ -84,16 +84,67 @@ public class MinecraftForgeClient return ForgeHooksClient.renderPass; } - private static ICustomItemRenderer[] customItemRenderers = new ICustomItemRenderer[Item.itemsList.length]; + private static IEntityItemRenderer[] customEntityItemRenderers = new IEntityItemRenderer[Item.itemsList.length]; + private static boolean[] applyEntityItemRotation = new boolean[Item.itemsList.length]; - public static void registerCustomItemRenderer(int itemID, ICustomItemRenderer renderer) + /** Register a custom renderer for an item when it is dropped or thrown on the ground. + */ + public static void registerEntityItemRenderer(int itemID, IEntityItemRenderer renderer, boolean applyRotationEffect) { - customItemRenderers[itemID] = renderer; + customEntityItemRenderers[itemID] = renderer; + applyEntityItemRotation[itemID] = applyRotationEffect; } - public static ICustomItemRenderer getCustomItemRenderer (int itemID) + public static IEntityItemRenderer getEntityItemRenderer(int itemID) { - return customItemRenderers[itemID]; + return customEntityItemRenderers[itemID]; + } + + public boolean applyEntityItemRotationEffect(int itemID) + { + return applyEntityItemRotation[itemID]; + } + + private static IEquippedItemRenderer[] customEquippedItemRenderers = new IEquippedItemRenderer[Item.itemsList.length]; + private static boolean[] renderEquippedAsBlock = new boolean[Item.itemsList.length]; + + /** Register a custom renderer for an item that is currently held in-hand. + */ + public static void registerEquippedItemRenderer(int itemID, IEquippedItemRenderer renderer, boolean renderAsBlock) + { + customEquippedItemRenderers[itemID] = renderer; + renderEquippedAsBlock[itemID] = renderAsBlock; + } + + public static IEquippedItemRenderer getEquippedItemRenderer(int itemID) + { + return customEquippedItemRenderers[itemID]; + } + + public static boolean renderEquippedItemAsBlock(int itemID) + { + return renderEquippedAsBlock[itemID]; + } + + private static IInventoryItemRenderer[] customInventoryItemRenderers = new IInventoryItemRenderer[Item.itemsList.length]; + private static boolean[] render3dInventoryItem = new boolean[Item.itemsList.length]; + + /** Register a custom renderer for an item being displayed in an inventory slot. + */ + public static void registerInventoryItemRenderer(int itemID, IInventoryItemRenderer renderer, boolean renderIn3d) + { + customInventoryItemRenderers[itemID] = renderer; + render3dInventoryItem[itemID] = renderIn3d; + } + + public static IInventoryItemRenderer getInventoryItemRenderer(int itemID) + { + return customInventoryItemRenderers[itemID]; + } + + public static boolean renderInventoryItemIn3d(int itemID) + { + return render3dInventoryItem[itemID]; } private static boolean hasInit = false; From dc0fc674122c76846ce887a9bd910c98b896d8cc Mon Sep 17 00:00:00 2001 From: newthead Date: Thu, 15 Mar 2012 23:47:28 -0700 Subject: [PATCH 02/13] Added hook for rendering equipped items --- .../minecraft/src/forge/ForgeHooksClient.java | 27 +++++++++++-------- .../src/forge/IEquippedItemRenderer.java | 2 +- .../net/minecraft/src/ItemRenderer.java.patch | 17 ++++++++---- 3 files changed, 29 insertions(+), 17 deletions(-) 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..64858cd0d 100644 --- a/forge/forge_client/src/net/minecraft/src/forge/ForgeHooksClient.java +++ b/forge/forge_client/src/net/minecraft/src/forge/ForgeHooksClient.java @@ -250,20 +250,25 @@ public class ForgeHooksClient } } - public static void renderCustomItem(ICustomItemRenderer customRenderer, RenderBlocks renderBlocks, int itemID, int metadata, float brightness) + public static void renderEquippedItem(IEquippedItemRenderer customRenderer, RenderBlocks renderBlocks, EntityLiving entity, int itemID, int metadata) { - Tessellator tessellator = Tessellator.instance; - if (renderBlocks.useInventoryTint) + if (MinecraftForgeClient.renderEquippedItemAsBlock(itemID)) { - 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); + customRenderer.renderEquippedItem(renderBlocks, entity, 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, itemID, metadata); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); } - - //ModLoader.RenderInvBlock(this, block, i, k); - customRenderer.renderInventory(renderBlocks, itemID, metadata); } } diff --git a/forge/forge_client/src/net/minecraft/src/forge/IEquippedItemRenderer.java b/forge/forge_client/src/net/minecraft/src/forge/IEquippedItemRenderer.java index d8e8d3fca..438b1504b 100644 --- a/forge/forge_client/src/net/minecraft/src/forge/IEquippedItemRenderer.java +++ b/forge/forge_client/src/net/minecraft/src/forge/IEquippedItemRenderer.java @@ -4,5 +4,5 @@ import net.minecraft.src.RenderBlocks; public interface IEquippedItemRenderer { - public void renderEquippedItem(RenderBlocks render, int itemID, int metadata); + public void renderEquippedItem(RenderBlocks render, EntityLiving entity, int itemID, int metadata); } diff --git a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch index 567e1c769..9edbc7f83 100644 --- a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch @@ -5,23 +5,30 @@ import net.minecraft.client.Minecraft; +import net.minecraft.src.forge.ForgeHooksClient; -+import net.minecraft.src.forge.ICustomItemRenderer; ++import net.minecraft.src.forge.IEquippedItemRenderer; +import net.minecraft.src.forge.MinecraftForgeClient; + import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; -@@ -33,21 +37,27 @@ +@@ -33,21 +37,34 @@ public void renderItem(EntityLiving par1EntityLiving, ItemStack par2ItemStack, int par3) { GL11.glPushMatrix(); -+ ICustomItemRenderer customRenderer = MinecraftForgeClient.getCustomItemRenderer(par2ItemStack.itemID); ++ IEquippedItemRenderer customRenderer = MinecraftForgeClient.getEquippedItemRenderer(par2ItemStack.itemID); - 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)); ++ if (par2ItemStack.itemID < 256) ++ { ++ 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(ForgeHooksClient.getTexture("/gui/items.png", par2ItemStack.getItem()))); ++ } ++ ForgeHooksClient.renderEquippedItem(customRenderer, renderBlocksInstance, par1EntityLiving, par2ItemStack.itemID, par2ItemStack.getItemDamage()); + } + else if (par2ItemStack.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType())) { From 7efd97399f8d2bed1eb149ca42587084cdc9c0e2 Mon Sep 17 00:00:00 2001 From: newthead Date: Thu, 15 Mar 2012 23:47:58 -0700 Subject: [PATCH 03/13] Clarified render option for inventory items --- .../net/minecraft/src/forge/MinecraftForgeClient.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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 6f4d70be8..dd681446a 100755 --- a/forge/forge_client/src/net/minecraft/src/forge/MinecraftForgeClient.java +++ b/forge/forge_client/src/net/minecraft/src/forge/MinecraftForgeClient.java @@ -127,14 +127,14 @@ public class MinecraftForgeClient } private static IInventoryItemRenderer[] customInventoryItemRenderers = new IInventoryItemRenderer[Item.itemsList.length]; - private static boolean[] render3dInventoryItem = new boolean[Item.itemsList.length]; + private static boolean[] renderInInventoryAsBlock = new boolean[Item.itemsList.length]; /** Register a custom renderer for an item being displayed in an inventory slot. */ - public static void registerInventoryItemRenderer(int itemID, IInventoryItemRenderer renderer, boolean renderIn3d) + public static void registerInventoryItemRenderer(int itemID, IInventoryItemRenderer renderer, boolean renderAsBlock) { customInventoryItemRenderers[itemID] = renderer; - render3dInventoryItem[itemID] = renderIn3d; + renderInInventoryAsBlock[itemID] = renderAsBlock; } public static IInventoryItemRenderer getInventoryItemRenderer(int itemID) @@ -142,9 +142,9 @@ public class MinecraftForgeClient return customInventoryItemRenderers[itemID]; } - public static boolean renderInventoryItemIn3d(int itemID) + public static boolean renderInventoryItemAsBlock(int itemID) { - return render3dInventoryItem[itemID]; + return renderInInventoryAsBlock[itemID]; } private static boolean hasInit = false; From 391fbbd42b2bcf7125b4ade7f38237307622d15d Mon Sep 17 00:00:00 2001 From: newthead Date: Fri, 16 Mar 2012 21:27:05 -0700 Subject: [PATCH 04/13] Added remaining item render hooks, and fixed a static method access --- .../net/minecraft/src/forge/ForgeHooksClient.java | 15 +++++++++++++-- .../minecraft/src/forge/MinecraftForgeClient.java | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) 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 64858cd0d..585306552 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,7 +251,12 @@ public class ForgeHooksClient return def; } } - + + public static void renderEntityItem(IEntityItemRenderer customRenderer, RenderBlocks renderBlocks, EntityItem item, int itemID, int metadata) + { + customRenderer.renderEntityItem(renderBlocks, item, itemID, metadata); + } + public static void renderEquippedItem(IEquippedItemRenderer customRenderer, RenderBlocks renderBlocks, EntityLiving entity, int itemID, int metadata) { if (MinecraftForgeClient.renderEquippedItemAsBlock(itemID)) @@ -270,5 +277,9 @@ public class ForgeHooksClient GL11.glPopMatrix(); } } + + public static void renderInventoryItem(IInventoryItemRenderer customRenderer, RenderBlocks renderBlocks, int itemID, int metadata) + { + customRenderer.renderInventoryItem(renderBlocks, itemID, metadata); + } } - 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 dd681446a..ca257348e 100755 --- a/forge/forge_client/src/net/minecraft/src/forge/MinecraftForgeClient.java +++ b/forge/forge_client/src/net/minecraft/src/forge/MinecraftForgeClient.java @@ -100,7 +100,7 @@ public class MinecraftForgeClient return customEntityItemRenderers[itemID]; } - public boolean applyEntityItemRotationEffect(int itemID) + public static boolean applyEntityItemRotationEffect(int itemID) { return applyEntityItemRotation[itemID]; } From d7cbbfb3d2a4ab5295238540a1cd7ab1b108345c Mon Sep 17 00:00:00 2001 From: newthead Date: Fri, 16 Mar 2012 21:28:08 -0700 Subject: [PATCH 05/13] Added render code for inventory items and entity items. --- .../src/forge/IEntityItemRenderer.java | 3 +- .../net/minecraft/src/RenderItem.java.patch | 168 ++++++++++++------ 2 files changed, 111 insertions(+), 60 deletions(-) diff --git a/forge/forge_client/src/net/minecraft/src/forge/IEntityItemRenderer.java b/forge/forge_client/src/net/minecraft/src/forge/IEntityItemRenderer.java index e517b4a65..519fcab54 100644 --- a/forge/forge_client/src/net/minecraft/src/forge/IEntityItemRenderer.java +++ b/forge/forge_client/src/net/minecraft/src/forge/IEntityItemRenderer.java @@ -1,8 +1,9 @@ package net.minecraft.src.forge; +import net.minecraft.src.EntityItem; import net.minecraft.src.RenderBlocks; public interface IEntityItemRenderer { - public void renderEntityItem(RenderBlocks render, int itemID, int metadata); + public void renderEntityItem(RenderBlocks render, EntityItem item, int itemID, int metadata); } diff --git a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch index faa45207d..0b849709a 100644 --- a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch @@ -1,53 +1,77 @@ --- ../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.IEntityItemRenderer; ++import net.minecraft.src.forge.IInventoryItemRenderer; +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,56 @@ float var18; float var23; -- -- if (var10.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[var10.itemID].getRenderType())) -+ -+ ICustomItemRenderer customRenderer = MinecraftForgeClient.getCustomItemRenderer(var10.itemID); + ++ IEntityItemRenderer customRenderer = MinecraftForgeClient.getEntityItemRenderer(var10.itemID); + 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++) -+ { -+ 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(); ++ { ++ if (MinecraftForgeClient.applyEntityItemRotationEffect(var10.itemID)) { ++ GL11.glRotatef(var12, 0.0F, 1.0F, 0.0F); + } ++ else ++ { ++ 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, var10.itemID, var10.getItemDamage()); ++ GL11.glPopMatrix(); ++ } ++ } ++ else ++ { ++ this.loadTexture(ForgeHooksClient.getTexture("/gui/items.png", var10.getItem())); ++ GL11.glScalef(0.5F, 0.5F, 0.5F); ++ ForgeHooksClient.renderEntityItem(customRenderer, renderBlocks, par1EntityItem, var10.itemID, var10.getItemDamage()); ++ } ++ + } + 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 +146,7 @@ if (var10.getItem().func_46058_c()) { GL11.glScalef(0.5F, 0.5F, 0.5F); @@ -56,7 +80,7 @@ for (var14 = 0; var14 <= 1; ++var14) { -@@ -120,11 +145,11 @@ +@@ -120,11 +172,11 @@ if (var10.itemID < 256) { @@ -70,46 +94,72 @@ } if (this.field_27004_a) -@@ -186,10 +211,35 @@ - float var11; +@@ -187,9 +239,62 @@ float var12; float var13; -- + - if (par3 < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par3].getRenderType())) -+ -+ ICustomItemRenderer customRenderer = MinecraftForgeClient.getCustomItemRenderer(par3); ++ IInventoryItemRenderer customRenderer = MinecraftForgeClient.getInventoryItemRenderer(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())) { - par2RenderEngine.bindTexture(par2RenderEngine.getTexture("/terrain.png")); ++ if (par3 < 256) ++ { ++ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(ForgeHooksClient.getTexture("/terrain.png", Item.itemsList[par3]))); ++ } ++ else ++ { ++ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(ForgeHooksClient.getTexture("/gui/items.png", Item.itemsList[par3]))); ++ } ++ ++ if (MinecraftForgeClient.renderInventoryItemAsBlock(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.renderInventoryItem(customRenderer, renderBlocks, par3, par4); ++ renderBlocks.useInventoryTint = true; ++ GL11.glPopMatrix(); ++ } ++ else ++ { ++ GL11.glDisable(GL11.GL_LIGHTING); ++ ++ 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.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 +271,7 @@ +@@ -221,7 +326,7 @@ if (Item.itemsList[par3].func_46058_c()) { GL11.glDisable(GL11.GL_LIGHTING); @@ -118,7 +168,7 @@ for (var8 = 0; var8 <= 1; ++var8) { -@@ -247,11 +297,11 @@ +@@ -247,11 +352,11 @@ if (par3 < 256) { From 8e92edb4b7b0238d6a9a4c5ccfd9ebbe825e8f6e Mon Sep 17 00:00:00 2001 From: newthead Date: Fri, 16 Mar 2012 23:57:59 -0700 Subject: [PATCH 06/13] Cleanup/fix item render hooks --- .../src/net/minecraft/src/forge/ForgeHooksClient.java | 2 +- .../net/minecraft/src/forge/IEquippedItemRenderer.java | 1 + .../minecraft/net/minecraft/src/ItemRenderer.java.patch | 6 +++--- .../minecraft/net/minecraft/src/RenderItem.java.patch | 9 ++++++--- 4 files changed, 11 insertions(+), 7 deletions(-) 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 585306552..07502d47b 100644 --- a/forge/forge_client/src/net/minecraft/src/forge/ForgeHooksClient.java +++ b/forge/forge_client/src/net/minecraft/src/forge/ForgeHooksClient.java @@ -267,7 +267,7 @@ public class ForgeHooksClient { GL11.glPushMatrix(); GL11.glEnable(GL12.GL_RESCALE_NORMAL); - GL11.glTranslatef(0.0F, 0.3F, 0.0F); + 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); diff --git a/forge/forge_client/src/net/minecraft/src/forge/IEquippedItemRenderer.java b/forge/forge_client/src/net/minecraft/src/forge/IEquippedItemRenderer.java index 438b1504b..6f8cdd7e1 100644 --- a/forge/forge_client/src/net/minecraft/src/forge/IEquippedItemRenderer.java +++ b/forge/forge_client/src/net/minecraft/src/forge/IEquippedItemRenderer.java @@ -1,5 +1,6 @@ package net.minecraft.src.forge; +import net.minecraft.src.EntityLiving; import net.minecraft.src.RenderBlocks; public interface IEquippedItemRenderer diff --git a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch index 9edbc7f83..433e4453e 100644 --- a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch @@ -19,7 +19,8 @@ - if (par2ItemStack.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType())) + if (customRenderer != null) -+ { + { +- GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); + if (par2ItemStack.itemID < 256) + { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(ForgeHooksClient.getTexture("/terrain.png", par2ItemStack.getItem()))); @@ -31,8 +32,7 @@ + ForgeHooksClient.renderEquippedItem(customRenderer, renderBlocksInstance, par1EntityLiving, par2ItemStack.itemID, par2ItemStack.getItemDamage()); + } + 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("/terrain.png", par2ItemStack.getItem()))); this.renderBlocksInstance.renderBlockAsItem(Block.blocksList[par2ItemStack.itemID], par2ItemStack.getItemDamage(), 1.0F); } diff --git a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch index 0b849709a..ff6aa13d2 100644 --- a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch @@ -94,7 +94,7 @@ } if (this.field_27004_a) -@@ -187,9 +239,62 @@ +@@ -187,9 +239,65 @@ float var12; float var13; @@ -138,6 +138,8 @@ + 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; @@ -150,6 +152,7 @@ + } + + ForgeHooksClient.renderInventoryItem(customRenderer, renderBlocks, par3, par4); ++ GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_LIGHTING); + } + } @@ -159,7 +162,7 @@ Block var15 = Block.blocksList[par3]; GL11.glPushMatrix(); GL11.glTranslatef((float)(par6 - 2), (float)(par7 + 3), -3.0F + this.zLevel); -@@ -221,7 +326,7 @@ +@@ -221,7 +329,7 @@ if (Item.itemsList[par3].func_46058_c()) { GL11.glDisable(GL11.GL_LIGHTING); @@ -168,7 +171,7 @@ for (var8 = 0; var8 <= 1; ++var8) { -@@ -247,11 +352,11 @@ +@@ -247,11 +355,11 @@ if (par3 < 256) { From 2e24491707962e1a0dd0c0fc980b4cab34f8586b Mon Sep 17 00:00:00 2001 From: newthead Date: Sat, 17 Mar 2012 00:17:57 -0700 Subject: [PATCH 07/13] Added additional flag for rendering entity item bobbing --- .../src/forge/MinecraftForgeClient.java | 11 +++++++++-- .../net/minecraft/src/RenderItem.java.patch | 17 +++++++++-------- 2 files changed, 18 insertions(+), 10 deletions(-) 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 ca257348e..4c9754563 100755 --- a/forge/forge_client/src/net/minecraft/src/forge/MinecraftForgeClient.java +++ b/forge/forge_client/src/net/minecraft/src/forge/MinecraftForgeClient.java @@ -86,13 +86,15 @@ public class MinecraftForgeClient private static IEntityItemRenderer[] customEntityItemRenderers = new IEntityItemRenderer[Item.itemsList.length]; private static boolean[] applyEntityItemRotation = new boolean[Item.itemsList.length]; + private static boolean[] applyEntityItemBobbing = new boolean[Item.itemsList.length]; - /** Register a custom renderer for an item when it is dropped or thrown on the ground. + /** Register a custom renderer for an item that is dropped or thrown on the ground. */ - public static void registerEntityItemRenderer(int itemID, IEntityItemRenderer renderer, boolean applyRotationEffect) + public static void registerEntityItemRenderer(int itemID, IEntityItemRenderer renderer, boolean applyRotationEffect, boolean applyBobbingEffect) { customEntityItemRenderers[itemID] = renderer; applyEntityItemRotation[itemID] = applyRotationEffect; + applyEntityItemBobbing[itemID] = applyBobbingEffect; } public static IEntityItemRenderer getEntityItemRenderer(int itemID) @@ -104,6 +106,11 @@ public class MinecraftForgeClient { return applyEntityItemRotation[itemID]; } + + public static boolean applyEntityItemBobbingEffect(int itemID) + { + return applyEntityItemBobbing[itemID]; + } private static IEquippedItemRenderer[] customEquippedItemRenderers = new IEquippedItemRenderer[Item.itemsList.length]; private static boolean[] renderEquippedAsBlock = new boolean[Item.itemsList.length]; diff --git a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch index ff6aa13d2..71c89cd0c 100644 --- a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch @@ -13,17 +13,18 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; -@@ -55,10 +61,56 @@ +@@ -55,10 +61,57 @@ float var18; float var23; + IEntityItemRenderer customRenderer = MinecraftForgeClient.getEntityItemRenderer(var10.itemID); + if (customRenderer != null) + { -+ if (MinecraftForgeClient.applyEntityItemRotationEffect(var10.itemID)) { ++ if (MinecraftForgeClient.applyEntityItemRotationEffect(var10.itemID)) ++ { + GL11.glRotatef(var12, 0.0F, 1.0F, 0.0F); + } -+ else ++ if (!MinecraftForgeClient.applyEntityItemBobbingEffect(var10.itemID)) + { + GL11.glTranslatef(0.0F, -var11, 0.0F); + } @@ -71,7 +72,7 @@ float var21 = 0.25F; var15 = Block.blocksList[var10.itemID].getRenderType(); -@@ -94,7 +146,7 @@ +@@ -94,7 +147,7 @@ if (var10.getItem().func_46058_c()) { GL11.glScalef(0.5F, 0.5F, 0.5F); @@ -80,7 +81,7 @@ for (var14 = 0; var14 <= 1; ++var14) { -@@ -120,11 +172,11 @@ +@@ -120,11 +173,11 @@ if (var10.itemID < 256) { @@ -94,7 +95,7 @@ } if (this.field_27004_a) -@@ -187,9 +239,65 @@ +@@ -187,9 +240,65 @@ float var12; float var13; @@ -162,7 +163,7 @@ Block var15 = Block.blocksList[par3]; GL11.glPushMatrix(); GL11.glTranslatef((float)(par6 - 2), (float)(par7 + 3), -3.0F + this.zLevel); -@@ -221,7 +329,7 @@ +@@ -221,7 +330,7 @@ if (Item.itemsList[par3].func_46058_c()) { GL11.glDisable(GL11.GL_LIGHTING); @@ -171,7 +172,7 @@ for (var8 = 0; var8 <= 1; ++var8) { -@@ -247,11 +355,11 @@ +@@ -247,11 +356,11 @@ if (par3 < 256) { From 4366929c9bb8638c3139b314b2eabce781d5c3fd Mon Sep 17 00:00:00 2001 From: newthead Date: Sat, 17 Mar 2012 11:21:08 -0700 Subject: [PATCH 08/13] Merged item rendering interfaces into a single IItemRenderer --- .../src/forge/IEntityItemRenderer.java | 9 --- .../src/forge/IEquippedItemRenderer.java | 9 --- .../src/forge/IInventoryItemRenderer.java | 8 -- .../minecraft/src/forge/IItemRenderer.java | 76 +++++++++++++++++++ 4 files changed, 76 insertions(+), 26 deletions(-) delete mode 100644 forge/forge_client/src/net/minecraft/src/forge/IEntityItemRenderer.java delete mode 100644 forge/forge_client/src/net/minecraft/src/forge/IEquippedItemRenderer.java delete mode 100644 forge/forge_client/src/net/minecraft/src/forge/IInventoryItemRenderer.java create mode 100644 forge/forge_client/src/net/minecraft/src/forge/IItemRenderer.java diff --git a/forge/forge_client/src/net/minecraft/src/forge/IEntityItemRenderer.java b/forge/forge_client/src/net/minecraft/src/forge/IEntityItemRenderer.java deleted file mode 100644 index 519fcab54..000000000 --- a/forge/forge_client/src/net/minecraft/src/forge/IEntityItemRenderer.java +++ /dev/null @@ -1,9 +0,0 @@ -package net.minecraft.src.forge; - -import net.minecraft.src.EntityItem; -import net.minecraft.src.RenderBlocks; - -public interface IEntityItemRenderer -{ - public void renderEntityItem(RenderBlocks render, EntityItem item, int itemID, int metadata); -} diff --git a/forge/forge_client/src/net/minecraft/src/forge/IEquippedItemRenderer.java b/forge/forge_client/src/net/minecraft/src/forge/IEquippedItemRenderer.java deleted file mode 100644 index 6f8cdd7e1..000000000 --- a/forge/forge_client/src/net/minecraft/src/forge/IEquippedItemRenderer.java +++ /dev/null @@ -1,9 +0,0 @@ -package net.minecraft.src.forge; - -import net.minecraft.src.EntityLiving; -import net.minecraft.src.RenderBlocks; - -public interface IEquippedItemRenderer -{ - public void renderEquippedItem(RenderBlocks render, EntityLiving entity, int itemID, int metadata); -} diff --git a/forge/forge_client/src/net/minecraft/src/forge/IInventoryItemRenderer.java b/forge/forge_client/src/net/minecraft/src/forge/IInventoryItemRenderer.java deleted file mode 100644 index 7a82b236f..000000000 --- a/forge/forge_client/src/net/minecraft/src/forge/IInventoryItemRenderer.java +++ /dev/null @@ -1,8 +0,0 @@ -package net.minecraft.src.forge; - -import net.minecraft.src.RenderBlocks; - -public interface IInventoryItemRenderer -{ - public void renderInventoryItem(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..b3ee775af --- /dev/null +++ b/forge/forge_client/src/net/minecraft/src/forge/IItemRenderer.java @@ -0,0 +1,76 @@ +package net.minecraft.src.forge; + +import net.minecraft.src.EntityItem; +import net.minecraft.src.EntityLiving; +import net.minecraft.src.RenderBlocks; + +public interface IItemRenderer +{ + /** Checks if this renderer should handle a specific item render type + * @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); + + /** 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 + * @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); + + /** 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(); + + /** 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(); + + /** 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 itemID The item's ID (shifted index) + * @param metadata The item's metadata or damage value + */ + public void renderEquippedItem(RenderBlocks render, EntityLiving entity, int itemID, int metadata); + + /** 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(); + + /** 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 itemID The item's ID (shifted index) + * @param metadata The item's metadata or damage value + */ + public void renderInventoryItem(RenderBlocks render, int itemID, int metadata); + + /** 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(); + +} From 4cf001c644492946921445b2888c0c8f94d3c978 Mon Sep 17 00:00:00 2001 From: newthead Date: Sat, 17 Mar 2012 11:46:15 -0700 Subject: [PATCH 09/13] Updated render hooks and registration to use the IItemRenderer interface --- .../minecraft/src/forge/ForgeHooksClient.java | 8 +- .../minecraft/src/forge/ItemRenderType.java | 8 ++ .../src/forge/MinecraftForgeClient.java | 77 ++++--------------- 3 files changed, 27 insertions(+), 66 deletions(-) create mode 100644 forge/forge_client/src/net/minecraft/src/forge/ItemRenderType.java 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 07502d47b..addb6bdec 100644 --- a/forge/forge_client/src/net/minecraft/src/forge/ForgeHooksClient.java +++ b/forge/forge_client/src/net/minecraft/src/forge/ForgeHooksClient.java @@ -252,14 +252,14 @@ public class ForgeHooksClient } } - public static void renderEntityItem(IEntityItemRenderer customRenderer, RenderBlocks renderBlocks, EntityItem item, int itemID, int metadata) + public static void renderEntityItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, EntityItem item, int itemID, int metadata) { customRenderer.renderEntityItem(renderBlocks, item, itemID, metadata); } - public static void renderEquippedItem(IEquippedItemRenderer customRenderer, RenderBlocks renderBlocks, EntityLiving entity, int itemID, int metadata) + public static void renderEquippedItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, EntityLiving entity, int itemID, int metadata) { - if (MinecraftForgeClient.renderEquippedItemAsBlock(itemID)) + if (customRenderer.renderEquippedItemAsBlock()) { customRenderer.renderEquippedItem(renderBlocks, entity, itemID, metadata); } @@ -278,7 +278,7 @@ public class ForgeHooksClient } } - public static void renderInventoryItem(IInventoryItemRenderer customRenderer, RenderBlocks renderBlocks, int itemID, int metadata) + public static void renderInventoryItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, int itemID, int metadata) { customRenderer.renderInventoryItem(renderBlocks, itemID, metadata); } 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..149fac019 --- /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, + EQUIPPED, + INVENTORY; +} 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 4c9754563..07c7f72ac 100755 --- a/forge/forge_client/src/net/minecraft/src/forge/MinecraftForgeClient.java +++ b/forge/forge_client/src/net/minecraft/src/forge/MinecraftForgeClient.java @@ -84,74 +84,27 @@ public class MinecraftForgeClient return ForgeHooksClient.renderPass; } - private static IEntityItemRenderer[] customEntityItemRenderers = new IEntityItemRenderer[Item.itemsList.length]; - private static boolean[] applyEntityItemRotation = new boolean[Item.itemsList.length]; - private static boolean[] applyEntityItemBobbing = new boolean[Item.itemsList.length]; + private static IItemRenderer[] customItemRenderers = new IItemRenderer[Item.itemsList.length]; - /** Register a custom renderer for an item that is dropped or thrown on the ground. + /** 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 registerEntityItemRenderer(int itemID, IEntityItemRenderer renderer, boolean applyRotationEffect, boolean applyBobbingEffect) + public static void registerItemRenderer(int itemID, IItemRenderer renderer) { - customEntityItemRenderers[itemID] = renderer; - applyEntityItemRotation[itemID] = applyRotationEffect; - applyEntityItemBobbing[itemID] = applyBobbingEffect; + customItemRenderers[itemID] = renderer; } - public static IEntityItemRenderer getEntityItemRenderer(int itemID) + public static IItemRenderer getItemRenderer(int itemID, ItemRenderType type) { - return customEntityItemRenderers[itemID]; - } - - public static boolean applyEntityItemRotationEffect(int itemID) - { - return applyEntityItemRotation[itemID]; - } - - public static boolean applyEntityItemBobbingEffect(int itemID) - { - return applyEntityItemBobbing[itemID]; - } - - private static IEquippedItemRenderer[] customEquippedItemRenderers = new IEquippedItemRenderer[Item.itemsList.length]; - private static boolean[] renderEquippedAsBlock = new boolean[Item.itemsList.length]; - - /** Register a custom renderer for an item that is currently held in-hand. - */ - public static void registerEquippedItemRenderer(int itemID, IEquippedItemRenderer renderer, boolean renderAsBlock) - { - customEquippedItemRenderers[itemID] = renderer; - renderEquippedAsBlock[itemID] = renderAsBlock; - } - - public static IEquippedItemRenderer getEquippedItemRenderer(int itemID) - { - return customEquippedItemRenderers[itemID]; - } - - public static boolean renderEquippedItemAsBlock(int itemID) - { - return renderEquippedAsBlock[itemID]; - } - - private static IInventoryItemRenderer[] customInventoryItemRenderers = new IInventoryItemRenderer[Item.itemsList.length]; - private static boolean[] renderInInventoryAsBlock = new boolean[Item.itemsList.length]; - - /** Register a custom renderer for an item being displayed in an inventory slot. - */ - public static void registerInventoryItemRenderer(int itemID, IInventoryItemRenderer renderer, boolean renderAsBlock) - { - customInventoryItemRenderers[itemID] = renderer; - renderInInventoryAsBlock[itemID] = renderAsBlock; - } - - public static IInventoryItemRenderer getInventoryItemRenderer(int itemID) - { - return customInventoryItemRenderers[itemID]; - } - - public static boolean renderInventoryItemAsBlock(int itemID) - { - return renderInInventoryAsBlock[itemID]; + IItemRenderer renderer = customItemRenderers[itemID]; + if (renderer != null && renderer.handleRenderType(type)) { + return customItemRenderers[itemID]; + } + return null; } private static boolean hasInit = false; From e2dc4d595ed6607eef294916c52a0cc9724bcb8e Mon Sep 17 00:00:00 2001 From: newthead Date: Sat, 17 Mar 2012 11:48:54 -0700 Subject: [PATCH 10/13] Modified patches to use new item render hooks --- .../net/minecraft/src/ItemRenderer.java.patch | 39 ++++++++----------- .../net/minecraft/src/RenderItem.java.patch | 31 ++++++--------- 2 files changed, 28 insertions(+), 42 deletions(-) diff --git a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch index 433e4453e..a6e289ba3 100644 --- a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch @@ -1,52 +1,45 @@ --- ../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.IEquippedItemRenderer; ++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,34 @@ +@@ -33,22 +38,21 @@ public void renderItem(EntityLiving par1EntityLiving, ItemStack par2ItemStack, int par3) { GL11.glPushMatrix(); -+ IEquippedItemRenderer customRenderer = MinecraftForgeClient.getEquippedItemRenderer(par2ItemStack.itemID); ++ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(par2ItemStack.itemID, 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("/terrain.png")); -+ if (par2ItemStack.itemID < 256) -+ { -+ 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(ForgeHooksClient.getTexture("/gui/items.png", par2ItemStack.getItem()))); -+ } +- 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()); -+ } -+ 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); } - else +- else ++ else if (par2ItemStack.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType())) { - if (par2ItemStack.itemID < 256) - { +- 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()))); ++ this.renderBlocksInstance.renderBlockAsItem(Block.blocksList[par2ItemStack.itemID], par2ItemStack.getItemDamage(), 1.0F); } 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(par2ItemStack.itemID < 256 ? "/terrain.png" : "/gui/items.png", Block.blocksList[par2ItemStack.itemID]))); Tessellator var4 = Tessellator.instance; + int var5 = par1EntityLiving.getItemIcon(par2ItemStack, par3); diff --git a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch index 71c89cd0c..c9b36c69e 100644 --- a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch @@ -6,8 +6,8 @@ import java.util.Random; + +import net.minecraft.src.forge.ForgeHooksClient; -+import net.minecraft.src.forge.IEntityItemRenderer; -+import net.minecraft.src.forge.IInventoryItemRenderer; ++import net.minecraft.src.forge.IItemRenderer; ++import net.minecraft.src.forge.ItemRenderType; +import net.minecraft.src.forge.MinecraftForgeClient; + import org.lwjgl.opengl.GL11; @@ -17,14 +17,14 @@ float var18; float var23; -+ IEntityItemRenderer customRenderer = MinecraftForgeClient.getEntityItemRenderer(var10.itemID); ++ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var10.itemID, ItemRenderType.ENTITY); + if (customRenderer != null) + { -+ if (MinecraftForgeClient.applyEntityItemRotationEffect(var10.itemID)) ++ if (customRenderer.useEntityItemRotationEffect()) + { + GL11.glRotatef(var12, 0.0F, 1.0F, 0.0F); + } -+ if (!MinecraftForgeClient.applyEntityItemBobbingEffect(var10.itemID)) ++ if (!customRenderer.useEntityItemBobbingEffect()) + { + GL11.glTranslatef(0.0F, -var11, 0.0F); + } @@ -58,7 +58,7 @@ + } + else + { -+ this.loadTexture(ForgeHooksClient.getTexture("/gui/items.png", var10.getItem())); ++ 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()); + } @@ -95,25 +95,18 @@ } if (this.field_27004_a) -@@ -187,9 +240,65 @@ +@@ -187,9 +240,58 @@ float var12; float var13; - if (par3 < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par3].getRenderType())) -+ IInventoryItemRenderer customRenderer = MinecraftForgeClient.getInventoryItemRenderer(par3); ++ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(par3, ItemRenderType.INVENTORY); + if (customRenderer != null) { - par2RenderEngine.bindTexture(par2RenderEngine.getTexture("/terrain.png")); -+ if (par3 < 256) -+ { -+ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(ForgeHooksClient.getTexture("/terrain.png", Item.itemsList[par3]))); -+ } -+ else -+ { -+ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(ForgeHooksClient.getTexture("/gui/items.png", Item.itemsList[par3]))); -+ } ++ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(ForgeHooksClient.getTexture(par3 < 256 ? "/terrain.png" : "/gui/items.png", Item.itemsList[par3]))); + -+ if (MinecraftForgeClient.renderInventoryItemAsBlock(par3)) ++ if (customRenderer.renderInventoryItemAsBlock()) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float)(par6 - 2), (float)(par7 + 3), -3.0F + this.zLevel); @@ -163,7 +156,7 @@ Block var15 = Block.blocksList[par3]; GL11.glPushMatrix(); GL11.glTranslatef((float)(par6 - 2), (float)(par7 + 3), -3.0F + this.zLevel); -@@ -221,7 +330,7 @@ +@@ -221,7 +323,7 @@ if (Item.itemsList[par3].func_46058_c()) { GL11.glDisable(GL11.GL_LIGHTING); @@ -172,7 +165,7 @@ for (var8 = 0; var8 <= 1; ++var8) { -@@ -247,11 +356,11 @@ +@@ -247,11 +349,11 @@ if (par3 < 256) { From 0597c30ac26c51ce3f5589126f37ad231ca3a690 Mon Sep 17 00:00:00 2001 From: newthead Date: Sat, 17 Mar 2012 11:21:08 -0700 Subject: [PATCH 11/13] Merged item rendering interfaces into a single IItemRenderer --- .../minecraft/src/forge/ForgeHooksClient.java | 19 +-- .../minecraft/src/forge/IItemRenderer.java | 30 ++-- .../minecraft/src/forge/ItemRenderType.java | 6 +- .../src/forge/MinecraftForgeClient.java | 4 +- .../net/minecraft/src/ItemRenderer.java.patch | 2 +- .../net/minecraft/src/RenderItem.java.patch | 128 ++++++++++-------- 6 files changed, 99 insertions(+), 90 deletions(-) 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()) + { From be07279984f4b4d18e4517559774105fb1c2961e Mon Sep 17 00:00:00 2001 From: newthead Date: Mon, 19 Mar 2012 11:37:51 -0700 Subject: [PATCH 12/13] Changed render hook checks to all use ItemStack instead of itemID --- .../minecraft/src/forge/ForgeHooksClient.java | 2 +- .../minecraft/src/forge/IItemRenderer.java | 18 +++++++----- .../src/forge/MinecraftForgeClient.java | 9 +++--- .../net/minecraft/src/ItemRenderer.java.patch | 8 +++--- .../net/minecraft/src/RenderItem.java.patch | 28 ++++++++++--------- 5 files changed, 36 insertions(+), 29 deletions(-) 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 0f945c91a..16b381780 100644 --- a/forge/forge_client/src/net/minecraft/src/forge/ForgeHooksClient.java +++ b/forge/forge_client/src/net/minecraft/src/forge/ForgeHooksClient.java @@ -259,7 +259,7 @@ public class ForgeHooksClient public static void renderEquippedItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, EntityLiving entity, ItemStack item) { - if (customRenderer.renderEquippedItemAsBlock(item.itemID)) + if (customRenderer.renderEquippedItemAsBlock(item)) { GL11.glPushMatrix(); GL11.glTranslatef(-0.5F, -0.5F, -0.5F); 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 50f3e0c25..8d38d5cd6 100644 --- a/forge/forge_client/src/net/minecraft/src/forge/IItemRenderer.java +++ b/forge/forge_client/src/net/minecraft/src/forge/IItemRenderer.java @@ -8,12 +8,12 @@ import net.minecraft.src.RenderBlocks; public interface IItemRenderer { /** Checks if this renderer should handle a specific item's render type - * @param itemID The item we are trying to render + * @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(int itemID, ItemRenderType type); + 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 @@ -26,15 +26,17 @@ public interface IItemRenderer /** 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(int itemID); + 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(int itemID); + 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. @@ -49,10 +51,11 @@ public interface IItemRenderer /** 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(int itemID); + 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 @@ -66,9 +69,10 @@ public interface IItemRenderer /** 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(int itemID); - + public boolean renderInventoryItemAsBlock(ItemStack item); + } 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 7a5b08bbe..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; @@ -98,11 +99,11 @@ public class MinecraftForgeClient customItemRenderers[itemID] = renderer; } - public static IItemRenderer getItemRenderer(int itemID, ItemRenderType type) + public static IItemRenderer getItemRenderer(ItemStack item, ItemRenderType type) { - IItemRenderer renderer = customItemRenderers[itemID]; - if (renderer != null && renderer.handleRenderType(itemID, type)) { - return renderer; + IItemRenderer renderer = customItemRenderers[item.itemID]; + if (renderer != null && renderer.handleRenderType(item, type)) { + return customItemRenderers[item.itemID]; } 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 39ce29dc9..cd5ed5d57 100644 --- a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch @@ -16,7 +16,7 @@ public void renderItem(EntityLiving par1EntityLiving, ItemStack par2ItemStack, int par3) { GL11.glPushMatrix(); -+ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(par2ItemStack.itemID, ItemRenderType.EQUIPPED); ++ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(par2ItemStack, ItemRenderType.EQUIPPED); - if (par2ItemStack.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType())) + if (customRenderer != null) @@ -34,9 +34,9 @@ - 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", par2ItemStack.getItem()))); + this.renderBlocksInstance.renderBlockAsItem(Block.blocksList[par2ItemStack.itemID], par2ItemStack.getItemDamage(), 1.0F); - } - else - { + } + 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(par2ItemStack.itemID < 256 ? "/terrain.png" : "/gui/items.png", Block.blocksList[par2ItemStack.itemID]))); diff --git a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch index 9a8f41b6b..b50b5ff58 100644 --- a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch @@ -17,20 +17,21 @@ float var18; float var23; -+ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var10.itemID, ItemRenderType.ENTITY); +- if (var10.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[var10.itemID].getRenderType())) ++ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var10, ItemRenderType.ENTITY); + if (customRenderer != null) -+ { -+ if (customRenderer.useEntityItemRotationEffect(var10.itemID)) + { ++ if (customRenderer.useEntityItemRotationEffect(var10)) + { + GL11.glRotatef(var12, 0.0F, 1.0F, 0.0F); + } -+ if (!customRenderer.useEntityItemBobbingEffect(var10.itemID)) ++ if (!customRenderer.useEntityItemBobbingEffect(var10)) + { + GL11.glTranslatef(0.0F, -var11, 0.0F); + } + - if (var10.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[var10.itemID].getRenderType())) - { ++ 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(); @@ -127,16 +128,16 @@ } var8 = Item.itemsList[par3].getColorFromDamage(par4, 0); -@@ -279,7 +332,59 @@ +@@ -279,8 +332,59 @@ { if (par3ItemStack != null) { -+ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(par3ItemStack.itemID, ItemRenderType.INVENTORY); +- 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.itemID)) ++ if (customRenderer.renderInventoryItemAsBlock(par3ItemStack)) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float)(par4 - 2), (float)(par5 + 3), -3.0F + this.zLevel); @@ -164,7 +165,7 @@ + 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; @@ -182,8 +183,9 @@ + } + else + { - this.drawItemIntoGui(par1FontRenderer, par2RenderEngine, par3ItemStack.itemID, par3ItemStack.getItemDamage(), par3ItemStack.getIconIndex(), par4, par5); ++ this.drawItemIntoGui(par1FontRenderer, par2RenderEngine, par3ItemStack.itemID, par3ItemStack.getItemDamage(), par3ItemStack.getIconIndex(), par4, par5); + } - ++ if (par3ItemStack != null && par3ItemStack.hasEffect()) { + GL11.glDepthFunc(GL11.GL_GREATER); From bd49c3dcdb823ded8a1c829e032136786fee48bf Mon Sep 17 00:00:00 2001 From: newthead Date: Mon, 19 Mar 2012 11:52:24 -0700 Subject: [PATCH 13/13] Reverted vanilla texture binding to an explicit if() statement based on item ID --- .../net/minecraft/src/ItemRenderer.java.patch | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch index cd5ed5d57..8214b898f 100644 --- a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch @@ -12,7 +12,7 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; -@@ -33,22 +38,21 @@ +@@ -33,21 +38,27 @@ public void renderItem(EntityLiving par1EntityLiving, ItemStack par2ItemStack, int par3) { GL11.glPushMatrix(); @@ -22,24 +22,25 @@ + if (customRenderer != null) { - 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); - } -- else ++ } + else if (par2ItemStack.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType())) - { -- 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", par2ItemStack.getItem()))); -+ this.renderBlocksInstance.renderBlockAsItem(Block.blocksList[par2ItemStack.itemID], par2ItemStack.getItemDamage(), 1.0F); + this.renderBlocksInstance.renderBlockAsItem(Block.blocksList[par2ItemStack.itemID], par2ItemStack.getItemDamage(), 1.0F); } else { + 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", 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(par2ItemStack.itemID < 256 ? "/terrain.png" : "/gui/items.png", Block.blocksList[par2ItemStack.itemID]))); ++ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(ForgeHooksClient.getTexture("/gui/items.png", par2ItemStack.getItem()))); + } Tessellator var4 = Tessellator.instance; - int var5 = par1EntityLiving.getItemIcon(par2ItemStack, par3);