Posted October 30, 201410 yr The item SHOULD have the creators name on hover, but there is no information when I hover over the Item package com.bugzoo.FinancialMod; import java.util.List; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; public class ItemCreditCard extends Item { public ItemCreditCard(){ setMaxStackSize(1); setUnlocalizedName("CreditCard"); setCreativeTab(FinancialMod.financialTab); } @Override public void onCreated(ItemStack itemStack, World par2World, EntityPlayer player) { itemStack.stackTagCompound = new NBTTagCompound(); itemStack.stackTagCompound.setString("owner", player.PERSISTED_NBT_TAG); } public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean par4) { if (itemStack.stackTagCompound != null) { String owner = itemStack.stackTagCompound.getString("owner"); int code = itemStack.stackTagCompound.getInteger("code"); list.add("owner: " + owner); } } }
October 30, 201410 yr Author You are not saving the username of the player, why are you saving a random constant to your NBT data? Im not sure on how to get the players username
October 30, 201410 yr Author You shouldn't be storing the username, store the UUID of the player. Usernames will be able to change soon. And how do I get the UUID
October 30, 201410 yr "And how do I get the UUID" "I got it, I should have just done .getDisplayName()" Big nope. .getDisplayName() is the name ingame, it's not UUID. To save UUID in NBT use this: itemStack.stackTagCompound.setLong("muuid", player.getUniqueID().getMostSignificantBits()); itemStack.stackTagCompound.setLong("luuid", player.getUniqueID().getLeastSignificantBits()); 1.7.10 is no longer supported by forge, you are on your own.
October 30, 201410 yr Author "And how do I get the UUID" "I got it, I should have just done .getDisplayName()" Big nope. .getDisplayName() is the name ingame, it's not UUID. To save UUID in NBT use this: itemStack.stackTagCompound.setLong("muuid", player.getUniqueID().getMostSignificantBits()); itemStack.stackTagCompound.setLong("luuid", player.getUniqueID().getLeastSignificantBits()); I wanted to get the ingame name, I guess I just didn't explain it right
October 30, 201410 yr Author I wanted to get the ingame name, I guess I just didn't explain it right if you use getDisplayName your Item will store a snapshot of the current name. It can change in future versions of Minecraft. And when the name change addition gets made, I will update the code
October 30, 201410 yr Dude, do whatever you want, just know consequences: If you create an ItemStack with Tag containing current player name: 1. After updating: - Ingame nicks WILL be changeable, if you assign ingame name to item and someone changes it (nick), the item will be corrupted (in a way) - e.g if you make "Soulbound" items the owner will no longer be applicable. - Converting ("I will update the code") ItemStacks with ingame nick in Tag will not be just easily updateable - you will have to make converter that would remove old tags and assign new ones. If only this would be this easy - it's not. Not all ItemStacks are loaded from HDD when you load your world. All this will lead to total break between versions (not compatible worlds -> all old items dissappearing or something and ofc. a lot of corrupted data). Use the way I wrote in post before and then just read those least and most significant bits convert them to player (getPlayerByUUID or something similar) and get his ingame name. 1.7.10 is no longer supported by forge, you are on your own.
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.