package com.jaquadro.minecraft.gardencore.inventory;
import com.jaquadro.minecraft.gardencore.block.tile.TileEntityGarden;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import java.util.ArrayList;
import java.util.List;
public class ContainerGarden extends Container
{
private static final int InventoryX = 8;
private static final int InventoryY = 122;
private static final int HotbarY = 180;
private static final int StorageX = 44;
private static final int StorageY = 18;
private static final int SubstrateX = 17;
private static final int SubstrateY = 86;
private static final int CoverX = 143;
private static final int CoverY = SubstrateY;
private static final int[] storageSlotIndex = new int[] {
0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
};
private static final int[] storageXIndex = new int[] {
2, 1, 3, 1, 3, 0, 2, 4, 4, 4, 2, 0, 0
};
private static final int[] storageYIndex = new int[] {
2, 1, 1, 3, 3, 0, 0, 0, 2, 4, 4, 4, 2
};
private IInventory gardenInventory;
private Slot substrateSlot;
private Slot coverSlot;
private List<Slot> storageSlots;
private List<Slot> playerSlots;
private List<Slot> hotbarSlots;
public ContainerGarden (InventoryPlayer inventory, TileEntityGarden tileEntity) {
gardenInventory = new InventoryGarden(tileEntity, this);
coverSlot = addSlotToContainer(new Slot(gardenInventory, 1, CoverX, CoverY));
storageSlots = new ArrayList<Slot>();
for (int i = 0; i < storageSlotIndex.length; i++) {
if (tileEntity.isSlotValid(storageSlotIndex[i]))
storageSlots.add(addSlotToContainer(new PlantSlot(gardenInventory, storageSlotIndex[i], StorageX + 18 * storageXIndex[i], StorageY + 18 * storageYIndex[i])));
}
playerSlots = new ArrayList<Slot>();
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 9; j++)
playerSlots.add(addSlotToContainer(new Slot(inventory, j + i * 9 + 9, InventoryX + j * 18, InventoryY + i * 18)));
}
hotbarSlots = new ArrayList<Slot>();
for (int i = 0; i < 9; i++)
hotbarSlots.add(addSlotToContainer(new Slot(inventory, i, InventoryX + i * 18, HotbarY)));
}
@Override
public boolean canInteractWith (EntityPlayer player) {
return gardenInventory.isUseableByPlayer(player);
}
/*@Override
public boolean canDragIntoSlot (Slot slot) {
return super.canDragIntoSlot(slot);
}*/
@Override
public ItemStack transferStackInSlot (EntityPlayer player, int slotIndex) {
ItemStack itemStack = null;
Slot slot = (Slot) inventorySlots.get(slotIndex);
// Assume inventory and hotbar slot IDs are contiguous
int inventoryStart = playerSlots.get(0).slotNumber;
int hotbarStart = hotbarSlots.get(0).slotNumber;
int hotbarEnd = hotbarSlots.get(hotbarSlots.size() - 1).slotNumber + 1;
if (slot != null && slot.getHasStack()) {
ItemStack slotStack = slot.getStack();
itemStack = slotStack.copy();
// Try merge stacks within inventory and hotbar spaces
if (slotIndex >= inventoryStart && slotIndex < hotbarEnd) {
if (slotIndex >= inventoryStart && slotIndex < hotbarStart) {
if (!mergeItemStack(slotStack, hotbarStart, hotbarEnd, false))
return null;
}
else if (slotIndex >= hotbarStart && slotIndex < hotbarEnd && !this.mergeItemStack(slotStack, inventoryStart, hotbarStart, false))
return null;
}
// Try merge stack into inventory
else if (!mergeItemStack(slotStack, inventoryStart, hotbarEnd, false))
return null;
if (slotStack.stackSize == 0)
slot.putStack(null);
else
slot.onSlotChanged();
if (slotStack.stackSize == itemStack.stackSize)
return null;
slot.onPickupFromSlot(player, slotStack);
}
return itemStack;
}
}