Fix Sigil of Holding crash when opening gui (#1056)

This commit is contained in:
Nicholas Ignoffo 2017-02-20 13:13:15 -08:00
parent 5475549c18
commit 58d11dfbdc
2 changed files with 22 additions and 21 deletions

View file

@ -7,20 +7,21 @@ import net.minecraft.inventory.IInventory;
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;
import net.minecraft.util.NonNullList;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentString;
public class ItemInventory implements IInventory public class ItemInventory implements IInventory
{ {
protected int[] syncedSlots = new int[0]; protected int[] syncedSlots = new int[0];
private ItemStack[] inventory; private NonNullList<ItemStack> inventory;
private int size; private int size;
private String name; private String name;
protected ItemStack masterStack; protected ItemStack masterStack;
public ItemInventory(ItemStack masterStack, int size, String name) public ItemInventory(ItemStack masterStack, int size, String name)
{ {
this.inventory = new ItemStack[size]; this.inventory = NonNullList.withSize(size, ItemStack.EMPTY);
this.size = size; this.size = size;
this.name = name; this.name = name;
this.masterStack = masterStack; this.masterStack = masterStack;
@ -51,7 +52,7 @@ public class ItemInventory implements IInventory
public void readFromNBT(NBTTagCompound tagCompound) public void readFromNBT(NBTTagCompound tagCompound)
{ {
NBTTagList tags = tagCompound.getTagList(Constants.NBT.ITEMS, 10); 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++) for (int i = 0; i < tags.tagCount(); i++)
{ {
@ -60,9 +61,9 @@ public class ItemInventory implements IInventory
NBTTagCompound data = tags.getCompoundTagAt(i); NBTTagCompound data = tags.getCompoundTagAt(i);
byte j = data.getByte(Constants.NBT.SLOT); 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(); 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(); NBTTagCompound data = new NBTTagCompound();
data.setByte(Constants.NBT.SLOT, (byte) i); data.setByte(Constants.NBT.SLOT, (byte) i);
inventory[i].writeToNBT(data); inventory.get(i).writeToNBT(data);
tags.appendTag(data); tags.appendTag(data);
} }
} }
@ -117,28 +118,28 @@ public class ItemInventory implements IInventory
@Override @Override
public ItemStack getStackInSlot(int index) public ItemStack getStackInSlot(int index)
{ {
return inventory[index]; return inventory.get(index);
} }
@Override @Override
public ItemStack decrStackSize(int index, int count) public ItemStack decrStackSize(int index, int count)
{ {
if (!inventory[index].isEmpty()) if (!inventory.get(index).isEmpty())
{ {
// if (!worldObj.isRemote) // if (!worldObj.isRemote)
// worldObj.markBlockForUpdate(this.pos); // worldObj.markBlockForUpdate(this.pos);
if (inventory[index].getCount() <= count) if (inventory.get(index).getCount() <= count)
{ {
ItemStack itemStack = inventory[index]; ItemStack itemStack = inventory.get(index);
inventory[index] = ItemStack.EMPTY; inventory.set(index, ItemStack.EMPTY);
markDirty(); markDirty();
return itemStack; return itemStack;
} }
ItemStack itemStack = inventory[index].splitStack(count); ItemStack itemStack = inventory.get(index).splitStack(count);
if (inventory[index].isEmpty()) if (inventory.get(index).isEmpty())
inventory[index] = ItemStack.EMPTY; inventory.set(index, ItemStack.EMPTY);
markDirty(); markDirty();
return itemStack; return itemStack;
@ -150,9 +151,9 @@ public class ItemInventory implements IInventory
@Override @Override
public ItemStack removeStackFromSlot(int slot) 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); setInventorySlotContents(slot, ItemStack.EMPTY);
return itemStack; return itemStack;
} }
@ -162,7 +163,7 @@ public class ItemInventory implements IInventory
@Override @Override
public void setInventorySlotContents(int slot, ItemStack stack) public void setInventorySlotContents(int slot, ItemStack stack)
{ {
inventory[slot] = stack; inventory.set(slot, stack);
if (stack.getCount() > getInventoryStackLimit()) if (stack.getCount() > getInventoryStackLimit())
stack.setCount(getInventoryStackLimit()); stack.setCount(getInventoryStackLimit());
markDirty(); markDirty();
@ -221,7 +222,7 @@ public class ItemInventory implements IInventory
@Override @Override
public void clear() public void clear()
{ {
this.inventory = new ItemStack[size]; this.inventory = NonNullList.withSize(getSizeInventory(), ItemStack.EMPTY);
} }
@Override @Override

View file

@ -16,7 +16,7 @@ public class TileFilteredRoutingNode extends TileRoutingNode implements ISidedIn
public int currentActiveSlot = 0; public int currentActiveSlot = 0;
public int[] priorities = new int[6]; 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) public TileFilteredRoutingNode(int size, String name)
{ {