diff --git a/CHANGELOG.md b/CHANGELOG.md index c30c53984..382c28bbe 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - Fixed not being able to place sugar cane - Fixed not being able to place seeds - Fixed stacks not splitting between storages correctly +- Fixed storage not saving ItemStack capabilities **Features** - Added an API diff --git a/src/main/java/refinedstorage/api/storage/NBTStorage.java b/src/main/java/refinedstorage/api/storage/NBTStorage.java index 5fc43eb1a..d2119278c 100755 --- a/src/main/java/refinedstorage/api/storage/NBTStorage.java +++ b/src/main/java/refinedstorage/api/storage/NBTStorage.java @@ -21,6 +21,7 @@ public abstract class NBTStorage implements IStorage { public static final String NBT_ITEM_QUANTITY = "Quantity"; public static final String NBT_ITEM_DAMAGE = "Damage"; public static final String NBT_ITEM_NBT = "NBT"; + public static final String NBT_ITEM_CAPS = "Caps"; private NBTTagCompound tag; private int capacity; @@ -49,10 +50,11 @@ public abstract class NBTStorage implements IStorage { ItemStack stack = new ItemStack( Item.getItemById(tag.getInteger(NBT_ITEM_TYPE)), tag.getInteger(NBT_ITEM_QUANTITY), - tag.getInteger(NBT_ITEM_DAMAGE) + tag.getInteger(NBT_ITEM_DAMAGE), + tag.hasKey(NBT_ITEM_CAPS) ? tag.getCompoundTag(NBT_ITEM_CAPS) : null ); - stack.setTagCompound(tag.hasKey(NBT_ITEM_NBT) ? ((NBTTagCompound) tag.getTag(NBT_ITEM_NBT)) : null); + stack.setTagCompound(tag.hasKey(NBT_ITEM_NBT) ? tag.getCompoundTag(NBT_ITEM_NBT) : null); if (stack.getItem() != null) { stacks.add(stack); @@ -68,6 +70,9 @@ public abstract class NBTStorage implements IStorage { public void writeToNBT(NBTTagCompound tag) { NBTTagList list = new NBTTagList(); + // Dummy value for extracting ForgeCaps + NBTTagCompound dummy = new NBTTagCompound(); + for (ItemStack stack : stacks) { NBTTagCompound itemTag = new NBTTagCompound(); @@ -79,6 +84,14 @@ public abstract class NBTStorage implements IStorage { itemTag.setTag(NBT_ITEM_NBT, stack.getTagCompound()); } + stack.writeToNBT(dummy); + + if (dummy.hasKey("ForgeCaps")) { + itemTag.setTag(NBT_ITEM_CAPS, dummy.getTag("ForgeCaps")); + } + + dummy.removeTag("ForgeCaps"); + list.appendTag(itemTag); }