From 58d11dfbdc00ae37e2d5071e68d7fbd206a4d1ae Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 20 Feb 2017 13:13:15 -0800 Subject: [PATCH] Fix Sigil of Holding crash when opening gui (#1056) --- .../item/inventory/ItemInventory.java | 41 ++++++++++--------- .../tile/routing/TileFilteredRoutingNode.java | 2 +- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/item/inventory/ItemInventory.java b/src/main/java/WayofTime/bloodmagic/item/inventory/ItemInventory.java index ff9a64e6..36e7af47 100644 --- a/src/main/java/WayofTime/bloodmagic/item/inventory/ItemInventory.java +++ b/src/main/java/WayofTime/bloodmagic/item/inventory/ItemInventory.java @@ -7,20 +7,21 @@ import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.NonNullList; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; public class ItemInventory implements IInventory { protected int[] syncedSlots = new int[0]; - private ItemStack[] inventory; + private NonNullList inventory; private int size; private String name; protected ItemStack masterStack; public ItemInventory(ItemStack masterStack, int size, String name) { - this.inventory = new ItemStack[size]; + this.inventory = NonNullList.withSize(size, ItemStack.EMPTY); this.size = size; this.name = name; this.masterStack = masterStack; @@ -51,7 +52,7 @@ public class ItemInventory implements IInventory public void readFromNBT(NBTTagCompound tagCompound) { NBTTagList tags = tagCompound.getTagList(Constants.NBT.ITEMS, 10); - inventory = new ItemStack[getSizeInventory()]; + inventory = NonNullList.withSize(getSizeInventory(), ItemStack.EMPTY); for (int i = 0; i < tags.tagCount(); i++) { @@ -60,9 +61,9 @@ public class ItemInventory implements IInventory NBTTagCompound data = tags.getCompoundTagAt(i); byte j = data.getByte(Constants.NBT.SLOT); - if (j >= 0 && j < inventory.length) + if (j >= 0 && j < inventory.size()) { - inventory[j] = new ItemStack(data); + inventory.set(i, new ItemStack(data)); } } } @@ -72,13 +73,13 @@ public class ItemInventory implements IInventory { NBTTagList tags = new NBTTagList(); - for (int i = 0; i < inventory.length; i++) + for (int i = 0; i < inventory.size(); i++) { - if ((inventory[i] != null) && !isSyncedSlot(i)) + if ((!inventory.get(i).isEmpty()) && !isSyncedSlot(i)) { NBTTagCompound data = new NBTTagCompound(); data.setByte(Constants.NBT.SLOT, (byte) i); - inventory[i].writeToNBT(data); + inventory.get(i).writeToNBT(data); tags.appendTag(data); } } @@ -117,28 +118,28 @@ public class ItemInventory implements IInventory @Override public ItemStack getStackInSlot(int index) { - return inventory[index]; + return inventory.get(index); } @Override public ItemStack decrStackSize(int index, int count) { - if (!inventory[index].isEmpty()) + if (!inventory.get(index).isEmpty()) { // if (!worldObj.isRemote) // worldObj.markBlockForUpdate(this.pos); - if (inventory[index].getCount() <= count) + if (inventory.get(index).getCount() <= count) { - ItemStack itemStack = inventory[index]; - inventory[index] = ItemStack.EMPTY; + ItemStack itemStack = inventory.get(index); + inventory.set(index, ItemStack.EMPTY); markDirty(); return itemStack; } - ItemStack itemStack = inventory[index].splitStack(count); - if (inventory[index].isEmpty()) - inventory[index] = ItemStack.EMPTY; + ItemStack itemStack = inventory.get(index).splitStack(count); + if (inventory.get(index).isEmpty()) + inventory.set(index, ItemStack.EMPTY); markDirty(); return itemStack; @@ -150,9 +151,9 @@ public class ItemInventory implements IInventory @Override public ItemStack removeStackFromSlot(int slot) { - if (!inventory[slot].isEmpty()) + if (!inventory.get(slot).isEmpty()) { - ItemStack itemStack = inventory[slot]; + ItemStack itemStack = inventory.get(slot); setInventorySlotContents(slot, ItemStack.EMPTY); return itemStack; } @@ -162,7 +163,7 @@ public class ItemInventory implements IInventory @Override public void setInventorySlotContents(int slot, ItemStack stack) { - inventory[slot] = stack; + inventory.set(slot, stack); if (stack.getCount() > getInventoryStackLimit()) stack.setCount(getInventoryStackLimit()); markDirty(); @@ -221,7 +222,7 @@ public class ItemInventory implements IInventory @Override public void clear() { - this.inventory = new ItemStack[size]; + this.inventory = NonNullList.withSize(getSizeInventory(), ItemStack.EMPTY); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java index 2fde0510..d63884c2 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java @@ -16,7 +16,7 @@ public class TileFilteredRoutingNode extends TileRoutingNode implements ISidedIn public int currentActiveSlot = 0; public int[] priorities = new int[6]; - public ItemInventory itemInventory = new ItemInventory(null, 9, ""); + public ItemInventory itemInventory = new ItemInventory(ItemStack.EMPTY, 9, ""); public TileFilteredRoutingNode(int size, String name) {