package mcjty.rftools.blocks.storage; import mcjty.lib.container.*; import mcjty.rftools.items.storage.StorageFilterItem; import mcjty.rftools.items.storage.StorageTypeItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; public class ModularStorageContainer extends GenericContainer { public static final String CONTAINER_INVENTORY = "container"; public static final int SLOT_STORAGE_MODULE = 0; public static final int SLOT_TYPE_MODULE = 1; public static final int SLOT_FILTER_MODULE = 2; public static final int SLOT_STORAGE = 3; public static final int MAXSIZE_STORAGE = 300; private ModularStorageTileEntity modularStorageTileEntity; public static final ContainerFactory factory = new ContainerFactory() { @Override protected void setup() { addSlotBox(new SlotDefinition(SlotType.SLOT_SPECIFICITEM, new ItemStack(ModularStorageSetup.storageModuleItem)), CONTAINER_INVENTORY, SLOT_STORAGE_MODULE, 5, 157, 1, 18, 1, 18); addSlotBox(new SlotDefinition(SlotType.SLOT_SPECIFICITEM, StorageTypeItem.class), CONTAINER_INVENTORY, SLOT_TYPE_MODULE, 5, 175, 1, 18, 1, 18); addSlotBox(new SlotDefinition(SlotType.SLOT_SPECIFICITEM, StorageFilterItem.class), CONTAINER_INVENTORY, SLOT_FILTER_MODULE, 5, 193, 1, 18, 1, 18); addSlotBox(new SlotDefinition(SlotType.SLOT_INPUT), CONTAINER_INVENTORY, SLOT_STORAGE, -500, -500, 30, 0, 10, 0); layoutPlayerInventorySlots(91, 157); } }; public ModularStorageContainer(EntityPlayer player, ModularStorageTileEntity containerInventory) { super(factory); modularStorageTileEntity = containerInventory; addInventory(CONTAINER_INVENTORY, containerInventory); addInventory(ContainerFactory.CONTAINER_PLAYER, player.inventory); generateSlots(); } @Override public void generateSlots() { for (SlotFactory slotFactory : factory.getSlots()) { Slot slot; if (slotFactory.getSlotType() == SlotType.SLOT_SPECIFICITEM) { final SlotDefinition slotDefinition = slotFactory.getSlotDefinition(); slot = new Slot(inventories.get(slotFactory.getInventoryName()), slotFactory.getIndex(), slotFactory.getX(), slotFactory.getY()) { @Override public boolean isItemValid(ItemStack stack) { return slotDefinition.itemStackMatches(stack); } }; } else if (slotFactory.getSlotType() == SlotType.SLOT_PLAYERINV || slotFactory.getSlotType() == SlotType.SLOT_PLAYERHOTBAR) { 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 getHasStack() { if (getSlotIndex() >= (modularStorageTileEntity.getMaxSize() + SLOT_STORAGE)) { return false; } return super.getHasStack(); } @Override public ItemStack getStack() { if (getSlotIndex() >= (modularStorageTileEntity.getMaxSize() + SLOT_STORAGE)) { return null; } return super.getStack(); } @Override public boolean canTakeStack(EntityPlayer player) { if (getSlotIndex() >= (modularStorageTileEntity.getMaxSize() + SLOT_STORAGE)) { return false; } return super.canTakeStack(player); } @Override public boolean isItemValid(ItemStack stack) { if (getSlotIndex() >= (modularStorageTileEntity.getMaxSize() + SLOT_STORAGE)) { return false; } if (!modularStorageTileEntity.isItemValidForSlot(getSlotIndex(), stack)) { return false; } return super.isItemValid(stack); } }; } addSlotToContainer(slot); } } @Override public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) { if (index == SLOT_STORAGE_MODULE && !player.worldObj.isRemote) { modularStorageTileEntity.copyToModule(); } return super.slotClick(index, button, mode, player); } }