All Items and Blocks now implement ITextureProvider, and have a setTextureFile(String) function, to support cleaner code in Mods and in Forge.

This commit is contained in:
LexManos 2012-06-06 06:49:15 -07:00
parent fde49241fa
commit 1d40d87f0c
6 changed files with 100 additions and 67 deletions

View File

@ -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();

View File

@ -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");

View File

@ -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;
+ }
}

View File

@ -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";
+ }
+ }
}

View File

@ -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;

View File

@ -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);