/**
* Copyright (c) 25/05/15 Davide Cossu & Matthew Albrecht.
* <p/>
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 3 of the License, or (at your option) any
* later version.
* <p/>
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU General Public License for more details.
* <p/>
* You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses>.
*/
package com.minestellar.utils;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
public class NBTHelper{
public static boolean hasTag(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){
itemStack.stackTagCompound.removeTag(keyName);
}
}
/**
* Initializes the NBT Tag Compound for the given ItemStack if it is null
*
* @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){
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);
if (!itemStack.stackTagCompound.hasKey(keyName)){
setString(itemStack, keyName, "");
}
return itemStack.stackTagCompound.getString(keyName);
}
public static void setString(ItemStack itemStack, String keyName, String keyValue){
initNBTTagCompound(itemStack);
itemStack.stackTagCompound.setString(keyName, keyValue);
}
// boolean
public static boolean getBoolean(ItemStack itemStack, String keyName){
initNBTTagCompound(itemStack);
if (!itemStack.stackTagCompound.hasKey(keyName)){
setBoolean(itemStack, keyName, false);
}
return itemStack.stackTagCompound.getBoolean(keyName);
}
public static void setBoolean(ItemStack itemStack, String keyName, boolean keyValue){
initNBTTagCompound(itemStack);
itemStack.stackTagCompound.setBoolean(keyName, keyValue);
}
// byte
public static byte getByte(ItemStack itemStack, String keyName){
initNBTTagCompound(itemStack);
if (!itemStack.stackTagCompound.hasKey(keyName)){
setByte(itemStack, keyName, (byte) 0);
}
return itemStack.stackTagCompound.getByte(keyName);
}
public static void setByte(ItemStack itemStack, String keyName, byte keyValue){
initNBTTagCompound(itemStack);
itemStack.stackTagCompound.setByte(keyName, keyValue);
}
// short
public static short getShort(ItemStack itemStack, String keyName){
initNBTTagCompound(itemStack);
if (!itemStack.stackTagCompound.hasKey(keyName)){
setShort(itemStack, keyName, (short) 0);
}
return itemStack.stackTagCompound.getShort(keyName);
}
public static void setShort(ItemStack itemStack, String keyName, short keyValue){
initNBTTagCompound(itemStack);
itemStack.stackTagCompound.setShort(keyName, keyValue);
}
// int
public static int getInt(ItemStack itemStack, String keyName){
initNBTTagCompound(itemStack);
if (!itemStack.stackTagCompound.hasKey(keyName)){
setInteger(itemStack, keyName, 0);
}
return itemStack.stackTagCompound.getInteger(keyName);
}
public static void setInteger(ItemStack itemStack, String keyName, int keyValue){
initNBTTagCompound(itemStack);
itemStack.stackTagCompound.setInteger(keyName, keyValue);
}
// long
public static long getLong(ItemStack itemStack, String keyName){
initNBTTagCompound(itemStack);
if (!itemStack.stackTagCompound.hasKey(keyName)){
setLong(itemStack, keyName, 0);
}
return itemStack.stackTagCompound.getLong(keyName);
}
// float
public static float getFloat(ItemStack itemStack, String keyName){
initNBTTagCompound(itemStack);
if (!itemStack.stackTagCompound.hasKey(keyName)){
setFloat(itemStack, keyName, 0);
}
return itemStack.stackTagCompound.getFloat(keyName);
}
public static void setFloat(ItemStack itemStack, String keyName, float keyValue){
initNBTTagCompound(itemStack);
itemStack.stackTagCompound.setFloat(keyName, keyValue);
}
// double
public static double getDouble(ItemStack itemStack, String keyName){
initNBTTagCompound(itemStack);
if (!itemStack.stackTagCompound.hasKey(keyName)){
setDouble(itemStack, keyName, 0);
}
return itemStack.stackTagCompound.getDouble(keyName);
}
public static void setDouble(ItemStack itemStack, String keyName, double keyValue){
initNBTTagCompound(itemStack);
itemStack.stackTagCompound.setDouble(keyName, keyValue);
}
// tag list
public static NBTTagList getTagList(ItemStack itemStack, String keyName, int nbtBaseType){
initNBTTagCompound(itemStack);
if (!itemStack.stackTagCompound.hasKey(keyName))
{
setTagList(itemStack, keyName, new NBTTagList());
}
return itemStack.stackTagCompound.getTagList(keyName, nbtBaseType);
}
public static void setTagList(ItemStack itemStack, String keyName, NBTTagList nbtTagList){
initNBTTagCompound(itemStack);
itemStack.stackTagCompound.setTag(keyName, nbtTagList);
}
// tag compound
public static NBTTagCompound getTagCompound(ItemStack itemStack, String keyName){
initNBTTagCompound(itemStack);
if (!itemStack.stackTagCompound.hasKey(keyName)){
setTagCompound(itemStack, keyName, new NBTTagCompound());
}
return itemStack.stackTagCompound.getCompoundTag(keyName);
}
public static void setTagCompound(ItemStack itemStack, String keyName, NBTTagCompound nbtTagCompound){
initNBTTagCompound(itemStack);
itemStack.stackTagCompound.setTag(keyName, nbtTagCompound);
}
}