So Im updating some of my code for my Decorative Chimney Mod and now I cant seem to get my chimneys textures to change beyond the default texture. Can someone help me please. The code is modeled after the skull code from vanilla minecraft. Im getting no errors, the textures just dont seem to change based on the item damage used to place them. I have the feeling its something basic and simple. Here is the code.
public class ItemBlockChimney1 extends Item
{
public static Icon[] IconArray;
public static String[] IconNames = {"stone","stonebrick","dirt","brick","bedrock","sand","gravel","coal_block","iron_block","gold_block",
"lapis_block","diamond_block","redstone_Block","planks_birch","planks_jungle","planks_oak","planks_spruce","wool_colored_black","wool_colored_blue","wool_colored_brown",
"wool_colored_cyan","wool_colored_gray","wool_colored_green","wool_colored_light_blue","wool_colored_lime","wool_colored_magenta","wool_colored_orange","wool_colored_pink","wool_colored_purple","wool_colored_red",
"wool_colored_silver","wool_colored_white","wool_colored_yellow"};
public ItemBlockChimney1(int ID)
{
super(ID);
setMaxDamage(0);
setHasSubtypes(true);
setUnlocalizedName("itemChimney2");
setCreativeTab(DecorativeChimneyCore.tabChimney);
}
public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List)
{
for (int j = 0; j < 33; ++j)
{
par3List.add(new ItemStack(this, 1, j));
}
}
public int getMetadata(int par1)
{
return par1;
}
@SideOnly(Side.CLIENT)
public Icon getIconFromDamage(int par1) //Gets the texture
{
if (par1 < 0 || par1 >= IconArray.length)
{
par1 = 0;
}
return this.IconArray[par1];
}
public String getUnlocalizedName(ItemStack par1) //Get's the item incode name from an itemstack
{
int i = par1.getItemDamage();
if (i < 0 || i >= IconNames.length)
{
i = 0;
}
return super.getUnlocalizedName() + "." + IconNames; }
public void registerIcons(IconRegister par1IconRegister)
{
IconArray = new Icon[33];
for(int i = 0; i < IconArray.length; i++)
{
ItemStack itemStack = new ItemStack(DecorativeChimneyCore.itemChimney1, 64, i);
public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
{
//par7 = side
if (par3World.isRemote)
{
return true;
}
else
{
byte b0 = 0;
byte b1 = 0;
byte b2 = 0;
if (par7 == 0)
{
b1 = -1;
}
if (par7 == 1)
{
b1 = 1;
}
if (par7 == 2)
{
b2 = -1;
}
if (par7 == 3)
{
b2 = 1;
}
if (par7 == 4)
{
b0 = -1;
}
if (par7 == 5)
{
b0 = 1;
}
public void renderModelAt(float d, float d1, float d2, int par4, float par5, int i)
{
switch (i) // the good part. get's your block multiple textures
{
case 0:
default:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1W.png")); // bindTextureByName + the path to your image. for the block that you gave damage number 0
break;
case 1:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1WG.png")); // and so on and so on
break;
case 2:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1WB.png"));
break;
case 3:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1Br.png"));
break;
case 4:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1GW.png"));
break;
case 5:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1G.png"));
break;
case 6:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1GB.png"));
break;
case 7:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1S.png"));
break;
case 8:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1BW.png"));
break;
case 9:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1BG.png"));
break;
case 10:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1B.png"));
break;
case 11:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1CS.png"));
break;
case 12:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1Wo.png"));
break;
case 13:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1E.png"));
break;
case 14:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1Go.png"));
break;
case 15:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/TEST.png"));
}
GL11.glPushMatrix(); //start
GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glTranslatef((float)d + 0.5F, (float)d1 + 1.5F, (float)d2 + 0.5F); //size
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glScalef(1.0F, -1.0F, -1.0F); //if you read this comment out this line and you can see what happens
GL11.glEnable(GL11.GL_ALPHA_TEST);
model.renderModel(0.0625F); //renders and yes 0.0625 is a random number
GL11.glPopMatrix(); //end
Can anyone offer a solution? Ive scoured the code at least a dozen times and cant figure out whats wrong. Please could someone look over it for me and see if you see anything. Basically the item is suppose to place a block with tile entity and up date the tile entitys type in to the same as the damage of the item being used to place it. They tile entity render is suppose to take the til entitys type and apply a switch for the texture of the model. Its only apply the first texture.
Block
import java.util.List;
import java.util.Random;
import DecorativeChimney.CommonProxy;
import DecorativeChimney.DecorativeChimneyCore;
import DecorativeChimney.Items.ItemBlockChimney1;
import DecorativeChimney.TileEntitys.TileEntityChimney1;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemSkull;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.Icon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class BlockChimney1 extends BlockContainer
{
public BlockChimney1(int id, Class class1)
{
super(id, Material.rock);
setHardness(5.0F);
setResistance(1.0F);
setStepSound(Block.soundStoneFootstep);
setUnlocalizedName("blockChimney1");
}
public int idDropped(int i, Random par2Random, int j)
{
return blockID;
}
public int damageDropped(int metadata)
{
return metadata;
}
public int quantityDropped(Random random)
{
return 1;
}
public boolean isOpaqueCube()
{
return false;
}
public boolean renderAsNormalBlock()
{
return false;
}
public int getRenderType()
{
return DecorativeChimneyCore.blockChimney1ModelID;
}
public static void triggerSmoke(World world, int i, int j, int k, Random random)
{
float f = (float)i + 0.5F; //Location Width
float f1 = (float)j + 0.8125F + (random.nextFloat() * 6F) / 10F; //Location Height
float f2 = (float)k + 0.5F; //Location Length
float f3 = random.nextFloat() * 0.6F - 0.3F;
world.spawnParticle("smoke", f, f1, f2 + f3, 0.0D, 0.0D, 0.0D);
world.spawnParticle("smoke", f, f1, f2 + f3, 0.0D, 0.0D, 0.0D);
world.spawnParticle("smoke", f, f1, f2 + f3, 0.0D, 0.0D, 0.0D);
world.spawnParticle("largesmoke", f, f1, f2 + f3, 0.0D, 0.0D, 0.0D);
world.spawnParticle("largesmoke", f, f1, f2 + f3, 0.0D, 0.0D, 0.0D);
world.spawnParticle("largesmoke", f, f1, f2 + f3, 0.0D, 0.0D, 0.0D);
}
public boolean getBlocksMovement(IBlockAccess iblockaccess, int i, int j, int k)
{
return false;
}
public void setBlockBoundsBasedOnState(IBlockAccess iBlockAccess, int i, int j, int k)
{
setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.75F, 1.0F);
}
public void addCollidingBlockToList(World par1World, int par2, int par3, int par4, AxisAlignedBB par5AxisAlignedBB, List par6List, Entity par7Entity)
{
this.setBlockBoundsBasedOnState(par1World, par2, par3, par4);
super.addCollisionBoxesToList(par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity);
}
@SideOnly(Side.CLIENT)
public String getItemIconName()
{
return this.getTextureName() + "_" + ItemBlockChimney1.IconNames[0];
}
public TileEntity createNewTileEntity(World world)
{
return new TileEntityChimney1();
}
private Class anEntityClass;
}
import java.util.List;
import DecorativeChimney.DecorativeChimneyCore;
import DecorativeChimney.Blocks.BlockChimney1;
import DecorativeChimney.TileEntitys.TileEntityChimney1;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Icon;
import net.minecraft.world.World;
public class ItemBlockChimney1 extends Item
{
public static Icon[] IconArray;
public static String[] IconNames = {"stone","stonebrick","dirt","brick","bedrock","sand","gravel","coal_block","iron_block","gold_block",
"lapis_block","diamond_block","redstone_Block","planks_birch","planks_jungle","planks_oak","planks_spruce","wool_colored_black","wool_colored_blue","wool_colored_brown",
"wool_colored_cyan","wool_colored_gray","wool_colored_green","wool_colored_light_blue","wool_colored_lime","wool_colored_magenta","wool_colored_orange","wool_colored_pink","wool_colored_purple","wool_colored_red",
"wool_colored_silver","wool_colored_white","wool_colored_yellow"};
public ItemBlockChimney1(int ID)
{
super(ID);
setMaxDamage(0);
setHasSubtypes(true);
setUnlocalizedName("itemChimney2");
setCreativeTab(DecorativeChimneyCore.tabChimney);
}
public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List)
{
for (int j = 0; j < 33; ++j)
{
par3List.add(new ItemStack(this, 1, j));
}
}
public int getMetadata(int par1)
{
return par1;
}
@SideOnly(Side.CLIENT)
public Icon getIconFromDamage(int par1) //Gets the texture
{
if (par1 < 0 || par1 >= IconArray.length)
{
par1 = 0;
}
return this.IconArray[par1];
}
public String getUnlocalizedName(ItemStack par1) //Get's the item incode name from an itemstack
{
int i = par1.getItemDamage();
if (i < 0 || i >= IconNames.length)
{
i = 0;
}
return super.getUnlocalizedName() + "." + IconNames; }
public void registerIcons(IconRegister par1IconRegister)
{
IconArray = new Icon[33];
for(int i = 0; i < IconArray.length; i++)
{
ItemStack itemStack = new ItemStack(DecorativeChimneyCore.itemChimney1, 64, i);
IconArray = par1IconRegister.registerIcon(DecorativeChimneyCore.modid + ":" + IconNames[itemStack.getItemDamage()]);
}
}
@Override
public boolean hasEffect(ItemStack par1ItemStack)
{
return false; //true to add enchanted effect to item.
}
@Override
@SideOnly(Side.CLIENT)
public EnumRarity getRarity(ItemStack par1ItemStack)
{
return EnumRarity.rare;
//common=white
//uncommon=yellow
//rare=blue
//epic=purple
}
public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
{
//par7 = side
if (par3World.isRemote)
{
return true;
}
else
{
byte b0 = 0;
byte b1 = 0;
byte b2 = 0;
if (par7 == 0)
{
b1 = -1;
}
if (par7 == 1)
{
b1 = 1;
}
if (par7 == 2)
{
b2 = -1;
}
if (par7 == 3)
{
b2 = 1;
}
if (par7 == 4)
{
b0 = -1;
}
if (par7 == 5)
{
b0 = 1;
}
if (!par2EntityPlayer.canPlayerEdit(par4, par5, par6, par7, par1ItemStack))
{
return false;
}
else if (!par3World.isAirBlock(par4 + b0, par5 + b1, par6 + b2))
{
return false;
}
else
{
BlockChimney1 blockChimney1 = (BlockChimney1)DecorativeChimneyCore.blockChimney1;
par3World.setBlock(par4 + b0, par5 + b1, par6 + b2, blockChimney1.blockID, par7, 2);
TileEntity tileentity = par3World.getBlockTileEntity(par4, par5, par6);
if(tileentity != null && tileentity instanceof TileEntityChimney1)
{
((TileEntityChimney1)tileentity).setChimneyType(par1ItemStack.getItemDamage());
}
--par1ItemStack.stackSize;
return true;
}
}
}
}
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.INetworkManager;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.Packet132TileEntityData;
import net.minecraft.tileentity.TileEntity;
public class TileEntityChimney1 extends TileEntity
{
private int chimneyType;
private int chimneyRotation;
@Override
public void writeToNBT(NBTTagCompound par1NBTTagCompound)
{
super.writeToNBT(par1NBTTagCompound);
par1NBTTagCompound.setInteger("Type", (int)(this.chimneyType & 255));
par1NBTTagCompound.setInteger("Rot", (int)(this.chimneyRotation & 255));
}
@Override
public void readFromNBT(NBTTagCompound par1NBTTagCompound)
{
super.readFromNBT(par1NBTTagCompound);
this.chimneyType = par1NBTTagCompound.getInteger("Type");
this.chimneyRotation = par1NBTTagCompound.getInteger("Rot");
}
public void onDataPacket(INetworkManager net, Packet132TileEntityData packet)
{
readFromNBT(packet.data);
}
public Packet getDescriptionPacket()
{
NBTTagCompound nbttagcompound = new NBTTagCompound();
this.writeToNBT(nbttagcompound);
return new Packet132TileEntityData(this.xCoord, this.yCoord, this.zCoord, 4, nbttagcompound);
}
public void setChimneyType(int par1)
{
this.chimneyType = par1;
}
public int getChimneyType()
{
return this.chimneyType;
}
public void setChimneyRotation(int par1)
{
this.chimneyRotation = par1;
}
@SideOnly(Side.CLIENT)
public int getChimneyRotation()
{
return this.chimneyRotation;
}
}
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntitySkullRenderer;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import DecorativeChimney.Models.ModelChimney1;
import DecorativeChimney.TileEntitys.TileEntityChimney1;
public class TileEntityChimney1Render extends TileEntitySpecialRenderer
{
private ModelChimney1 model = new ModelChimney1();
public static TileEntityChimney1Render chimneyRenderer;
public void setTileEntityRenderer(TileEntityRenderer par1TileEntityRenderer)
{
super.setTileEntityRenderer(par1TileEntityRenderer);
chimneyRenderer = this;
}
public void renderAModelAt(TileEntityChimney1 tile, double d, double d1, double d2, float f)
{
this.renderModelAt((float)d, (float)d1, (float)d2, tile.getBlockMetadata() & 7, (float)(tile.getChimneyRotation() * 360) / 4.0F, tile.getChimneyType());
}
public void renderModelAt(float d, float d1, float d2, int par4, float par5, int i)
{
switch (i) // the good part. get's your block multiple textures
{
case 0:
default:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1W.png")); // bindTextureByName + the path to your image. for the block that you gave damage number 0
break;
case 1:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1WG.png")); // and so on and so on
break;
case 2:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1WB.png"));
break;
case 3:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1Br.png"));
break;
case 4:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1GW.png"));
break;
case 5:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1G.png"));
break;
case 6:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1GB.png"));
break;
case 7:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1S.png"));
break;
case 8:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1BW.png"));
break;
case 9:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1BG.png"));
break;
case 10:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1B.png"));
break;
case 11:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1CS.png"));
break;
case 12:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1Wo.png"));
break;
case 13:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1E.png"));
break;
case 14:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/Chimney1Go.png"));
break;
case 15:
tileEntityRenderer.renderEngine.bindTexture(new ResourceLocation("decorativechimney:textures/TEST.png"));
}
GL11.glPushMatrix(); //start
GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glTranslatef((float)d + 0.5F, (float)d1 + 1.5F, (float)d2 + 0.5F); //size
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glScalef(1.0F, -1.0F, -1.0F); //if you read this comment out this line and you can see what happens
GL11.glEnable(GL11.GL_ALPHA_TEST);
model.renderModel(0.0625F); //renders and yes 0.0625 is a random number
GL11.glPopMatrix(); //end
}
public void renderTileEntityAt(TileEntity tileentity, double d, double d1, double d2, float f)
{
renderAModelAt((TileEntityChimney1) tileentity, d, d1, d2, f); //where to render
}
}