From 0abb4e289a12dc3dbe39d22b8887d9f739a8c864 Mon Sep 17 00:00:00 2001 From: LexManos Date: Tue, 10 Apr 2012 00:43:21 -0700 Subject: [PATCH] Added new Item function to allow for multiple rendering passes. Fixed a vinella bug where item layters would not line up for EntityItem's Added new IItemRendere helper flag for 3d block translations. --- .../minecraft/src/forge/IItemRenderer.java | 7 +++ .../net/minecraft/src/Item.java.patch | 15 ++++++- .../net/minecraft/src/ItemRenderer.java.patch | 22 ++++++++++ .../net/minecraft/src/RenderBiped.java.patch | 37 ++++++++++++++++ .../net/minecraft/src/RenderItem.java.patch | 29 +++++++----- .../net/minecraft/src/RenderPlayer.java.patch | 44 ++++++++++++++++++- .../minecraft/src/RenderSnowMan.java.patch | 25 +++++++++++ .../net/minecraft/src/Item.java.patch | 17 ++++++- 8 files changed, 182 insertions(+), 14 deletions(-) create mode 100644 forge/patches/minecraft/net/minecraft/src/RenderBiped.java.patch create mode 100644 forge/patches/minecraft/net/minecraft/src/RenderSnowMan.java.patch 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 e1e44959e..aa7929ceb 100644 --- a/forge/forge_client/src/net/minecraft/src/forge/IItemRenderer.java +++ b/forge/forge_client/src/net/minecraft/src/forge/IItemRenderer.java @@ -69,6 +69,7 @@ public interface IItemRenderer /** * Determines if an up-and-down bobbing effect should be used when + * rendering an EntityItem, like most default items do. */ ENTITY_BOBBING, @@ -77,6 +78,12 @@ public interface IItemRenderer * block or as a 2D texture. */ EQUIPPED_BLOCK, + + /** + * Determines if the item should equate to a block that has + * RenderBlocks.renderItemIn3d return true + */ + BLOCK_3D, /** * Determines if the item should be rendered in GUI inventory slots as a 3D diff --git a/forge/patches/minecraft/net/minecraft/src/Item.java.patch b/forge/patches/minecraft/net/minecraft/src/Item.java.patch index 7062be909..04a435c4d 100644 --- a/forge/patches/minecraft/net/minecraft/src/Item.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/Item.java.patch @@ -28,7 +28,7 @@ Vec3D var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21); MovingObjectPosition var24 = par1World.rayTraceBlocks_do_do(var13, var23, par3, !par3); return var24; -@@ -579,4 +583,149 @@ +@@ -579,4 +583,162 @@ { StatList.initStats(); } @@ -176,5 +176,18 @@ + } + */ + return getIconIndex(stack); ++ } ++ ++ /** ++ * Returns the number of render passes/layers this item has. ++ * Usually equates to ItemRenderer.renderItem being called for this many passes. ++ * Does not get called unless func_46058_c() is true; ++ * ++ * @param metadata The item's metadata ++ * @return The number of passes to run. ++ */ ++ public int getRenderPasses(int metadata) ++ { ++ return func_46058_c() ? 2 : 1; + } } diff --git a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch index 152c03cab..8eea9291c 100644 --- a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch @@ -75,3 +75,25 @@ GL11.glPopMatrix(); } else if (var14 != null) +@@ -414,12 +435,15 @@ + if (var14.getItem().func_46058_c()) + { + this.renderItem(var3, var14, 0); +- var9 = Item.itemsList[var14.itemID].getColorFromDamage(var14.getItemDamage(), 1); +- var10 = (float)(var9 >> 16 & 255) / 255.0F; +- var11 = (float)(var9 >> 8 & 255) / 255.0F; +- var12 = (float)(var9 & 255) / 255.0F; +- GL11.glColor4f(var6 * var10, var6 * var11, var6 * var12, 1.0F); +- this.renderItem(var3, var14, 1); ++ for (int x = 1; x < var14.getItem().getRenderPasses(var14.getItemDamage()); x++) ++ { ++ var9 = Item.itemsList[var14.itemID].getColorFromDamage(var14.getItemDamage(), 1); ++ var10 = (float)(var9 >> 16 & 255) / 255.0F; ++ var11 = (float)(var9 >> 8 & 255) / 255.0F; ++ var12 = (float)(var9 & 255) / 255.0F; ++ GL11.glColor4f(var6 * var10, var6 * var11, var6 * var12, 1.0F); ++ this.renderItem(var3, var14, 1); ++ } + } + else + { diff --git a/forge/patches/minecraft/net/minecraft/src/RenderBiped.java.patch b/forge/patches/minecraft/net/minecraft/src/RenderBiped.java.patch new file mode 100644 index 000000000..5ee841cd5 --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/RenderBiped.java.patch @@ -0,0 +1,37 @@ +--- ../src_base/minecraft/net/minecraft/src/RenderBiped.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/RenderBiped.java 0000-00-00 00:00:00.000000000 -0000 +@@ -1,5 +1,10 @@ + package net.minecraft.src; + ++import static net.minecraft.src.forge.IItemRenderer.ItemRenderType.EQUIPPED; ++import static net.minecraft.src.forge.IItemRenderer.ItemRendererHelper.BLOCK_3D; ++import net.minecraft.src.forge.IItemRenderer; ++import net.minecraft.src.forge.MinecraftForgeClient; ++ + import org.lwjgl.opengl.GL11; + + public class RenderBiped extends RenderLiving +@@ -32,7 +37,10 @@ + GL11.glTranslatef(-0.0625F, 0.4375F, 0.0625F); + float var4; + +- if (var3.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[var3.itemID].getRenderType())) ++ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var3, EQUIPPED); ++ boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(EQUIPPED, var3, BLOCK_3D)); ++ ++ if (var3.itemID < 256 && (is3D || RenderBlocks.renderItemIn3d(Block.blocksList[var3.itemID].getRenderType()))) + { + var4 = 0.5F; + GL11.glTranslatef(0.0F, 0.1875F, -0.3125F); +@@ -72,7 +80,10 @@ + + if (var3.getItem().func_46058_c()) + { +- this.renderManager.itemRenderer.renderItem(par1EntityLiving, var3, 1); ++ for (int x = 1; x < var3.getItem().getRenderPasses(var3.getItemDamage()); x++) ++ { ++ this.renderManager.itemRenderer.renderItem(par1EntityLiving, var3, 1); ++ } + } + + GL11.glPopMatrix(); diff --git a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch index 865cff010..170275f08 100644 --- a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch @@ -14,7 +14,7 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; -@@ -55,10 +62,58 @@ +@@ -55,10 +62,59 @@ float var18; float var23; @@ -31,8 +31,9 @@ + { + GL11.glTranslatef(0.0F, -var11, 0.0F); + } ++ boolean is3D = customRenderer.shouldUseRenderHelper(ENTITY, var10, BLOCK_3D); + -+ if (var10.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[var10.itemID].getRenderType())) ++ if (var10.itemID < 256 && (is3D || RenderBlocks.renderItemIn3d(Block.blocksList[var10.itemID].getRenderType()))) + { + this.loadTexture(ForgeHooksClient.getTexture("/terrain.png", var10.getItem())); + float var21 = 0.25F; @@ -75,16 +76,21 @@ float var21 = 0.25F; var15 = Block.blocksList[var10.itemID].getRenderType(); -@@ -94,7 +149,7 @@ +@@ -94,10 +150,11 @@ if (var10.getItem().func_46058_c()) { GL11.glScalef(0.5F, 0.5F, 0.5F); - this.loadTexture("/gui/items.png"); + this.loadTexture(ForgeHooksClient.getTexture("/gui/items.png", Item.itemsList[var10.itemID])); - for (var14 = 0; var14 <= 1; ++var14) +- for (var14 = 0; var14 <= 1; ++var14) ++ for (var14 = 0; var14 < var10.getItem().getRenderPasses(var10.getItemDamage()); ++var14) { -@@ -120,11 +175,11 @@ ++ this.random.setSeed(187L); //Fixes Vanilla bug where layers would not render aligns properly. + var15 = var10.getItem().func_46057_a(var10.getItemDamage(), var14); + var16 = 1.0F; + +@@ -120,11 +177,11 @@ if (var10.itemID < 256) { @@ -98,7 +104,7 @@ } if (this.field_27004_a) -@@ -186,10 +241,10 @@ +@@ -186,10 +243,10 @@ float var11; float var12; float var13; @@ -111,16 +117,19 @@ Block var15 = Block.blocksList[par3]; GL11.glPushMatrix(); GL11.glTranslatef((float)(par6 - 2), (float)(par7 + 3), -3.0F + this.zLevel); -@@ -221,7 +276,7 @@ +@@ -221,9 +278,9 @@ if (Item.itemsList[par3].func_46058_c()) { GL11.glDisable(GL11.GL_LIGHTING); - par2RenderEngine.bindTexture(par2RenderEngine.getTexture("/gui/items.png")); + par2RenderEngine.bindTexture(par2RenderEngine.getTexture(ForgeHooksClient.getTexture("/gui/items.png", Item.itemsList[par3]))); - for (var8 = 0; var8 <= 1; ++var8) +- for (var8 = 0; var8 <= 1; ++var8) ++ for (var8 = 0; var8 < Item.itemsList[par3].getRenderPasses(par4); ++var8) { -@@ -247,11 +302,11 @@ + int var9 = Item.itemsList[par3].func_46057_a(par4, var8); + var10 = Item.itemsList[par3].getColorFromDamage(par4, var8); +@@ -247,11 +304,11 @@ if (par3 < 256) { @@ -134,7 +143,7 @@ } var8 = Item.itemsList[par3].getColorFromDamage(par4, 0); -@@ -279,7 +334,58 @@ +@@ -279,7 +336,58 @@ { if (par3ItemStack != null) { diff --git a/forge/patches/minecraft/net/minecraft/src/RenderPlayer.java.patch b/forge/patches/minecraft/net/minecraft/src/RenderPlayer.java.patch index 718b717cf..6babaf316 100644 --- a/forge/patches/minecraft/net/minecraft/src/RenderPlayer.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/RenderPlayer.java.patch @@ -1,14 +1,19 @@ --- ../src_base/minecraft/net/minecraft/src/RenderPlayer.java 0000-00-00 00:00:00.000000000 -0000 +++ ../src_work/minecraft/net/minecraft/src/RenderPlayer.java 0000-00-00 00:00:00.000000000 -0000 -@@ -2,6 +2,7 @@ +@@ -1,7 +1,12 @@ + package net.minecraft.src; ++import static net.minecraft.src.forge.IItemRenderer.ItemRenderType.EQUIPPED; ++import static net.minecraft.src.forge.IItemRenderer.ItemRendererHelper.BLOCK_3D; import net.minecraft.client.Minecraft; import org.lwjgl.opengl.GL11; +import net.minecraft.src.forge.IArmorTextureProvider; ++import net.minecraft.src.forge.IItemRenderer; ++import net.minecraft.src.forge.MinecraftForgeClient; public class RenderPlayer extends RenderLiving { -@@ -32,7 +33,14 @@ +@@ -32,7 +37,14 @@ if (var5 instanceof ItemArmor) { ItemArmor var6 = (ItemArmor)var5; @@ -24,3 +29,38 @@ ModelBiped var7 = par2 == 2 ? this.modelArmor : this.modelArmorChestplate; var7.bipedHead.showModel = par2 == 0; var7.bipedHeadwear.showModel = par2 == 0; +@@ -164,7 +176,10 @@ + GL11.glPushMatrix(); + this.modelBipedMain.bipedHead.postRender(0.0625F); + +- if (RenderBlocks.renderItemIn3d(Block.blocksList[var3.itemID].getRenderType())) ++ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var3, EQUIPPED); ++ boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(EQUIPPED, var3, BLOCK_3D)); ++ ++ if (is3D || RenderBlocks.renderItemIn3d(Block.blocksList[var3.itemID].getRenderType())) + { + float var4 = 0.625F; + GL11.glTranslatef(0.0F, -0.25F, 0.0F); +@@ -265,8 +280,11 @@ + { + var20 = var21.getItemUseAction(); + } +- +- if (var21.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[var21.itemID].getRenderType())) ++ ++ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var21, EQUIPPED); ++ boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(EQUIPPED, var21, BLOCK_3D)); ++ ++ if (var21.itemID < 256 && (is3D || RenderBlocks.renderItemIn3d(Block.blocksList[var21.itemID].getRenderType()))) + { + var6 = 0.5F; + GL11.glTranslatef(0.0F, 0.1875F, -0.3125F); +@@ -319,7 +337,7 @@ + + if (var21.getItem().func_46058_c()) + { +- for (int var25 = 0; var25 <= 1; ++var25) ++ for (int var25 = 0; var25 < var21.getItem().getRenderPasses(var21.getItemDamage()); ++var25) + { + int var24 = var21.getItem().getColorFromDamage(var21.getItemDamage(), var25); + float var26 = (float)(var24 >> 16 & 255) / 255.0F; diff --git a/forge/patches/minecraft/net/minecraft/src/RenderSnowMan.java.patch b/forge/patches/minecraft/net/minecraft/src/RenderSnowMan.java.patch new file mode 100644 index 000000000..2e4239da5 --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/RenderSnowMan.java.patch @@ -0,0 +1,25 @@ +--- ../src_base/minecraft/net/minecraft/src/RenderSnowMan.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/RenderSnowMan.java 0000-00-00 00:00:00.000000000 -0000 +@@ -1,5 +1,10 @@ + package net.minecraft.src; + ++import static net.minecraft.src.forge.IItemRenderer.ItemRenderType.EQUIPPED; ++import static net.minecraft.src.forge.IItemRenderer.ItemRendererHelper.BLOCK_3D; ++import net.minecraft.src.forge.IItemRenderer; ++import net.minecraft.src.forge.MinecraftForgeClient; ++ + import org.lwjgl.opengl.GL11; + + public class RenderSnowMan extends RenderLiving +@@ -24,7 +29,10 @@ + GL11.glPushMatrix(); + this.snowmanModel.field_40305_c.postRender(0.0625F); + +- if (RenderBlocks.renderItemIn3d(Block.blocksList[var3.itemID].getRenderType())) ++ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var3, EQUIPPED); ++ boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(EQUIPPED, var3, BLOCK_3D)); ++ ++ if (is3D || RenderBlocks.renderItemIn3d(Block.blocksList[var3.itemID].getRenderType())) + { + float var4 = 0.625F; + GL11.glTranslatef(0.0F, -0.34375F, 0.0F); diff --git a/forge/patches/minecraft_server/net/minecraft/src/Item.java.patch b/forge/patches/minecraft_server/net/minecraft/src/Item.java.patch index f9b8e277d..869edccb1 100644 --- a/forge/patches/minecraft_server/net/minecraft/src/Item.java.patch +++ b/forge/patches/minecraft_server/net/minecraft/src/Item.java.patch @@ -28,7 +28,7 @@ Vec3D var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21); MovingObjectPosition var24 = par1World.rayTraceBlocks_do_do(var13, var23, par3, !par3); return var24; -@@ -509,4 +517,149 @@ +@@ -509,4 +517,164 @@ { StatList.initStats(); } @@ -176,5 +176,20 @@ + } + */ + return 0; ++ } ++ ++ /** ++ * Returns the number of render passes/layers this item has. ++ * Usually equates to ItemRenderer.renderItem being called for this many passes. ++ * Does not get called unless func_46058_c() is true; ++ * ++ * Not called on the server ++ * ++ * @param metadata The item's metadata ++ * @return The number of passes to run. ++ */ ++ public int getRenderPasses(int metadata) ++ { ++ return 1; //return func_46058_c() ? 2 : 1; + } }