2014-03-28 20:54:15 +01:00
|
|
|
package com.pahimar.ee3.util;
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2014-03-28 20:54:15 +01:00
|
|
|
import com.pahimar.ee3.reference.Names;
|
2013-11-20 01:42:29 +01:00
|
|
|
import net.minecraft.item.ItemStack;
|
2016-05-27 17:10:38 +02:00
|
|
|
import net.minecraft.nbt.*;
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2014-03-26 02:59:36 +01:00
|
|
|
import java.util.UUID;
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
public class NBTHelper {
|
|
|
|
|
|
|
|
public static void clearStatefulNBTTags(ItemStack itemStack) {
|
|
|
|
|
|
|
|
if (NBTHelper.hasKey(itemStack, Names.NBT.CRAFTING_GUI_OPEN)) {
|
2014-07-04 21:18:10 +02:00
|
|
|
NBTHelper.removeTag(itemStack, Names.NBT.CRAFTING_GUI_OPEN);
|
|
|
|
}
|
2016-05-27 17:10:38 +02:00
|
|
|
else if (NBTHelper.hasKey(itemStack, Names.NBT.TRANSMUTATION_GUI_OPEN)) {
|
2014-07-04 21:18:10 +02:00
|
|
|
NBTHelper.removeTag(itemStack, Names.NBT.TRANSMUTATION_GUI_OPEN);
|
|
|
|
}
|
2016-05-27 17:10:38 +02:00
|
|
|
else if (NBTHelper.hasKey(itemStack, Names.NBT.ALCHEMICAL_BAG_GUI_OPEN)) {
|
2014-07-04 21:18:10 +02:00
|
|
|
NBTHelper.removeTag(itemStack, Names.NBT.ALCHEMICAL_BAG_GUI_OPEN);
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
public static boolean hasKey(ItemStack itemStack, String keyName) {
|
2014-03-27 15:51:35 +01:00
|
|
|
return itemStack != null && itemStack.stackTagCompound != null && itemStack.stackTagCompound.hasKey(keyName);
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
public static void removeTag(ItemStack itemStack, String keyName) {
|
|
|
|
|
|
|
|
if (itemStack != null && itemStack.stackTagCompound != null && keyName != null && !keyName.isEmpty()) {
|
2013-11-20 01:42:29 +01:00
|
|
|
itemStack.stackTagCompound.removeTag(keyName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
public static boolean hasUUID(ItemStack itemStack) {
|
|
|
|
return getLong(itemStack, Names.NBT.UUID_MOST_SIG) != null && getLong(itemStack, Names.NBT.UUID_LEAST_SIG) != null;
|
2014-03-26 02:59:36 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
public static UUID getUUID(ItemStack itemStack) {
|
2014-03-26 02:59:36 +01:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
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());
|
2014-03-26 02:59:36 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-07-04 21:18:10 +02:00
|
|
|
/**
|
2016-05-27 17:10:38 +02:00
|
|
|
* Initializes the NBT Tag Compound for the given ItemStack
|
2014-07-04 21:18:10 +02:00
|
|
|
*
|
|
|
|
* @param itemStack The ItemStack for which its NBT Tag Compound is being checked for initialization
|
|
|
|
*/
|
2016-05-27 17:10:38 +02:00
|
|
|
private static void initNBTTagCompound(ItemStack itemStack) {
|
|
|
|
|
|
|
|
if (itemStack != null && itemStack.stackTagCompound == null) {
|
2014-07-04 21:18:10 +02:00
|
|
|
itemStack.setTagCompound(new NBTTagCompound());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-11-20 01:42:29 +01:00
|
|
|
// String
|
2016-05-27 17:10:38 +02:00
|
|
|
public static String getString(ItemStack itemStack, String keyName) {
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (hasKey(itemStack, keyName)) {
|
|
|
|
if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagString) {
|
|
|
|
return itemStack.stackTagCompound.getString(keyName);
|
|
|
|
}
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
return null;
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
public static void setString(ItemStack itemStack, String keyName, String keyValue) {
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (itemStack != null && keyName != null && !keyName.isEmpty()) {
|
|
|
|
initNBTTagCompound(itemStack);
|
|
|
|
itemStack.stackTagCompound.setString(keyName, keyValue);
|
|
|
|
}
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// boolean
|
2016-05-27 17:10:38 +02:00
|
|
|
public static Boolean getBoolean(ItemStack itemStack, String keyName) {
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (hasKey(itemStack, keyName)) {
|
|
|
|
if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagByte) {
|
|
|
|
itemStack.stackTagCompound.getBoolean(keyName);
|
|
|
|
}
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
return null;
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
public static void setBoolean(ItemStack itemStack, String keyName, boolean keyValue) {
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (itemStack != null && keyName != null && !keyName.isEmpty()) {
|
|
|
|
initNBTTagCompound(itemStack);
|
|
|
|
itemStack.stackTagCompound.setBoolean(keyName, keyValue);
|
|
|
|
}
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// byte
|
2016-05-27 17:10:38 +02:00
|
|
|
public static Byte getByte(ItemStack itemStack, String keyName) {
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (hasKey(itemStack, keyName)) {
|
|
|
|
if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagByte) {
|
|
|
|
return itemStack.stackTagCompound.getByte(keyName);
|
|
|
|
}
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
return null;
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
public static void setByte(ItemStack itemStack, String keyName, byte keyValue) {
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (itemStack != null && keyName != null && !keyName.isEmpty()) {
|
|
|
|
initNBTTagCompound(itemStack);
|
|
|
|
itemStack.stackTagCompound.setByte(keyName, keyValue);
|
|
|
|
}
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// short
|
2016-05-27 17:10:38 +02:00
|
|
|
public static Short getShort(ItemStack itemStack, String keyName) {
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (hasKey(itemStack, keyName)) {
|
|
|
|
if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagShort) {
|
|
|
|
return itemStack.stackTagCompound.getShort(keyName);
|
|
|
|
}
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
return null;
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
public static void setShort(ItemStack itemStack, String keyName, short keyValue) {
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (itemStack != null && keyName != null && !keyName.isEmpty()) {
|
|
|
|
initNBTTagCompound(itemStack);
|
|
|
|
itemStack.stackTagCompound.setShort(keyName, keyValue);
|
|
|
|
}
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// int
|
2016-05-27 17:10:38 +02:00
|
|
|
public static Integer getInteger(ItemStack itemStack, String keyName) {
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (hasKey(itemStack, keyName)) {
|
|
|
|
if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagInt) {
|
|
|
|
return itemStack.stackTagCompound.getInteger(keyName);
|
|
|
|
}
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
return null;
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
public static void setInteger(ItemStack itemStack, String keyName, int keyValue) {
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (itemStack != null && keyName != null && !keyName.isEmpty()) {
|
|
|
|
initNBTTagCompound(itemStack);
|
|
|
|
itemStack.stackTagCompound.setInteger(keyName, keyValue);
|
|
|
|
}
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// long
|
2016-05-27 17:10:38 +02:00
|
|
|
public static Long getLong(ItemStack itemStack, String keyName) {
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (hasKey(itemStack, keyName)) {
|
|
|
|
if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagLong) {
|
|
|
|
return itemStack.stackTagCompound.getLong(keyName);
|
|
|
|
}
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
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);
|
|
|
|
}
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// float
|
2016-05-27 17:10:38 +02:00
|
|
|
public static Float getFloat(ItemStack itemStack, String keyName) {
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (hasKey(itemStack, keyName)) {
|
|
|
|
if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagFloat) {
|
|
|
|
return itemStack.stackTagCompound.getFloat(keyName);
|
|
|
|
}
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
return null;
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
public static void setFloat(ItemStack itemStack, String keyName, float keyValue) {
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (itemStack != null && keyName != null && !keyName.isEmpty()) {
|
|
|
|
initNBTTagCompound(itemStack);
|
|
|
|
itemStack.stackTagCompound.setFloat(keyName, keyValue);
|
|
|
|
}
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// double
|
2016-05-27 17:10:38 +02:00
|
|
|
public static Double getDouble(ItemStack itemStack, String keyName) {
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (hasKey(itemStack, keyName)) {
|
|
|
|
if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagDouble) {
|
|
|
|
return itemStack.stackTagCompound.getDouble(keyName);
|
|
|
|
}
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
return null;
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
public static void setDouble(ItemStack itemStack, String keyName, double keyValue) {
|
2013-11-20 01:42:29 +01:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (itemStack != null && keyName != null && !keyName.isEmpty()) {
|
|
|
|
initNBTTagCompound(itemStack);
|
|
|
|
itemStack.stackTagCompound.setDouble(keyName, keyValue);
|
|
|
|
}
|
2013-11-20 01:42:29 +01:00
|
|
|
}
|
2014-07-21 03:32:23 +02:00
|
|
|
|
2014-07-21 22:19:25 +02:00
|
|
|
// tag list
|
2016-05-27 17:10:38 +02:00
|
|
|
public static NBTTagList getTagList(ItemStack itemStack, String keyName, int nbtBaseType) {
|
2014-07-21 22:19:25 +02:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (hasKey(itemStack, keyName)) {
|
|
|
|
if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagList) {
|
|
|
|
return itemStack.stackTagCompound.getTagList(keyName, nbtBaseType);
|
|
|
|
}
|
2014-07-21 22:19:25 +02:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
return null;
|
2014-07-21 22:19:25 +02:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
public static void setTagList(ItemStack itemStack, String keyName, NBTTagList nbtTagList) {
|
2014-07-21 22:19:25 +02:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (itemStack != null && keyName != null && !keyName.isEmpty()) {
|
|
|
|
initNBTTagCompound(itemStack);
|
|
|
|
itemStack.stackTagCompound.setTag(keyName, nbtTagList);
|
|
|
|
}
|
2014-07-21 22:19:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// tag compound
|
2016-05-27 17:10:38 +02:00
|
|
|
public static NBTTagCompound getTagCompound(ItemStack itemStack, String keyName) {
|
2014-07-21 03:32:23 +02:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (hasKey(itemStack, keyName)) {
|
|
|
|
if (itemStack.getTagCompound().getTag(keyName) instanceof NBTTagCompound) {
|
|
|
|
return itemStack.stackTagCompound.getCompoundTag(keyName);
|
|
|
|
}
|
2014-07-21 03:32:23 +02:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
return null;
|
2014-07-21 03:32:23 +02:00
|
|
|
}
|
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
public static void setTagCompound(ItemStack itemStack, String keyName, NBTTagCompound nbtTagCompound) {
|
2014-07-21 03:32:23 +02:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
if (itemStack != null && keyName != null && !keyName.isEmpty()) {
|
|
|
|
initNBTTagCompound(itemStack);
|
|
|
|
itemStack.stackTagCompound.setTag(keyName, nbtTagCompound);
|
|
|
|
}
|
2014-07-21 03:32:23 +02:00
|
|
|
}
|
2014-03-28 20:54:15 +01:00
|
|
|
}
|