package com.carpentersblocks.util; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import org.apache.logging.log4j.Level; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier; /** * Stores attribute and unique identifier for validation purposes. */ public class Attribute { private static final String TAG_UNIQUE_ID = "cbUniqueId"; private ItemStack _itemStack; private String _uniqueId; private boolean _error; public Attribute(ItemStack itemStack) { if (itemStack != null && itemStack.getItem() != null) { this._itemStack = itemStack; _uniqueId = GameRegistry.findUniqueIdentifierFor(itemStack.getItem()).toString(); } } public ItemStack getItemStack() { return _itemStack; } public String getUniqueId() { return _uniqueId; } /** * Write the stack fields to a NBT object. Return the new NBT object. */ public NBTTagCompound writeToNBT(NBTTagCompound nbt) { _itemStack.writeToNBT(nbt); nbt.setString(TAG_UNIQUE_ID, _uniqueId); return nbt; } public static Attribute loadAttributeFromNBT(NBTTagCompound nbt) { ItemStack itemStack = ItemStack.loadItemStackFromNBT(nbt); if (itemStack == null) { UniqueIdentifier uniqueId = new UniqueIdentifier(nbt.getString(TAG_UNIQUE_ID)); itemStack = GameRegistry.findItemStack(uniqueId.modId, uniqueId.name, 1); if (itemStack != null) { int dmg = nbt.getShort("Damage"); itemStack.setItemDamage(dmg); ModLogger.log(Level.WARN, "Invalid Id for attribute '" + uniqueId.toString() + "' corrected."); } else { ModLogger.log(Level.WARN, "Block attribute '" + uniqueId.toString() + "' was unable to be recovered. Was a mod removed?"); } } return new Attribute(itemStack); } }