package mcjty.rftools.blocks.storage; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; public class RemoteStorageItemInventory implements IInventory { private ItemStack stacks[] = new ItemStack[RemoteStorageItemContainer.MAXSIZE_STORAGE]; private final EntityPlayer entityPlayer; public RemoteStorageItemInventory(EntityPlayer player) { this.entityPlayer = player; } private RemoteStorageTileEntity getRemoteStorage() { int id = getStorageID(); if (id == -1) { return null; } return RemoteStorageIdRegistry.getRemoteStorage(entityPlayer.worldObj, id); } private int getStorageID() { if (entityPlayer.getHeldItem() == null || entityPlayer.getHeldItem().getTagCompound() == null) { return -1; } return entityPlayer.getHeldItem().getTagCompound().getInteger("id"); } private boolean isServer() { return !entityPlayer.worldObj.isRemote; } private ItemStack[] getStacks() { if (isServer()) { RemoteStorageTileEntity storage = getRemoteStorage(); if (storage == null) { return new ItemStack[0]; } int si = storage.findRemoteIndex(getStorageID()); if (si == -1) { return new ItemStack[0]; } return storage.getRemoteStacks(si); } else { int maxSize = entityPlayer.getHeldItem().getTagCompound().getInteger("maxSize"); if (maxSize != stacks.length) { stacks = new ItemStack[maxSize]; } return stacks; } } @Override public int getSizeInventory() { if (isServer()) { RemoteStorageTileEntity storage = getRemoteStorage(); if (storage == null) { return 0; } int si = storage.findRemoteIndex(getStorageID()); if (si == -1) { return 0; } int maxStacks = storage.getMaxStacks(si); entityPlayer.getHeldItem().getTagCompound().setInteger("maxSize", maxStacks); return maxStacks; } else { return entityPlayer.getHeldItem().getTagCompound().getInteger("maxSize"); } } @Override public ItemStack getStackInSlot(int index) { if (isServer()) { RemoteStorageTileEntity storage = getRemoteStorage(); if (storage == null) { return null; } int si = storage.findRemoteIndex(getStorageID()); if (si == -1) { return null; } return storage.getRemoteSlot(si, index); } else { return stacks[index]; } } @Override public ItemStack decrStackSize(int index, int amount) { if (isServer()) { RemoteStorageTileEntity storage = getRemoteStorage(); if (storage == null) { return null; } int si = storage.findRemoteIndex(getStorageID()); if (si == -1) { return null; } return storage.decrStackSizeRemote(si, index, amount); } else { if (index >= stacks.length) { return null; } if (stacks[index] != null) { markDirty(); if (stacks[index].stackSize <= amount) { ItemStack old = stacks[index]; stacks[index] = null; return old; } ItemStack its = stacks[index].splitStack(amount); if (stacks[index].stackSize == 0) { stacks[index] = null; } return its; } } return null; } @Override public ItemStack getStackInSlotOnClosing(int index) { return null; } @Override public void setInventorySlotContents(int index, ItemStack stack) { if (isServer()) { RemoteStorageTileEntity storage = getRemoteStorage(); if (storage == null) { return; } int si = storage.findRemoteIndex(getStorageID()); if (si == -1) { return; } storage.updateRemoteSlot(si, getInventoryStackLimit(), index, stack); } else { if (index >= stacks.length) { return; } stacks[index] = stack; if (stack != null && stack.stackSize > getInventoryStackLimit()) { stack.stackSize = getInventoryStackLimit(); } markDirty(); } } @Override public String getInventoryName() { return "remote storage"; } @Override public boolean hasCustomInventoryName() { return false; } @Override public int getInventoryStackLimit() { return 64; } @Override public void markDirty() { RemoteStorageTileEntity storage = getRemoteStorage(); if (storage != null) { storage.markDirty(); } } @Override public boolean isUseableByPlayer(EntityPlayer player) { return true; } @Override public void openInventory() { } @Override public void closeInventory() { } @Override public boolean isItemValidForSlot(int index, ItemStack stack) { ItemStack[] s = getStacks(); if (index >= s.length) { return false; } if (isServer()) { RemoteStorageTileEntity storage = getRemoteStorage(); if (storage == null) { return false; } int si = storage.findRemoteIndex(getStorageID()); if (si == -1) { return false; } if (index >= storage.getMaxStacks(si)) { return false; } } return true; } }