From 1d40d87f0c7725984c25bcaff4dd42ea9901dc2d Mon Sep 17 00:00:00 2001 From: LexManos Date: Wed, 6 Jun 2012 06:49:15 -0700 Subject: [PATCH] All Items and Blocks now implement ITextureProvider, and have a setTextureFile(String) function, to support cleaner code in Mods and in Forge. --- .../minecraft/src/forge/ForgeHooksClient.java | 14 ++--- .../net/minecraft/src/Block.java.patch | 56 ++++++++++++++----- .../net/minecraft/src/Item.java.patch | 43 ++++++++++++-- .../net/minecraft/src/ItemBlock.java.patch | 30 ---------- .../net/minecraft/src/ItemRenderer.java.patch | 8 +-- .../net/minecraft/src/RenderItem.java.patch | 16 +++--- 6 files changed, 100 insertions(+), 67 deletions(-) delete mode 100644 forge/patches/minecraft/net/minecraft/src/ItemBlock.java.patch 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 5e6e909c6..482baf059 100644 --- a/forge/forge_client/src/net/minecraft/src/forge/ForgeHooksClient.java +++ b/forge/forge_client/src/net/minecraft/src/forge/ForgeHooksClient.java @@ -242,21 +242,21 @@ public class ForgeHooksClient public static void beforeBlockRender(Block block, RenderBlocks render) { - if (block instanceof ITextureProvider && render.overrideBlockTexture == -1) + if (!block.isDefaultTexture && render.overrideBlockTexture == -1) { - bindTexture(((ITextureProvider)block).getTextureFile(), 0); + bindTexture(block.getTextureFile(), 0); } } public static void afterBlockRender(Block block, RenderBlocks render) { - if (block instanceof ITextureProvider && render.overrideBlockTexture == -1) + if (!block.isDefaultTexture && render.overrideBlockTexture == -1) { unbindTexture(); } } - public static void overrideTexture (Object obj) + public static void overrideTexture(Object obj) { if (obj instanceof ITextureProvider) { @@ -321,7 +321,7 @@ public class ForgeHooksClient if (item.itemID < 256 && (is3D || RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType()))) { - engine.bindTexture(engine.getTexture(getTexture("/terrain.png", item.getItem()))); + engine.bindTexture(engine.getTexture(item.getItem().getTextureFile())); int renderType = Block.blocksList[item.itemID].getRenderType(); float scale = (renderType == 1 || renderType == 19 || renderType == 12 || renderType == 2 ? 0.5F : 0.25F); @@ -345,7 +345,7 @@ public class ForgeHooksClient } else { - engine.bindTexture(engine.getTexture(getTexture(item.itemID < 256 ? "/terrain.png" : "/gui/items.png", item.getItem()))); + engine.bindTexture(engine.getTexture(item.getItem().getTextureFile())); GL11.glScalef(0.5F, 0.5F, 0.5F); customRenderer.renderItem(ENTITY, item, renderBlocks, entity); } @@ -360,7 +360,7 @@ public class ForgeHooksClient return false; } - engine.bindTexture(engine.getTexture(getTexture(item.itemID < 256 ? "/terrain.png" : "/gui/items.png", Item.itemsList[item.itemID]))); + engine.bindTexture(engine.getTexture(Item.itemsList[item.itemID].getTextureFile())); if (customRenderer.shouldUseRenderHelper(INVENTORY, item, INVENTORY_BLOCK)) { GL11.glPushMatrix(); diff --git a/forge/patches/minecraft/net/minecraft/src/Block.java.patch b/forge/patches/minecraft/net/minecraft/src/Block.java.patch index 6d9ae659b..9cb7b378d 100644 --- a/forge/patches/minecraft/net/minecraft/src/Block.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/Block.java.patch @@ -1,13 +1,20 @@ --- ../src_base/minecraft/net/minecraft/src/Block.java 0000-00-00 00:00:00.000000000 -0000 +++ ../src_work/minecraft/net/minecraft/src/Block.java 0000-00-00 00:00:00.000000000 -0000 -@@ -1,5 +1,6 @@ +@@ -1,9 +1,12 @@ package net.minecraft.src; +import net.minecraft.src.forge.ForgeHooks; ++import net.minecraft.src.forge.ITextureProvider; ++ import java.util.ArrayList; import java.util.Random; -@@ -397,7 +398,7 @@ +-public class Block ++public class Block implements ITextureProvider + { + public static final StepSound soundPowderFootstep = new StepSound("stone", 1.0F, 1.0F); + public static final StepSound soundWoodFootstep = new StepSound("wood", 1.0F, 1.0F); +@@ -397,7 +400,7 @@ public boolean hasTileEntity() { @@ -16,7 +23,7 @@ } /** -@@ -418,7 +419,7 @@ +@@ -418,7 +421,7 @@ */ public float getBlockBrightness(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) { @@ -25,7 +32,7 @@ } /** -@@ -426,7 +427,7 @@ +@@ -426,7 +429,7 @@ */ public int getMixedBrightnessForBlock(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) { @@ -34,7 +41,7 @@ } /** -@@ -583,11 +584,14 @@ +@@ -583,11 +586,14 @@ } /** @@ -51,7 +58,7 @@ } /** -@@ -607,16 +611,12 @@ +@@ -607,16 +613,12 @@ { int var8 = this.quantityDroppedWithBonus(par7, par1World.rand); @@ -71,7 +78,7 @@ } } } -@@ -929,7 +929,7 @@ +@@ -929,7 +931,7 @@ par2EntityPlayer.addStat(StatList.mineBlockStatArray[this.blockID], 1); par2EntityPlayer.addExhaustion(0.025F); @@ -80,11 +87,16 @@ { ItemStack var8 = this.createStackedBlock(par6); -@@ -1058,6 +1058,591 @@ +@@ -1058,6 +1060,614 @@ */ public void onFallenUpon(World par1World, int par2, int par3, int par4, Entity par5Entity, float par6) {} + /* =================================================== FORGE START =====================================*/ ++ protected static int blockFireSpreadSpeed[] = new int[blocksList.length]; ++ protected static int blockFlammability[] = new int[blocksList.length]; ++ protected String currentTexture = "/terrain.png"; ++ public boolean isDefaultTexture = true; ++ + /** + * Get a light value for this block, normal ranges are between 0 and 15 + * @@ -288,10 +300,7 @@ + public void addCreativeItems(ArrayList itemList) + { + } -+ -+ protected static int blockFireSpreadSpeed[] = new int[256]; -+ protected static int blockFlammability[] = new int[256]; -+ ++ + /** + * Chance that fire will spread and consume this block. + * 300 being a 100% chance, 0, being a 0% chance. @@ -668,7 +677,28 @@ + { + return blockID == stone.blockID; + } -+ ++ ++ /** ++ * Grabs the current texture file used for this block ++ */ ++ @Override ++ public String getTextureFile() ++ { ++ return currentTexture; ++ } ++ ++ /** ++ * Sets the current texture file for this block, used when rendering. ++ * Default is "/terrain.png" ++ * ++ * @param texture The texture file ++ */ ++ public void setTextureFile(String texture) ++ { ++ currentTexture = texture; ++ isDefaultTexture = false; ++ } ++ static { Item.itemsList[cloth.blockID] = (new ItemCloth(cloth.blockID - 256)).setItemName("cloth"); diff --git a/forge/patches/minecraft/net/minecraft/src/Item.java.patch b/forge/patches/minecraft/net/minecraft/src/Item.java.patch index f96f508a9..a5a40e34d 100644 --- a/forge/patches/minecraft/net/minecraft/src/Item.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/Item.java.patch @@ -1,13 +1,20 @@ --- ../src_base/minecraft/net/minecraft/src/Item.java 0000-00-00 00:00:00.000000000 -0000 +++ ../src_work/minecraft/net/minecraft/src/Item.java 0000-00-00 00:00:00.000000000 -0000 -@@ -1,5 +1,6 @@ +@@ -1,9 +1,12 @@ package net.minecraft.src; +import java.util.ArrayList; import java.util.List; import java.util.Random; -@@ -188,7 +189,10 @@ +-public class Item ++import net.minecraft.src.forge.ITextureProvider; ++ ++public class Item implements ITextureProvider + { + /** The RNG used by the Item subclasses. */ + protected static Random itemRand = new Random(); +@@ -188,7 +191,10 @@ /** full name of item from language file */ private String itemName; @@ -19,7 +26,7 @@ protected Item(int par1) { this.shiftedIndex = 256 + par1; -@@ -551,7 +555,7 @@ +@@ -551,7 +557,7 @@ float var17 = MathHelper.sin(-var5 * 0.017453292F); float var18 = var15 * var16; float var20 = var14 * var16; @@ -28,13 +35,14 @@ 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,162 @@ +@@ -579,4 +585,188 @@ { StatList.initStats(); } + + /* =========================================================== FORGE START ===============================================================*/ -+ ++ public boolean isDefaultTexture = true; ++ private String currentTexture = "/gui/items.png"; + /** + * Called when a new CreativeContainer is opened, populate the list + * with all of the items for this item you want a player in creative mode @@ -189,5 +197,30 @@ + public int getRenderPasses(int metadata) + { + return requiresMultipleRenderPasses() ? 2 : 1; ++ } ++ ++ /** ++ * Grabs the current texture file used for this block ++ */ ++ @Override ++ public String getTextureFile() ++ { ++ if (this instanceof ItemBlock) ++ { ++ return Block.blocksList[((ItemBlock)this).getBlockID()].getTextureFile(); ++ } ++ return currentTexture; ++ } ++ ++ /** ++ * Sets the current texture file for this item, used when rendering. ++ * Default is "/gui/items.png" ++ * ++ * @param texture The texture file ++ */ ++ public void setTextureFile(String texture) ++ { ++ currentTexture = texture; ++ isDefaultTexture = false; + } } diff --git a/forge/patches/minecraft/net/minecraft/src/ItemBlock.java.patch b/forge/patches/minecraft/net/minecraft/src/ItemBlock.java.patch deleted file mode 100644 index 1271c1669..000000000 --- a/forge/patches/minecraft/net/minecraft/src/ItemBlock.java.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- ../src_base/minecraft/net/minecraft/src/ItemBlock.java 0000-00-00 00:00:00.000000000 -0000 -+++ ../src_work/minecraft/net/minecraft/src/ItemBlock.java 0000-00-00 00:00:00.000000000 -0000 -@@ -1,6 +1,8 @@ - package net.minecraft.src; - --public class ItemBlock extends Item -+import net.minecraft.src.forge.ITextureProvider; -+ -+public class ItemBlock extends Item implements ITextureProvider - { - /** The block ID of the Block associated with this ItemBlock */ - private int blockID; -@@ -110,4 +112,17 @@ - { - return Block.blocksList[this.blockID].getBlockName(); - } -+ -+ @Override -+ public String getTextureFile() -+ { -+ if (Block.blocksList[blockID] instanceof ITextureProvider) -+ { -+ return ((ITextureProvider)Block.blocksList[blockID]).getTextureFile(); -+ } -+ else -+ { -+ return "/terrain.png"; -+ } -+ } - } diff --git a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch index 11b627818..d37544828 100644 --- a/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/ItemRenderer.java.patch @@ -22,13 +22,13 @@ - 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(par2ItemStack.itemID < 256 ? "/terrain.png" : "/gui/items.png", par2ItemStack.getItem()))); ++ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(par2ItemStack.getItem().getTextureFile())); + ForgeHooksClient.renderEquippedItem(customRenderer, renderBlocksInstance, par1EntityLiving, par2ItemStack); + } + else if (par2ItemStack.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType())) { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); -+ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(ForgeHooksClient.getTexture("/terrain.png", par2ItemStack.getItem()))); ++ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(par2ItemStack.getItem().getTextureFile())); this.renderBlocksInstance.renderBlockAsItem(Block.blocksList[par2ItemStack.itemID], par2ItemStack.getItemDamage(), 1.0F); } else @@ -36,12 +36,12 @@ if (par2ItemStack.itemID < 256) { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); -+ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(ForgeHooksClient.getTexture("/terrain.png", par2ItemStack.getItem()))); ++ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(par2ItemStack.getItem().getTextureFile())); } 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", par2ItemStack.getItem()))); ++ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(par2ItemStack.getItem().getTextureFile())); } Tessellator var4 = Tessellator.instance; diff --git a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch index f10bacbb1..0bd8bf040 100644 --- a/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/RenderItem.java.patch @@ -25,7 +25,7 @@ { GL11.glRotatef(var12, 0.0F, 1.0F, 0.0F); - this.loadTexture("/terrain.png"); -+ this.loadTexture(ForgeHooksClient.getTexture("/terrain.png", Block.blocksList[var10.itemID])); ++ this.loadTexture(Block.blocksList[var10.itemID].getTextureFile()); float var21 = 0.25F; var15 = Block.blocksList[var10.itemID].getRenderType(); @@ -34,7 +34,7 @@ { GL11.glScalef(0.5F, 0.5F, 0.5F); - this.loadTexture("/gui/items.png"); -+ this.loadTexture(ForgeHooksClient.getTexture("/gui/items.png", Item.itemsList[var10.itemID])); ++ this.loadTexture(Item.itemsList[var10.itemID].getTextureFile()); - for (var14 = 0; var14 <= 1; ++var14) + for (var14 = 0; var14 < var10.getItem().getRenderPasses(var10.getItemDamage()); ++var14) @@ -48,12 +48,12 @@ if (var10.itemID < 256) { - this.loadTexture("/terrain.png"); -+ this.loadTexture(ForgeHooksClient.getTexture("/terrain.png", Block.blocksList[var10.itemID])); ++ this.loadTexture(Block.blocksList[var10.itemID].getTextureFile()); } else { - this.loadTexture("/gui/items.png"); -+ this.loadTexture(ForgeHooksClient.getTexture("/gui/items.png", Item.itemsList[var10.itemID])); ++ this.loadTexture(Item.itemsList[var10.itemID].getTextureFile()); } if (this.field_27004_a) @@ -62,7 +62,7 @@ if (par3 < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par3].getRenderType())) { - par2RenderEngine.bindTexture(par2RenderEngine.getTexture("/terrain.png")); -+ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(ForgeHooksClient.getTexture("/terrain.png", Block.blocksList[par3]))); ++ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(Block.blocksList[par3].getTextureFile())); Block var15 = Block.blocksList[par3]; GL11.glPushMatrix(); GL11.glTranslatef((float)(par6 - 2), (float)(par7 + 3), -3.0F + this.zLevel); @@ -71,7 +71,7 @@ { GL11.glDisable(GL11.GL_LIGHTING); - par2RenderEngine.bindTexture(par2RenderEngine.getTexture("/gui/items.png")); -+ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(ForgeHooksClient.getTexture("/gui/items.png", Item.itemsList[par3]))); ++ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(Item.itemsList[par3].getTextureFile())); - for (var8 = 0; var8 <= 1; ++var8) + for (var8 = 0; var8 < Item.itemsList[par3].getRenderPasses(par4); ++var8) @@ -83,12 +83,12 @@ if (par3 < 256) { - par2RenderEngine.bindTexture(par2RenderEngine.getTexture("/terrain.png")); -+ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(ForgeHooksClient.getTexture("/terrain.png", Block.blocksList[par3]))); ++ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(Block.blocksList[par3].getTextureFile())); } else { - par2RenderEngine.bindTexture(par2RenderEngine.getTexture("/gui/items.png")); -+ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(ForgeHooksClient.getTexture("/gui/items.png", Item.itemsList[par3]))); ++ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(Item.itemsList[par3].getTextureFile())); } var8 = Item.itemsList[par3].getColorFromDamage(par4, 0);