package mcjty.gearswap.varia; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; /** * This code is copied from EnderIO. Thanks! * It is used to solve some problems with the baubles api (the * inventory misbehaving). */ public class ShadowInventory implements IInventory { private final ItemStack[] items; private final IInventory master; public ShadowInventory(IInventory master) { this.master = master; items = new ItemStack[master.getSizeInventory()]; for (int i = 0; i < master.getSizeInventory(); i++) { items[i] = master.getStackInSlot(i); } } @Override public int getSizeInventory() { return master.getSizeInventory(); } @Override public ItemStack getStackInSlot(int index) { return items[index]; } @Override public ItemStack decrStackSize(int index, int amount) { return decrStackSize(this, index, amount); } public static ItemStack decrStackSize(IInventory inv, int slot, int size) { ItemStack item = inv.getStackInSlot(slot); if(item != null) { if(item.stackSize <= size) { inv.setInventorySlotContents(slot, null); inv.markDirty(); return item; } else { ItemStack itemstack1 = item.splitStack(size); if(item.stackSize == 0) { inv.setInventorySlotContents(slot, null); } else { inv.setInventorySlotContents(slot, item); } inv.markDirty(); return itemstack1; } } else { return null; } } @Override public ItemStack getStackInSlotOnClosing(int index) { ItemStack stack = getStackInSlot(index); setInventorySlotContents(index, (ItemStack) null); return stack; } @Override public void setInventorySlotContents(int index, ItemStack stack) { items[index] = stack; } @Override public String getInventoryName() { return master.getInventoryName(); } @Override public boolean hasCustomInventoryName() { return master.hasCustomInventoryName(); } @Override public int getInventoryStackLimit() { return master.getInventoryStackLimit(); } @Override public void markDirty() { } @Override public boolean isUseableByPlayer(EntityPlayer player) { return master.isUseableByPlayer(player); } @Override public void openInventory() { master.openInventory(); } @Override public void closeInventory() { master.closeInventory(); } @Override public boolean isItemValidForSlot(int index, ItemStack stack) { return master.isItemValidForSlot(index, stack); } }