From 6d2e1337b15092266e01a92d320c0c78e66d5f00 Mon Sep 17 00:00:00 2001 From: Pahimar Date: Fri, 27 May 2016 11:10:38 -0400 Subject: [PATCH] Refactor NBTHelper. When NBTHelper is used to retrieve data from an ItemStacks NBTTagCompound it will also verify that the key it finds is of the expected data type (returns null otherwise). Sets in NBTHelper now also verify inputs. Changed ItemAlchemicalBag to check the players inventory for other alchemical bags that have the same UUID as the one being opened. If a duplicate is found the duplicates UUID is changed to a new random one. Closes #800. --- .../gui/inventory/GuiAlchemicalBag.java | 2 +- .../handler/ItemTooltipEventHandler.java | 39 +-- .../ee3/inventory/ContainerAlchemicalBag.java | 2 +- .../ee3/inventory/InventoryAlchemicalBag.java | 37 +-- .../pahimar/ee3/item/ItemAlchemicalBag.java | 41 ++- .../com/pahimar/ee3/item/ItemMiniumStone.java | 2 +- .../java/com/pahimar/ee3/util/ItemHelper.java | 10 +- .../java/com/pahimar/ee3/util/NBTHelper.java | 300 +++++++++--------- 8 files changed, 217 insertions(+), 216 deletions(-) diff --git a/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAlchemicalBag.java b/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAlchemicalBag.java index 38429a6c..01066284 100644 --- a/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAlchemicalBag.java +++ b/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAlchemicalBag.java @@ -88,7 +88,7 @@ public class GuiAlchemicalBag extends GuiContainer { if (itemStack != null) { - if (NBTHelper.hasTag(itemStack, Names.NBT.ALCHEMICAL_BAG_GUI_OPEN)) + if (NBTHelper.hasKey(itemStack, Names.NBT.ALCHEMICAL_BAG_GUI_OPEN)) { NBTHelper.removeTag(itemStack, Names.NBT.ALCHEMICAL_BAG_GUI_OPEN); } diff --git a/src/main/java/com/pahimar/ee3/client/handler/ItemTooltipEventHandler.java b/src/main/java/com/pahimar/ee3/client/handler/ItemTooltipEventHandler.java index 4d0d6daa..b74dcbfd 100644 --- a/src/main/java/com/pahimar/ee3/client/handler/ItemTooltipEventHandler.java +++ b/src/main/java/com/pahimar/ee3/client/handler/ItemTooltipEventHandler.java @@ -24,16 +24,9 @@ import org.lwjgl.input.Keyboard; import java.text.DecimalFormat; import java.util.UUID; -/** - * Equivalent-Exchange-3 - *

- * ItemTooltipEventHandler - * - * @author pahimar - */ @SideOnly(Side.CLIENT) -public class ItemTooltipEventHandler -{ +public class ItemTooltipEventHandler { + private static DecimalFormat energyValueDecimalFormat = new DecimalFormat("###,###,###,###,###.###"); @SubscribeEvent @@ -67,38 +60,28 @@ public class ItemTooltipEventHandler } } } - else - { + else { event.toolTip.add("No Exchange Energy value"); // TODO Localize } } - if (((Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) && (event.entityPlayer != null && event.entityPlayer.openContainer instanceof ContainerResearchStation))) - { - if (PlayerKnowledgeRegistryProxy.doesPlayerKnow(event.entityPlayer, event.itemStack)) - { + if (((Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) && (event.entityPlayer != null && event.entityPlayer.openContainer instanceof ContainerResearchStation))) { + + if (PlayerKnowledgeRegistryProxy.doesPlayerKnow(event.entityPlayer, event.itemStack)) { event.toolTip.add("You know how to transmute this"); // TODO Localize with better phrasing } } - if (event.itemStack.getItem() instanceof IOwnable) - { + if (event.itemStack.getItem() instanceof IOwnable) { + UUID playerUUID = ItemHelper.getOwnerUUID(event.itemStack); - if (playerUUID != null && UsernameCache.containsUUID(playerUUID)) - { + + if (playerUUID != null && UsernameCache.containsUUID(playerUUID)) { event.toolTip.add(StatCollector.translateToLocalFormatted(Messages.Tooltips.ITEM_BELONGS_TO, UsernameCache.getLastKnownUsername(playerUUID))); } - else if (ItemHelper.hasOwnerName(event.itemStack)) - { + else if (ItemHelper.hasOwnerName(event.itemStack)) { event.toolTip.add(StatCollector.translateToLocalFormatted(Messages.Tooltips.ITEM_BELONGS_TO, ItemHelper.getOwnerName(event.itemStack))); } - else - { - if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) - { - event.toolTip.add(StatCollector.translateToLocal(Messages.Tooltips.ITEM_BELONGS_TO_NO_ONE)); - } - } } } } diff --git a/src/main/java/com/pahimar/ee3/inventory/ContainerAlchemicalBag.java b/src/main/java/com/pahimar/ee3/inventory/ContainerAlchemicalBag.java index ae729502..b1521c6c 100644 --- a/src/main/java/com/pahimar/ee3/inventory/ContainerAlchemicalBag.java +++ b/src/main/java/com/pahimar/ee3/inventory/ContainerAlchemicalBag.java @@ -160,7 +160,7 @@ public class ContainerAlchemicalBag extends ContainerEE { if (itemStack != null) { - if (NBTHelper.hasTag(itemStack, Names.NBT.ALCHEMICAL_BAG_GUI_OPEN)) + if (NBTHelper.hasKey(itemStack, Names.NBT.ALCHEMICAL_BAG_GUI_OPEN)) { NBTHelper.removeTag(itemStack, Names.NBT.ALCHEMICAL_BAG_GUI_OPEN); } diff --git a/src/main/java/com/pahimar/ee3/inventory/InventoryAlchemicalBag.java b/src/main/java/com/pahimar/ee3/inventory/InventoryAlchemicalBag.java index e2f711db..7086acd2 100644 --- a/src/main/java/com/pahimar/ee3/inventory/InventoryAlchemicalBag.java +++ b/src/main/java/com/pahimar/ee3/inventory/InventoryAlchemicalBag.java @@ -40,29 +40,27 @@ public class InventoryAlchemicalBag implements IInventory, INBTTaggable readFromNBT(itemStack.getTagCompound()); } - public void onGuiSaved(EntityPlayer entityPlayer) - { + public void onGuiSaved(EntityPlayer entityPlayer) { + parentItemStack = findParentItemStack(entityPlayer); - if (parentItemStack != null) - { + if (parentItemStack != null) { save(); } } - public ItemStack findParentItemStack(EntityPlayer entityPlayer) - { - if (NBTHelper.hasUUID(parentItemStack)) - { + public ItemStack findParentItemStack(EntityPlayer entityPlayer) { + + if (NBTHelper.hasUUID(parentItemStack)) { + UUID parentItemStackUUID = new UUID(parentItemStack.getTagCompound().getLong(Names.NBT.UUID_MOST_SIG), parentItemStack.getTagCompound().getLong(Names.NBT.UUID_LEAST_SIG)); - for (int i = 0; i < entityPlayer.inventory.getSizeInventory(); i++) - { + + for (int i = 0; i < entityPlayer.inventory.getSizeInventory(); i++) { + ItemStack itemStack = entityPlayer.inventory.getStackInSlot(i); - if (NBTHelper.hasUUID(itemStack)) - { - if (itemStack.getTagCompound().getLong(Names.NBT.UUID_MOST_SIG) == parentItemStackUUID.getMostSignificantBits() && itemStack.getTagCompound().getLong(Names.NBT.UUID_LEAST_SIG) == parentItemStackUUID.getLeastSignificantBits()) - { + if (NBTHelper.hasUUID(itemStack)) { + if (itemStack.getTagCompound().getLong(Names.NBT.UUID_MOST_SIG) == parentItemStackUUID.getMostSignificantBits() && itemStack.getTagCompound().getLong(Names.NBT.UUID_LEAST_SIG) == parentItemStackUUID.getLeastSignificantBits()) { return itemStack; } } @@ -72,17 +70,16 @@ public class InventoryAlchemicalBag implements IInventory, INBTTaggable return null; } - public boolean matchesUUID(UUID uuid) - { + public boolean matchesUUID(UUID uuid) { return NBTHelper.hasUUID(parentItemStack) && parentItemStack.getTagCompound().getLong(Names.NBT.UUID_LEAST_SIG) == uuid.getLeastSignificantBits() && parentItemStack.getTagCompound().getLong(Names.NBT.UUID_MOST_SIG) == uuid.getMostSignificantBits(); } - public void save() - { + public void save() { + NBTTagCompound nbtTagCompound = parentItemStack.getTagCompound(); - if (nbtTagCompound == null) - { + if (nbtTagCompound == null) { + nbtTagCompound = new NBTTagCompound(); UUID uuid = UUID.randomUUID(); diff --git a/src/main/java/com/pahimar/ee3/item/ItemAlchemicalBag.java b/src/main/java/com/pahimar/ee3/item/ItemAlchemicalBag.java index 6e2b85b6..eada4c25 100644 --- a/src/main/java/com/pahimar/ee3/item/ItemAlchemicalBag.java +++ b/src/main/java/com/pahimar/ee3/item/ItemAlchemicalBag.java @@ -1,7 +1,10 @@ package com.pahimar.ee3.item; import com.pahimar.ee3.EquivalentExchange3; -import com.pahimar.ee3.reference.*; +import com.pahimar.ee3.reference.Colors; +import com.pahimar.ee3.reference.GUIs; +import com.pahimar.ee3.reference.Names; +import com.pahimar.ee3.reference.Textures; import com.pahimar.ee3.util.ColorHelper; import com.pahimar.ee3.util.IOwnable; import com.pahimar.ee3.util.ItemHelper; @@ -14,12 +17,12 @@ 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.ChatComponentTranslation; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import java.util.List; +import java.util.UUID; public class ItemAlchemicalBag extends ItemEE implements IOwnable { @@ -59,7 +62,7 @@ public class ItemAlchemicalBag extends ItemEE implements IOwnable { if (renderPass == 0) { - if (NBTHelper.hasTag(itemStack, Names.NBT.ALCHEMICAL_BAG_GUI_OPEN)) + if (NBTHelper.hasKey(itemStack, Names.NBT.ALCHEMICAL_BAG_GUI_OPEN)) { return icons[0]; } @@ -91,19 +94,33 @@ public class ItemAlchemicalBag extends ItemEE implements IOwnable } @Override - public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer entityPlayer) - { - if (!world.isRemote) - { - if (!ItemHelper.hasOwnerUUID(itemStack)) - { + public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer entityPlayer) { + + if (!world.isRemote) { + + // Set the owner of the bag if one doesn't exist already + if (!ItemHelper.hasOwnerUUID(itemStack)) { ItemHelper.setOwner(itemStack, entityPlayer); - entityPlayer.addChatComponentMessage(new ChatComponentTranslation(Messages.OWNER_SET_TO_SELF, new Object[]{itemStack.func_151000_E()})); } - // Set a UUID on the Alchemical Bag, if one doesn't exist already - NBTHelper.setUUID(itemStack); + // Set an UUID on the bag if one doesn't exist already + if (!NBTHelper.hasUUID(itemStack)) { + NBTHelper.setUUID(itemStack, UUID.randomUUID()); + } + // TODO Do a scan of inventory and if we find a bag with the same UUID, change it's UUID + for (int i = 0; i < entityPlayer.inventory.getSizeInventory(); i++) { + if (entityPlayer.inventory.getStackInSlot(i) != null) { + ItemStack itemStack1 = entityPlayer.inventory.getStackInSlot(i); + + if (itemStack1.getItem() instanceof ItemAlchemicalBag) { + if (NBTHelper.hasUUID(itemStack1) && NBTHelper.getUUID(itemStack).equals(NBTHelper.getUUID(itemStack1))) { + NBTHelper.setUUID(itemStack1, UUID.randomUUID()); + } + } + } + } + NBTHelper.setBoolean(itemStack, Names.NBT.ALCHEMICAL_BAG_GUI_OPEN, true); entityPlayer.openGui(EquivalentExchange3.instance, GUIs.ALCHEMICAL_BAG.ordinal(), entityPlayer.worldObj, (int) entityPlayer.posX, (int) entityPlayer.posY, (int) entityPlayer.posZ); } diff --git a/src/main/java/com/pahimar/ee3/item/ItemMiniumStone.java b/src/main/java/com/pahimar/ee3/item/ItemMiniumStone.java index eeaaea40..324e5ca0 100644 --- a/src/main/java/com/pahimar/ee3/item/ItemMiniumStone.java +++ b/src/main/java/com/pahimar/ee3/item/ItemMiniumStone.java @@ -46,7 +46,7 @@ public class ItemMiniumStone extends ItemEE implements IKeyBound @SideOnly(Side.CLIENT) public boolean hasEffect(ItemStack itemStack, int renderPass) { - return NBTHelper.hasTag(itemStack, Names.NBT.CRAFTING_GUI_OPEN) || NBTHelper.hasTag(itemStack, Names.NBT.TRANSMUTATION_GUI_OPEN); + return NBTHelper.hasKey(itemStack, Names.NBT.CRAFTING_GUI_OPEN) || NBTHelper.hasKey(itemStack, Names.NBT.TRANSMUTATION_GUI_OPEN); } @Override diff --git a/src/main/java/com/pahimar/ee3/util/ItemHelper.java b/src/main/java/com/pahimar/ee3/util/ItemHelper.java index 276eb454..9e87391a 100644 --- a/src/main/java/com/pahimar/ee3/util/ItemHelper.java +++ b/src/main/java/com/pahimar/ee3/util/ItemHelper.java @@ -56,21 +56,21 @@ public class ItemHelper { } public static boolean hasOwner(ItemStack itemStack) { - return (NBTHelper.hasTag(itemStack, Names.NBT.OWNER_UUID_MOST_SIG) && NBTHelper.hasTag(itemStack, Names.NBT.OWNER_UUID_LEAST_SIG)) || NBTHelper.hasTag(itemStack, Names.NBT.OWNER); + return (NBTHelper.hasKey(itemStack, Names.NBT.OWNER_UUID_MOST_SIG) && NBTHelper.hasKey(itemStack, Names.NBT.OWNER_UUID_LEAST_SIG)) || NBTHelper.hasKey(itemStack, Names.NBT.OWNER); } public static boolean hasOwnerUUID(ItemStack itemStack) { - return NBTHelper.hasTag(itemStack, Names.NBT.OWNER_UUID_MOST_SIG) && NBTHelper.hasTag(itemStack, Names.NBT.OWNER_UUID_LEAST_SIG); + return NBTHelper.hasKey(itemStack, Names.NBT.OWNER_UUID_MOST_SIG) && NBTHelper.hasKey(itemStack, Names.NBT.OWNER_UUID_LEAST_SIG); } public static boolean hasOwnerName(ItemStack itemStack) { - return NBTHelper.hasTag(itemStack, Names.NBT.OWNER); + return NBTHelper.hasKey(itemStack, Names.NBT.OWNER); } public static String getOwnerName(ItemStack itemStack) { - if (NBTHelper.hasTag(itemStack, Names.NBT.OWNER)) + if (NBTHelper.hasKey(itemStack, Names.NBT.OWNER)) { return NBTHelper.getString(itemStack, Names.NBT.OWNER); } @@ -80,7 +80,7 @@ public class ItemHelper { public static UUID getOwnerUUID(ItemStack itemStack) { - if (NBTHelper.hasTag(itemStack, Names.NBT.OWNER_UUID_MOST_SIG) && NBTHelper.hasTag(itemStack, Names.NBT.OWNER_UUID_LEAST_SIG)) + if (NBTHelper.hasKey(itemStack, Names.NBT.OWNER_UUID_MOST_SIG) && NBTHelper.hasKey(itemStack, Names.NBT.OWNER_UUID_LEAST_SIG)) { return new UUID(NBTHelper.getLong(itemStack, Names.NBT.OWNER_UUID_MOST_SIG), NBTHelper.getLong(itemStack, Names.NBT.OWNER_UUID_LEAST_SIG)); } diff --git a/src/main/java/com/pahimar/ee3/util/NBTHelper.java b/src/main/java/com/pahimar/ee3/util/NBTHelper.java index 1a0872d4..393f43d0 100644 --- a/src/main/java/com/pahimar/ee3/util/NBTHelper.java +++ b/src/main/java/com/pahimar/ee3/util/NBTHelper.java @@ -2,270 +2,274 @@ package com.pahimar.ee3.util; import com.pahimar.ee3.reference.Names; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.*; import java.util.UUID; -public class NBTHelper -{ - public static void clearStatefulNBTTags(ItemStack itemStack) - { - if (NBTHelper.hasTag(itemStack, Names.NBT.CRAFTING_GUI_OPEN)) - { +public class NBTHelper { + + public static void clearStatefulNBTTags(ItemStack itemStack) { + + if (NBTHelper.hasKey(itemStack, Names.NBT.CRAFTING_GUI_OPEN)) { NBTHelper.removeTag(itemStack, Names.NBT.CRAFTING_GUI_OPEN); } - else if (NBTHelper.hasTag(itemStack, Names.NBT.TRANSMUTATION_GUI_OPEN)) - { + else if (NBTHelper.hasKey(itemStack, Names.NBT.TRANSMUTATION_GUI_OPEN)) { NBTHelper.removeTag(itemStack, Names.NBT.TRANSMUTATION_GUI_OPEN); } - else if (NBTHelper.hasTag(itemStack, Names.NBT.ALCHEMICAL_BAG_GUI_OPEN)) - { + else if (NBTHelper.hasKey(itemStack, Names.NBT.ALCHEMICAL_BAG_GUI_OPEN)) { NBTHelper.removeTag(itemStack, Names.NBT.ALCHEMICAL_BAG_GUI_OPEN); } } - public static boolean hasTag(ItemStack itemStack, String keyName) - { + public static boolean hasKey(ItemStack itemStack, String keyName) { return itemStack != null && itemStack.stackTagCompound != null && itemStack.stackTagCompound.hasKey(keyName); } - public static void removeTag(ItemStack itemStack, String keyName) - { - if (itemStack.stackTagCompound != null) - { + public static void removeTag(ItemStack itemStack, String keyName) { + + if (itemStack != null && itemStack.stackTagCompound != null && keyName != null && !keyName.isEmpty()) { itemStack.stackTagCompound.removeTag(keyName); } } - public static boolean hasUUID(ItemStack itemStack) - { - return hasTag(itemStack, Names.NBT.UUID_MOST_SIG) && hasTag(itemStack, Names.NBT.UUID_LEAST_SIG); + public static boolean hasUUID(ItemStack itemStack) { + return getLong(itemStack, Names.NBT.UUID_MOST_SIG) != null && getLong(itemStack, Names.NBT.UUID_LEAST_SIG) != null; } - public static void setUUID(ItemStack itemStack) - { - initNBTTagCompound(itemStack); + public static UUID getUUID(ItemStack itemStack) { - // Set a UUID on the Alchemical Bag, if one doesn't exist already - if (!hasTag(itemStack, Names.NBT.UUID_MOST_SIG) && !hasTag(itemStack, Names.NBT.UUID_LEAST_SIG)) - { - UUID itemUUID = UUID.randomUUID(); - setLong(itemStack, Names.NBT.UUID_MOST_SIG, itemUUID.getMostSignificantBits()); - setLong(itemStack, Names.NBT.UUID_LEAST_SIG, itemUUID.getLeastSignificantBits()); + if (hasUUID(itemStack)) { + return new UUID(getLong(itemStack, Names.NBT.UUID_MOST_SIG), getLong(itemStack, Names.NBT.UUID_LEAST_SIG)); + } + + return null; + } + + public static void setUUID(ItemStack itemStack, UUID uuid) { + + if (itemStack != null) { + + initNBTTagCompound(itemStack); + + if (uuid == null) { + uuid = UUID.randomUUID(); + } + + setLong(itemStack, Names.NBT.UUID_MOST_SIG, uuid.getMostSignificantBits()); + setLong(itemStack, Names.NBT.UUID_LEAST_SIG, uuid.getLeastSignificantBits()); } } /** - * Initializes the NBT Tag Compound for the given ItemStack if it is null + * Initializes the NBT Tag Compound for the given ItemStack * * @param itemStack The ItemStack for which its NBT Tag Compound is being checked for initialization */ - private static void initNBTTagCompound(ItemStack itemStack) - { - if (itemStack.stackTagCompound == null) - { + private static void initNBTTagCompound(ItemStack itemStack) { + + if (itemStack != null && itemStack.stackTagCompound == null) { itemStack.setTagCompound(new NBTTagCompound()); } } - public static void setLong(ItemStack itemStack, String keyName, long keyValue) - { - initNBTTagCompound(itemStack); - - itemStack.stackTagCompound.setLong(keyName, keyValue); - } - // String - public static String getString(ItemStack itemStack, String keyName) - { - initNBTTagCompound(itemStack); + public static String getString(ItemStack itemStack, String keyName) { - if (!itemStack.stackTagCompound.hasKey(keyName)) - { - setString(itemStack, keyName, ""); + if (hasKey(itemStack, keyName)) { + if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagString) { + return itemStack.stackTagCompound.getString(keyName); + } } - return itemStack.stackTagCompound.getString(keyName); + return null; } - public static void setString(ItemStack itemStack, String keyName, String keyValue) - { - initNBTTagCompound(itemStack); + public static void setString(ItemStack itemStack, String keyName, String keyValue) { - itemStack.stackTagCompound.setString(keyName, keyValue); + if (itemStack != null && keyName != null && !keyName.isEmpty()) { + initNBTTagCompound(itemStack); + itemStack.stackTagCompound.setString(keyName, keyValue); + } } // boolean - public static boolean getBoolean(ItemStack itemStack, String keyName) - { - initNBTTagCompound(itemStack); + public static Boolean getBoolean(ItemStack itemStack, String keyName) { - if (!itemStack.stackTagCompound.hasKey(keyName)) - { - setBoolean(itemStack, keyName, false); + if (hasKey(itemStack, keyName)) { + if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagByte) { + itemStack.stackTagCompound.getBoolean(keyName); + } } - return itemStack.stackTagCompound.getBoolean(keyName); + return null; } - public static void setBoolean(ItemStack itemStack, String keyName, boolean keyValue) - { - initNBTTagCompound(itemStack); + public static void setBoolean(ItemStack itemStack, String keyName, boolean keyValue) { - itemStack.stackTagCompound.setBoolean(keyName, keyValue); + if (itemStack != null && keyName != null && !keyName.isEmpty()) { + initNBTTagCompound(itemStack); + itemStack.stackTagCompound.setBoolean(keyName, keyValue); + } } // byte - public static byte getByte(ItemStack itemStack, String keyName) - { - initNBTTagCompound(itemStack); + public static Byte getByte(ItemStack itemStack, String keyName) { - if (!itemStack.stackTagCompound.hasKey(keyName)) - { - setByte(itemStack, keyName, (byte) 0); + if (hasKey(itemStack, keyName)) { + if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagByte) { + return itemStack.stackTagCompound.getByte(keyName); + } } - return itemStack.stackTagCompound.getByte(keyName); + return null; } - public static void setByte(ItemStack itemStack, String keyName, byte keyValue) - { - initNBTTagCompound(itemStack); + public static void setByte(ItemStack itemStack, String keyName, byte keyValue) { - itemStack.stackTagCompound.setByte(keyName, keyValue); + if (itemStack != null && keyName != null && !keyName.isEmpty()) { + initNBTTagCompound(itemStack); + itemStack.stackTagCompound.setByte(keyName, keyValue); + } } // short - public static short getShort(ItemStack itemStack, String keyName) - { - initNBTTagCompound(itemStack); + public static Short getShort(ItemStack itemStack, String keyName) { - if (!itemStack.stackTagCompound.hasKey(keyName)) - { - setShort(itemStack, keyName, (short) 0); + if (hasKey(itemStack, keyName)) { + if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagShort) { + return itemStack.stackTagCompound.getShort(keyName); + } } - return itemStack.stackTagCompound.getShort(keyName); + return null; } - public static void setShort(ItemStack itemStack, String keyName, short keyValue) - { - initNBTTagCompound(itemStack); + public static void setShort(ItemStack itemStack, String keyName, short keyValue) { - itemStack.stackTagCompound.setShort(keyName, keyValue); + if (itemStack != null && keyName != null && !keyName.isEmpty()) { + initNBTTagCompound(itemStack); + itemStack.stackTagCompound.setShort(keyName, keyValue); + } } // int - public static int getInt(ItemStack itemStack, String keyName) - { - initNBTTagCompound(itemStack); + public static Integer getInteger(ItemStack itemStack, String keyName) { - if (!itemStack.stackTagCompound.hasKey(keyName)) - { - setInteger(itemStack, keyName, 0); + if (hasKey(itemStack, keyName)) { + if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagInt) { + return itemStack.stackTagCompound.getInteger(keyName); + } } - return itemStack.stackTagCompound.getInteger(keyName); + return null; } - public static void setInteger(ItemStack itemStack, String keyName, int keyValue) - { - initNBTTagCompound(itemStack); + public static void setInteger(ItemStack itemStack, String keyName, int keyValue) { - itemStack.stackTagCompound.setInteger(keyName, keyValue); + if (itemStack != null && keyName != null && !keyName.isEmpty()) { + initNBTTagCompound(itemStack); + itemStack.stackTagCompound.setInteger(keyName, keyValue); + } } // long - public static long getLong(ItemStack itemStack, String keyName) - { - initNBTTagCompound(itemStack); + public static Long getLong(ItemStack itemStack, String keyName) { - if (!itemStack.stackTagCompound.hasKey(keyName)) - { - setLong(itemStack, keyName, 0); + if (hasKey(itemStack, keyName)) { + if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagLong) { + return itemStack.stackTagCompound.getLong(keyName); + } } - return itemStack.stackTagCompound.getLong(keyName); + return null; + } + + public static void setLong(ItemStack itemStack, String keyName, long keyValue) { + + if (itemStack != null && keyName != null && !keyName.isEmpty()) { + + initNBTTagCompound(itemStack); + itemStack.stackTagCompound.setLong(keyName, keyValue); + } } // float - public static float getFloat(ItemStack itemStack, String keyName) - { - initNBTTagCompound(itemStack); + public static Float getFloat(ItemStack itemStack, String keyName) { - if (!itemStack.stackTagCompound.hasKey(keyName)) - { - setFloat(itemStack, keyName, 0); + if (hasKey(itemStack, keyName)) { + if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagFloat) { + return itemStack.stackTagCompound.getFloat(keyName); + } } - return itemStack.stackTagCompound.getFloat(keyName); + return null; } - public static void setFloat(ItemStack itemStack, String keyName, float keyValue) - { - initNBTTagCompound(itemStack); + public static void setFloat(ItemStack itemStack, String keyName, float keyValue) { - itemStack.stackTagCompound.setFloat(keyName, keyValue); + if (itemStack != null && keyName != null && !keyName.isEmpty()) { + initNBTTagCompound(itemStack); + itemStack.stackTagCompound.setFloat(keyName, keyValue); + } } // double - public static double getDouble(ItemStack itemStack, String keyName) - { - initNBTTagCompound(itemStack); + public static Double getDouble(ItemStack itemStack, String keyName) { - if (!itemStack.stackTagCompound.hasKey(keyName)) - { - setDouble(itemStack, keyName, 0); + if (hasKey(itemStack, keyName)) { + if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagDouble) { + return itemStack.stackTagCompound.getDouble(keyName); + } } - return itemStack.stackTagCompound.getDouble(keyName); + return null; } - public static void setDouble(ItemStack itemStack, String keyName, double keyValue) - { - initNBTTagCompound(itemStack); + public static void setDouble(ItemStack itemStack, String keyName, double keyValue) { - itemStack.stackTagCompound.setDouble(keyName, keyValue); + if (itemStack != null && keyName != null && !keyName.isEmpty()) { + initNBTTagCompound(itemStack); + itemStack.stackTagCompound.setDouble(keyName, keyValue); + } } // tag list - public static NBTTagList getTagList(ItemStack itemStack, String keyName, int nbtBaseType) - { - initNBTTagCompound(itemStack); + public static NBTTagList getTagList(ItemStack itemStack, String keyName, int nbtBaseType) { - if (!itemStack.stackTagCompound.hasKey(keyName)) - { - setTagList(itemStack, keyName, new NBTTagList()); + if (hasKey(itemStack, keyName)) { + if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagList) { + return itemStack.stackTagCompound.getTagList(keyName, nbtBaseType); + } } - return itemStack.stackTagCompound.getTagList(keyName, nbtBaseType); + return null; } - public static void setTagList(ItemStack itemStack, String keyName, NBTTagList nbtTagList) - { - initNBTTagCompound(itemStack); + public static void setTagList(ItemStack itemStack, String keyName, NBTTagList nbtTagList) { - itemStack.stackTagCompound.setTag(keyName, nbtTagList); + if (itemStack != null && keyName != null && !keyName.isEmpty()) { + initNBTTagCompound(itemStack); + itemStack.stackTagCompound.setTag(keyName, nbtTagList); + } } // tag compound - public static NBTTagCompound getTagCompound(ItemStack itemStack, String keyName) - { - initNBTTagCompound(itemStack); + public static NBTTagCompound getTagCompound(ItemStack itemStack, String keyName) { - if (!itemStack.stackTagCompound.hasKey(keyName)) - { - setTagCompound(itemStack, keyName, new NBTTagCompound()); + if (hasKey(itemStack, keyName)) { + if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagCompound) { + return itemStack.stackTagCompound.getCompoundTag(keyName); + } } - return itemStack.stackTagCompound.getCompoundTag(keyName); + return null; } - public static void setTagCompound(ItemStack itemStack, String keyName, NBTTagCompound nbtTagCompound) - { - initNBTTagCompound(itemStack); + public static void setTagCompound(ItemStack itemStack, String keyName, NBTTagCompound nbtTagCompound) { - itemStack.stackTagCompound.setTag(keyName, nbtTagCompound); + if (itemStack != null && keyName != null && !keyName.isEmpty()) { + initNBTTagCompound(itemStack); + itemStack.stackTagCompound.setTag(keyName, nbtTagCompound); + } } } \ No newline at end of file