Posted October 5, 20159 yr Good day! I have a minor problem which I cant seem to be able to fix. I have an onItemRightClick method with which I open an inventory. I also have a "security" lock, which makes only the player who creates the item be able to open it, and when you try to open the inventory and it doesn't belong to you, it writes a client side text message in the chat. But the problem is that it gets written twice in the chat. Here's the code of the Item: package tornith.tmod; import java.util.List; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class ItemWallet extends Item { public String walletOwner; public ItemWallet(){ // ItemStacks that store an NBT Tag Compound are limited to stack size of 1 this.maxStackSize = 1; } @SideOnly(Side.CLIENT) @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List tooltip, boolean advanced){ } @Override public void onCreated(ItemStack itemstack, World world, EntityPlayer player) { if(itemstack.getTagCompound() == null){ itemstack.setTagCompound(new NBTTagCompound()); } NBTTagCompound nbt = new NBTTagCompound(); nbt.setString("Owner", player.getName()); itemstack.getTagCompound().setTag("WalletOwner", nbt); itemstack.setStackDisplayName(EnumChatFormatting.AQUA + player.getName() + "'s Wallet"); } @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entity) { EntityPlayer player = (EntityPlayer) entity; if(itemstack.getTagCompound() != null){ if(itemstack.getTagCompound().hasKey("WalletOwner")){ NBTTagCompound nbt = (NBTTagCompound) itemstack.getTagCompound().getTag("WalletOwner"); walletOwner = nbt.getString("Owner"); } } if (walletOwner == player.getName()){ if (!world.isRemote && entity instanceof EntityPlayer){ if(!player.isSneaking()){ player.openGui(TMod.instance, TMod.ItemInventoryGuiIndex, world, (int) player.posX, (int) player.posY, (int) player.posZ); }} } else if (walletOwner == ""){ if (!world.isRemote && entity instanceof EntityPlayer){ if(!player.isSneaking()){ player.openGui(TMod.instance, TMod.ItemInventoryGuiIndex, world, (int) player.posX, (int) player.posY, (int) player.posZ); }} if(itemstack.getTagCompound() == null){ itemstack.setTagCompound(new NBTTagCompound()); } NBTTagCompound nbt = new NBTTagCompound(); nbt.setString("Owner", player.getName()); itemstack.getTagCompound().setTag("WalletOwner", nbt); itemstack.setStackDisplayName(EnumChatFormatting.AQUA + player.getName() + "'s Wallet"); } else if (walletOwner != player.getName()){ writeInChat("You can't open wallets that do not belong to you!", entity); } else{ System.out.println("Error when openning the inventory: Wallet"); } return itemstack; } @SideOnly(Side.CLIENT) public void writeInChat(String string, EntityPlayer player){ ChatComponentText component = new ChatComponentText(string); player.addChatComponentMessage(component); } public void writeToNBT(NBTTagCompound tagcompound) { } public void readfromNBT(NBTTagCompound tagcompound) { } @Override public int getMaxItemUseDuration(ItemStack itemstack) { return 1; } } Thank you for your help!
October 5, 20159 yr #onItemRightClick is called on both client and server - only send the chat on one side or the other by checking if the world is remote or not: if (world.isRemote) { // on client } else { // on server } EDIT: Also, you are just asking to crash your game by putting @SideOnly(Side.CLIENT) above that method - I suggest you remove it, as it doesn't do what you think it does. http://i.imgur.com/NdrFdld.png[/img]
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.