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.
This commit is contained in:
Pahimar 2016-05-27 11:10:38 -04:00
parent 43a384a2e6
commit 6d2e1337b1
8 changed files with 217 additions and 216 deletions

View File

@ -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);
}

View File

@ -24,16 +24,9 @@ import org.lwjgl.input.Keyboard;
import java.text.DecimalFormat;
import java.util.UUID;
/**
* Equivalent-Exchange-3
* <p/>
* 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));
}
}
}
}
}

View File

@ -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);
}

View File

@ -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();

View File

@ -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);
}

View File

@ -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

View File

@ -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));
}

View File

@ -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);
}
}
}