I have fixed that error with packets. Yeah here is my code:
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9)
{
if(!world.isRemote){
TileEntityTable par1tileEntity = (TileEntityTable)world.getBlockTileEntity(x, y, z);
if (player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() == net.woodworks.common.WoodworksCommonProxy.itemModCloth && par1tileEntity.getState() == 0)
{
int par1ItemDamage = player.getCurrentEquippedItem().getItemDamage();
par1tileEntity.setState(par1ItemDamage + 1);
world.notifyBlockChange(x, y, z, this.blockID);
player.inventory.decrStackSize(player.inventory.currentItem, 1);
player.worldObj.playSoundAtEntity(player, "dig.cloth", 1.0F, 1.0F);
return true;
}
else if(player.getCurrentEquippedItem().getItem() != net.woodworks.common.WoodworksCommonProxy.itemModCloth && par1tileEntity.getState() != 0){
int par1ItemDamage = par1tileEntity.getState();
dropItemStack(new ItemStack(net.woodworks.common.WoodworksCommonProxy.itemModCloth, 1, par1ItemDamage-1), world, x, y, z);
par1tileEntity.setState(0);
world.notifyBlockChange(x, y, z, this.blockID);
player.worldObj.playSoundAtEntity(player, "dig.cloth", 1.0F, 1.0F);
return true;
}
else if(player.getCurrentEquippedItem().getItem() == net.woodworks.common.WoodworksCommonProxy.itemModCloth && par1tileEntity.getState() != 0){
int par1ItemDamage = player.getCurrentEquippedItem().getItemDamage();
int par1State = par1tileEntity.getState();
if(par1ItemDamage != par1State-1){
player.inventory.decrStackSize(player.inventory.currentItem, 1);
dropItemStack(new ItemStack(net.woodworks.common.WoodworksCommonProxy.itemModCloth, 1, par1State-1), world, x, y, z);
par1tileEntity.setState(par1ItemDamage + 1);
world.notifyBlockChange(x, y, z, this.blockID);
player.worldObj.playSoundAtEntity(player, "dig.cloth", 1.0F, 1.0F);
return true;
}
}
else if(par1tileEntity.getState() == 1 && player.getCurrentEquippedItem().getItem() == Item.dyePowder){
int par1ItemDamage = player.getCurrentEquippedItem().getItemDamage();
player.inventory.decrStackSize(player.inventory.currentItem, 1);
par1tileEntity.setState(par1ItemDamage +1);
world.notifyBlockChange(x, y, z, this.blockID);
player.worldObj.playSoundAtEntity(player, "dig.cloth", 1.0F, 1.0F);
return true;
}
}
return true;
}
However the textures only change after you rejoin the world.
EDIT: I threw a bunch of this rerender methods(check to new code) and now it rerenders after clicking right click 2 times with the same item. Any ideas now?
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9)
{
if(!world.isRemote){
TileEntityTable par1tileEntity = (TileEntityTable)world.getBlockTileEntity(x, y, z);
if (player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() == net.woodworks.common.WoodworksCommonProxy.itemModCloth && par1tileEntity.getState() == 0)
{
int par1ItemDamage = player.getCurrentEquippedItem().getItemDamage();
par1tileEntity.setState(par1ItemDamage + 1);
world.notifyBlockChange(x, y, z, this.blockID);
player.worldObj.markBlockForRenderUpdate(x, y, z);
player.inventory.decrStackSize(player.inventory.currentItem, 1);
player.worldObj.playSoundAtEntity(player, "dig.cloth", 1.0F, 1.0F);
return true;
}
else if(player.getCurrentEquippedItem().getItem() != net.woodworks.common.WoodworksCommonProxy.itemModCloth && par1tileEntity.getState() != 0){
int par1ItemDamage = par1tileEntity.getState();
dropItemStack(new ItemStack(net.woodworks.common.WoodworksCommonProxy.itemModCloth, 1, par1ItemDamage-1), world, x, y, z);
par1tileEntity.setState(0);
world.notifyBlockChange(x, y, z, this.blockID);
player.worldObj.markBlockForRenderUpdate(x, y, z);
player.worldObj.playSoundAtEntity(player, "dig.cloth", 1.0F, 1.0F);
return true;
}
else if(player.getCurrentEquippedItem().getItem() == net.woodworks.common.WoodworksCommonProxy.itemModCloth && par1tileEntity.getState() != 0){
int par1ItemDamage = player.getCurrentEquippedItem().getItemDamage();
int par1State = par1tileEntity.getState();
if(par1ItemDamage != par1State-1){
player.inventory.decrStackSize(player.inventory.currentItem, 1);
dropItemStack(new ItemStack(net.woodworks.common.WoodworksCommonProxy.itemModCloth, 1, par1State-1), world, x, y, z);
par1tileEntity.setState(par1ItemDamage + 1);
world.notifyBlockChange(x, y, z, this.blockID);
player.worldObj.markBlockForRenderUpdate(x, y, z);
player.worldObj.playSoundAtEntity(player, "dig.cloth", 1.0F, 1.0F);
return true;
}
}
else if(par1tileEntity.getState() == 1 && player.getCurrentEquippedItem().getItem() == Item.dyePowder){
int par1ItemDamage = player.getCurrentEquippedItem().getItemDamage();
player.inventory.decrStackSize(player.inventory.currentItem, 1);
par1tileEntity.setState(par1ItemDamage +1);
world.notifyBlockChange(x, y, z, this.blockID);
player.worldObj.markBlockForRenderUpdate(x, y, z);
player.worldObj.playSoundAtEntity(player, "dig.cloth", 1.0F, 1.0F);
return true;
}
}
world.markBlockForUpdate(x,y,z);
world.notifyBlockChange(x, y, z, this.blockID);
player.worldObj.markBlockForRenderUpdate(x, y, z);
Minecraft.getMinecraft().renderGlobal.markBlockForRenderUpdate(x, y, z);
return true;
}
EDIT2: Got it to work! I will post my final code later tonight (I need to rewrite some things) so everyone with this problem can use it! Thank you for your help Draco!
EDIT3: Server crashes now!
EDIT4: Code works but it needs some serious rewriting, I'll be back in a few.