Fixed issue with empty stacks in autocrafting during (de)serialization.
This commit is contained in:
@@ -4,10 +4,10 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftin
|
|||||||
import com.raoulvdberge.refinedstorage.api.render.IElementDrawers;
|
import com.raoulvdberge.refinedstorage.api.render.IElementDrawers;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||||
|
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ public class CraftingMonitorElementItemRender implements ICraftingMonitorElement
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(ByteBuf buf) {
|
public void write(ByteBuf buf) {
|
||||||
ByteBufUtils.writeItemStack(buf, stack);
|
StackUtils.writeItemStack(buf, stack);
|
||||||
buf.writeInt(quantity);
|
buf.writeInt(quantity);
|
||||||
buf.writeInt(offset);
|
buf.writeInt(offset);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.inserter.Crafti
|
|||||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.step.CraftingStep;
|
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.step.CraftingStep;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.step.CraftingStepCraft;
|
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.step.CraftingStepCraft;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.step.CraftingStepProcess;
|
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.step.CraftingStepProcess;
|
||||||
|
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.nbt.NBTTagList;
|
import net.minecraft.nbt.NBTTagList;
|
||||||
@@ -98,7 +99,7 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
|
|
||||||
NBTTagList missing = tag.getTagList(NBT_MISSING, Constants.NBT.TAG_COMPOUND);
|
NBTTagList missing = tag.getTagList(NBT_MISSING, Constants.NBT.TAG_COMPOUND);
|
||||||
for (int i = 0; i < missing.tagCount(); ++i) {
|
for (int i = 0; i < missing.tagCount(); ++i) {
|
||||||
ItemStack missingItem = new ItemStack(missing.getCompoundTagAt(i));
|
ItemStack missingItem = StackUtils.deserializeStackFromNbt(missing.getCompoundTagAt(i));
|
||||||
|
|
||||||
if (missingItem.isEmpty()) {
|
if (missingItem.isEmpty()) {
|
||||||
throw new CraftingTaskReadException("Missing item is empty");
|
throw new CraftingTaskReadException("Missing item is empty");
|
||||||
@@ -557,7 +558,7 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
|
|
||||||
NBTTagList missing = new NBTTagList();
|
NBTTagList missing = new NBTTagList();
|
||||||
for (ItemStack missingItem : this.missing.getStacks()) {
|
for (ItemStack missingItem : this.missing.getStacks()) {
|
||||||
missing.appendTag(missingItem.serializeNBT());
|
missing.appendTag(StackUtils.serializeStackToNbt(missingItem));
|
||||||
}
|
}
|
||||||
|
|
||||||
tag.setTag(NBT_MISSING, missing);
|
tag.setTag(NBT_MISSING, missing);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.extractor;
|
|||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.task.CraftingTaskReadException;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.task.CraftingTaskReadException;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.CraftingTask;
|
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.CraftingTask;
|
||||||
|
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.nbt.NBTTagList;
|
import net.minecraft.nbt.NBTTagList;
|
||||||
@@ -41,7 +42,7 @@ public class CraftingExtractor {
|
|||||||
for (int i = 0; i < tag.tagCount(); ++i) {
|
for (int i = 0; i < tag.tagCount(); ++i) {
|
||||||
NBTTagCompound itemTag = tag.getCompoundTagAt(i);
|
NBTTagCompound itemTag = tag.getCompoundTagAt(i);
|
||||||
|
|
||||||
ItemStack stack = new ItemStack(itemTag.getCompoundTag(NBT_ITEM));
|
ItemStack stack = StackUtils.deserializeStackFromNbt(itemTag.getCompoundTag(NBT_ITEM));
|
||||||
|
|
||||||
if (stack.isEmpty()) {
|
if (stack.isEmpty()) {
|
||||||
throw new CraftingTaskReadException("Extractor stack is empty");
|
throw new CraftingTaskReadException("Extractor stack is empty");
|
||||||
@@ -151,7 +152,7 @@ public class CraftingExtractor {
|
|||||||
for (int i = 0; i < items.size(); ++i) {
|
for (int i = 0; i < items.size(); ++i) {
|
||||||
NBTTagCompound tag = new NBTTagCompound();
|
NBTTagCompound tag = new NBTTagCompound();
|
||||||
|
|
||||||
tag.setTag(NBT_ITEM, items.get(i).serializeNBT());
|
tag.setTag(NBT_ITEM, StackUtils.serializeStackToNbt(items.get(i)));
|
||||||
tag.setInteger(NBT_STATUS, status.get(i).ordinal());
|
tag.setInteger(NBT_STATUS, status.get(i).ordinal());
|
||||||
|
|
||||||
list.appendTag(tag);
|
list.appendTag(tag);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.inserter;
|
|||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.task.CraftingTaskReadException;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.task.CraftingTaskReadException;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
||||||
|
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.nbt.NBTTagList;
|
import net.minecraft.nbt.NBTTagList;
|
||||||
@@ -27,7 +28,7 @@ public class CraftingInserter {
|
|||||||
for (int i = 0; i < list.tagCount(); ++i) {
|
for (int i = 0; i < list.tagCount(); ++i) {
|
||||||
NBTTagCompound itemTag = list.getCompoundTagAt(i);
|
NBTTagCompound itemTag = list.getCompoundTagAt(i);
|
||||||
|
|
||||||
ItemStack stack = new ItemStack(itemTag.getCompoundTag(NBT_ITEM));
|
ItemStack stack = StackUtils.deserializeStackFromNbt(itemTag.getCompoundTag(NBT_ITEM));
|
||||||
|
|
||||||
if (stack.isEmpty()) {
|
if (stack.isEmpty()) {
|
||||||
throw new CraftingTaskReadException("Inserter has empty stack");
|
throw new CraftingTaskReadException("Inserter has empty stack");
|
||||||
@@ -88,7 +89,7 @@ public class CraftingInserter {
|
|||||||
for (CraftingInserterItem item : items) {
|
for (CraftingInserterItem item : items) {
|
||||||
NBTTagCompound tag = new NBTTagCompound();
|
NBTTagCompound tag = new NBTTagCompound();
|
||||||
|
|
||||||
tag.setTag(NBT_ITEM, item.getStack().serializeNBT());
|
tag.setTag(NBT_ITEM, StackUtils.serializeStackToNbt(item.getStack()));
|
||||||
tag.setInteger(NBT_STATUS, item.getStatus().ordinal());
|
tag.setInteger(NBT_STATUS, item.getStatus().ordinal());
|
||||||
|
|
||||||
list.appendTag(tag);
|
list.appendTag(tag);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.task.CraftingTaskReadExc
|
|||||||
import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.extractor.CraftingExtractor;
|
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.extractor.CraftingExtractor;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.inserter.CraftingInserter;
|
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.inserter.CraftingInserter;
|
||||||
|
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.nbt.NBTTagList;
|
import net.minecraft.nbt.NBTTagList;
|
||||||
@@ -50,7 +51,7 @@ public class CraftingStepCraft extends CraftingStep {
|
|||||||
|
|
||||||
NBTTagList tookList = tag.getTagList(NBT_TOOK, Constants.NBT.TAG_COMPOUND);
|
NBTTagList tookList = tag.getTagList(NBT_TOOK, Constants.NBT.TAG_COMPOUND);
|
||||||
for (int i = 0; i < tookList.tagCount(); ++i) {
|
for (int i = 0; i < tookList.tagCount(); ++i) {
|
||||||
took.add(new ItemStack(tookList.getCompoundTagAt(i)));
|
took.add(StackUtils.deserializeStackFromNbt(tookList.getCompoundTagAt(i))); // Took stack can be empty
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,7 +93,7 @@ public class CraftingStepCraft extends CraftingStep {
|
|||||||
NBTTagList took = new NBTTagList();
|
NBTTagList took = new NBTTagList();
|
||||||
|
|
||||||
for (ItemStack stack : this.took) {
|
for (ItemStack stack : this.took) {
|
||||||
took.appendTag(stack.serializeNBT());
|
took.appendTag(StackUtils.serializeStackToNbt(stack));
|
||||||
}
|
}
|
||||||
|
|
||||||
tag.setTag(NBT_TOOK, took);
|
tag.setTag(NBT_TOOK, took);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
|||||||
import com.raoulvdberge.refinedstorage.api.util.IStackList;
|
import com.raoulvdberge.refinedstorage.api.util.IStackList;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.extractor.CraftingExtractor;
|
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.extractor.CraftingExtractor;
|
||||||
|
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.nbt.NBTTagList;
|
import net.minecraft.nbt.NBTTagList;
|
||||||
@@ -47,7 +48,7 @@ public class CraftingStepProcess extends CraftingStep {
|
|||||||
|
|
||||||
NBTTagList toReceiveList = tag.getTagList(NBT_TO_RECEIVE, Constants.NBT.TAG_COMPOUND);
|
NBTTagList toReceiveList = tag.getTagList(NBT_TO_RECEIVE, Constants.NBT.TAG_COMPOUND);
|
||||||
for (int i = 0; i < toReceiveList.tagCount(); ++i) {
|
for (int i = 0; i < toReceiveList.tagCount(); ++i) {
|
||||||
ItemStack toReceive = new ItemStack(toReceiveList.getCompoundTagAt(i));
|
ItemStack toReceive = StackUtils.deserializeStackFromNbt(toReceiveList.getCompoundTagAt(i));
|
||||||
|
|
||||||
if (toReceive.isEmpty()) {
|
if (toReceive.isEmpty()) {
|
||||||
throw new CraftingTaskReadException("Item to receive is empty");
|
throw new CraftingTaskReadException("Item to receive is empty");
|
||||||
@@ -104,7 +105,7 @@ public class CraftingStepProcess extends CraftingStep {
|
|||||||
NBTTagList toReceive = new NBTTagList();
|
NBTTagList toReceive = new NBTTagList();
|
||||||
|
|
||||||
for (ItemStack toReceiveStack : itemsToReceive.getStacks()) {
|
for (ItemStack toReceiveStack : itemsToReceive.getStacks()) {
|
||||||
toReceive.appendTag(toReceiveStack.serializeNBT());
|
toReceive.appendTag(StackUtils.serializeStackToNbt(toReceiveStack));
|
||||||
}
|
}
|
||||||
|
|
||||||
tag.setTag(NBT_TO_RECEIVE, toReceive);
|
tag.setTag(NBT_TO_RECEIVE, toReceive);
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.storage.disk;
|
|||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
|
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskFactory;
|
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskFactory;
|
||||||
import net.minecraft.item.Item;
|
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.nbt.NBTTagList;
|
import net.minecraft.nbt.NBTTagList;
|
||||||
@@ -18,16 +18,7 @@ public class StorageDiskFactoryItem implements IStorageDiskFactory<ItemStack> {
|
|||||||
NBTTagList list = (NBTTagList) tag.getTag(StorageDiskItem.NBT_ITEMS);
|
NBTTagList list = (NBTTagList) tag.getTag(StorageDiskItem.NBT_ITEMS);
|
||||||
|
|
||||||
for (int i = 0; i < list.tagCount(); ++i) {
|
for (int i = 0; i < list.tagCount(); ++i) {
|
||||||
NBTTagCompound item = list.getCompoundTagAt(i);
|
ItemStack stack = StackUtils.deserializeStackFromNbt(list.getCompoundTagAt(i));
|
||||||
|
|
||||||
ItemStack stack = new ItemStack(
|
|
||||||
Item.getItemById(item.getInteger(StorageDiskItem.NBT_ITEM_TYPE)),
|
|
||||||
item.getInteger(StorageDiskItem.NBT_ITEM_QUANTITY),
|
|
||||||
item.getInteger(StorageDiskItem.NBT_ITEM_DAMAGE),
|
|
||||||
item.hasKey(StorageDiskItem.NBT_ITEM_CAPS) ? item.getCompoundTag(StorageDiskItem.NBT_ITEM_CAPS) : null
|
|
||||||
);
|
|
||||||
|
|
||||||
stack.setTagCompound(item.hasKey(StorageDiskItem.NBT_ITEM_NBT) ? item.getCompoundTag(StorageDiskItem.NBT_ITEM_NBT) : null);
|
|
||||||
|
|
||||||
if (!stack.isEmpty()) {
|
if (!stack.isEmpty()) {
|
||||||
disk.getRawStacks().put(stack.getItem(), stack);
|
disk.getRawStacks().put(stack.getItem(), stack);
|
||||||
|
|||||||
@@ -27,12 +27,6 @@ public class StorageDiskItem implements IStorageDisk<ItemStack> {
|
|||||||
static final String NBT_CAPACITY = "Capacity";
|
static final String NBT_CAPACITY = "Capacity";
|
||||||
static final String NBT_ITEMS = "Items";
|
static final String NBT_ITEMS = "Items";
|
||||||
|
|
||||||
static final String NBT_ITEM_TYPE = "Type";
|
|
||||||
static final String NBT_ITEM_QUANTITY = "Quantity";
|
|
||||||
static final String NBT_ITEM_DAMAGE = "Damage";
|
|
||||||
static final String NBT_ITEM_NBT = "NBT";
|
|
||||||
static final String NBT_ITEM_CAPS = "Caps";
|
|
||||||
|
|
||||||
private World world;
|
private World world;
|
||||||
private int capacity;
|
private int capacity;
|
||||||
private Multimap<Item, ItemStack> stacks = ArrayListMultimap.create();
|
private Multimap<Item, ItemStack> stacks = ArrayListMultimap.create();
|
||||||
@@ -56,29 +50,8 @@ public class StorageDiskItem implements IStorageDisk<ItemStack> {
|
|||||||
|
|
||||||
NBTTagList list = new NBTTagList();
|
NBTTagList list = new NBTTagList();
|
||||||
|
|
||||||
// Dummy value for extracting ForgeCaps
|
|
||||||
NBTTagCompound dummy = new NBTTagCompound();
|
|
||||||
|
|
||||||
for (ItemStack stack : stacks.values()) {
|
for (ItemStack stack : stacks.values()) {
|
||||||
NBTTagCompound itemTag = new NBTTagCompound();
|
list.appendTag(StackUtils.serializeStackToNbt(stack));
|
||||||
|
|
||||||
itemTag.setInteger(NBT_ITEM_TYPE, Item.getIdFromItem(stack.getItem()));
|
|
||||||
itemTag.setInteger(NBT_ITEM_QUANTITY, stack.getCount());
|
|
||||||
itemTag.setInteger(NBT_ITEM_DAMAGE, stack.getItemDamage());
|
|
||||||
|
|
||||||
if (stack.hasTagCompound()) {
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tag.setString(NBT_VERSION, RS.VERSION);
|
tag.setString(NBT_VERSION, RS.VERSION);
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ public class ProxyCommon {
|
|||||||
|
|
||||||
API.instance().getCraftingTaskRegistry().add(CraftingTaskFactory.ID, new CraftingTaskFactory());
|
API.instance().getCraftingTaskRegistry().add(CraftingTaskFactory.ID, new CraftingTaskFactory());
|
||||||
|
|
||||||
API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementItemRender.ID, buf -> new CraftingMonitorElementItemRender(ByteBufUtils.readItemStack(buf), buf.readInt(), buf.readInt()));
|
API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementItemRender.ID, buf -> new CraftingMonitorElementItemRender(StackUtils.readItemStack(buf), buf.readInt(), buf.readInt()));
|
||||||
API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementFluidRender.ID, buf -> new CraftingMonitorElementFluidRender(StackUtils.readFluidStack(buf).getRight(), buf.readInt()));
|
API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementFluidRender.ID, buf -> new CraftingMonitorElementFluidRender(StackUtils.readFluidStack(buf).getRight(), buf.readInt()));
|
||||||
API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementText.ID, buf -> new CraftingMonitorElementText(ByteBufUtils.readUTF8String(buf), buf.readInt()));
|
API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementText.ID, buf -> new CraftingMonitorElementText(ByteBufUtils.readUTF8String(buf), buf.readInt()));
|
||||||
API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementColor.ID, buf -> {
|
API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementColor.ID, buf -> {
|
||||||
|
|||||||
@@ -311,4 +311,48 @@ public final class StackUtils {
|
|||||||
|
|
||||||
return lines;
|
return lines;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final String NBT_ITEM_TYPE = "Type";
|
||||||
|
private static final String NBT_ITEM_QUANTITY = "Quantity";
|
||||||
|
private static final String NBT_ITEM_DAMAGE = "Damage";
|
||||||
|
private static final String NBT_ITEM_NBT = "NBT";
|
||||||
|
private static final String NBT_ITEM_CAPS = "Caps";
|
||||||
|
|
||||||
|
public static NBTTagCompound serializeStackToNbt(@Nonnull ItemStack stack) {
|
||||||
|
NBTTagCompound dummy = new NBTTagCompound();
|
||||||
|
|
||||||
|
NBTTagCompound itemTag = new NBTTagCompound();
|
||||||
|
|
||||||
|
itemTag.setInteger(NBT_ITEM_TYPE, Item.getIdFromItem(stack.getItem()));
|
||||||
|
itemTag.setInteger(NBT_ITEM_QUANTITY, stack.getCount());
|
||||||
|
itemTag.setInteger(NBT_ITEM_DAMAGE, stack.getItemDamage());
|
||||||
|
|
||||||
|
if (stack.hasTagCompound()) {
|
||||||
|
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");
|
||||||
|
|
||||||
|
return itemTag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
public static ItemStack deserializeStackFromNbt(NBTTagCompound tag) {
|
||||||
|
ItemStack stack = new ItemStack(
|
||||||
|
Item.getItemById(tag.getInteger(NBT_ITEM_TYPE)),
|
||||||
|
tag.getInteger(NBT_ITEM_QUANTITY),
|
||||||
|
tag.getInteger(NBT_ITEM_DAMAGE),
|
||||||
|
tag.hasKey(NBT_ITEM_CAPS) ? tag.getCompoundTag(NBT_ITEM_CAPS) : null
|
||||||
|
);
|
||||||
|
|
||||||
|
stack.setTagCompound(tag.hasKey(NBT_ITEM_NBT) ? tag.getCompoundTag(NBT_ITEM_NBT) : null);
|
||||||
|
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user