package mcjty.rftools.blocks.storage; import mcjty.lib.container.*; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; public class RemoteStorageItemContainer extends GenericContainer { public static final String CONTAINER_INVENTORY = "container"; public static final int MAXSIZE_STORAGE = 300; private EntityPlayer entityPlayer; private int tabletIndex; public static final ContainerFactory factory = new ContainerFactory() { @Override protected void setup() { addSlotBox(new SlotDefinition(SlotType.SLOT_INPUT), CONTAINER_INVENTORY, 0, -500, -500, 30, 0, 10, 0); layoutPlayerInventorySlots(91, 157); } }; public RemoteStorageItemContainer(EntityPlayer player) { super(factory); this.entityPlayer = player; if (isServer()) { int maxStacks = 0; RemoteStorageTileEntity remoteStorageTileEntity = getRemoteStorage(); if (remoteStorageTileEntity != null) { int si = remoteStorageTileEntity.findRemoteIndex(getStorageID()); if (si != -1) { maxStacks = remoteStorageTileEntity.getMaxStacks(si); } } ItemStack stack = player.getHeldItem(); stack.getTagCompound().setInteger("maxSize", maxStacks); } addInventory(CONTAINER_INVENTORY, new RemoteStorageItemInventory(player)); addInventory(ContainerFactory.CONTAINER_PLAYER, player.inventory); tabletIndex = player.inventory.currentItem; generateSlots(); } private RemoteStorageTileEntity getRemoteStorage() { return RemoteStorageIdRegistry.getRemoteStorage(entityPlayer.worldObj, getStorageID()); } private int getStorageID() { // We assume the item is right here return entityPlayer.getHeldItem().getTagCompound().getInteger("id"); } private boolean isServer() { return !entityPlayer.worldObj.isRemote; } @Override public void generateSlots() { for (SlotFactory slotFactory : factory.getSlots()) { Slot slot; if (slotFactory.getSlotType() == SlotType.SLOT_PLAYERHOTBAR) { if (slotFactory.getIndex() == tabletIndex) { slot = new BaseSlot(inventories.get(slotFactory.getInventoryName()), slotFactory.getIndex(), slotFactory.getX(), slotFactory.getY()) { @Override public boolean canTakeStack(EntityPlayer player) { // We don't want to take the stack from this slot. return false; } }; } else { slot = new BaseSlot(inventories.get(slotFactory.getInventoryName()), slotFactory.getIndex(), slotFactory.getX(), slotFactory.getY()); } } else if (slotFactory.getSlotType() == SlotType.SLOT_PLAYERINV) { slot = new BaseSlot(inventories.get(slotFactory.getInventoryName()), slotFactory.getIndex(), slotFactory.getX(), slotFactory.getY()); } else { slot = new BaseSlot(inventories.get(slotFactory.getInventoryName()), slotFactory.getIndex(), slotFactory.getX(), slotFactory.getY()) { @Override public boolean isItemValid(ItemStack stack) { if (isServer()) { RemoteStorageTileEntity storage = getRemoteStorage(); int si = -1; if (storage != null) { si = storage.findRemoteIndex(getStorageID()); } if (si != -1) { entityPlayer.getHeldItem().getTagCompound().setInteger("maxSize", storage.getMaxStacks(si)); return storage.isItemValidForSlot(getSlotIndex(), stack); } else { entityPlayer.getHeldItem().getTagCompound().setInteger("maxSize", 0); return false; } } else { int maxSize = entityPlayer.getHeldItem().getTagCompound().getInteger("maxSize"); if (getSlotIndex() >= maxSize) { return false; } return super.isItemValid(stack); } } }; } addSlotToContainer(slot); } } }