package com.jaquadro.minecraft.gardencontainers.inventory; import com.jaquadro.minecraft.gardencontainers.block.tile.TileEntityPotteryTable; import com.jaquadro.minecraft.gardencontainers.core.ModBlocks; import com.jaquadro.minecraft.gardencontainers.item.crafting.PotteryManager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryCraftResult; import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import java.util.ArrayList; import java.util.List; public class ContainerPotteryTable extends Container { private static final int InventoryX = 10; private static final int InventoryY = 140; private static final int HotbarY = 198; private static final int StorageX1 = 26; private static final int StorageY1 = 18; private static final int StorageX2 = 138; private static final int StorageY2 = StorageY1; private IInventory tableInventory; private IInventory craftResult = new InventoryCraftResult(); private Slot inputSlot1; private Slot inputSlot2; private Slot outputSlot; private List<Slot> storageSlots; private List<Slot> playerSlots; private List<Slot> hotbarSlots; public ContainerPotteryTable (InventoryPlayer inventory, TileEntityPotteryTable tileEntity) { tableInventory = new InventoryPottery(tileEntity, this); inputSlot1 = addSlotToContainer(new Slot(tableInventory, 0, 50, 44)); inputSlot2 = addSlotToContainer(new Slot(tableInventory, 1, 50, 80)); outputSlot = addSlotToContainer(new SlotPottery(inventory.player, tableInventory, craftResult, 2, 110, 62)); storageSlots = new ArrayList<Slot>(); for (int i = 0; i < 6; i++) storageSlots.add(addSlotToContainer(new Slot(tableInventory, 3 + i, StorageX1, StorageY1 + i * 18))); for (int i = 0; i < 6; i++) storageSlots.add(addSlotToContainer(new Slot(tableInventory, 9 + i, StorageX2, StorageY2 + i * 18))); 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 tableInventory.isUseableByPlayer(player); } @Override public void onCraftMatrixChanged (IInventory inventory) { ItemStack pattern = tableInventory.getStackInSlot(0); ItemStack target = tableInventory.getStackInSlot(1); if (target != null && target.getItem() == Item.getItemFromBlock(Blocks.clay)) { if (pattern == null) { craftResult.setInventorySlotContents(0, new ItemStack(ModBlocks.largePot, 1, 1)); return; } else if (PotteryManager.instance().isRegisteredPattern(pattern)) target = new ItemStack(ModBlocks.largePot, target.stackSize, 1); } if (pattern != null && pattern.getItem() == Items.dye) { if (target != null && target.getItem() == Item.getItemFromBlock(ModBlocks.largePot) && (target.getItemDamage() & 15) == 0) { craftResult.setInventorySlotContents(0, new ItemStack(ModBlocks.largePotColored, 1, target.getItemDamage() | pattern.getItemDamage())); return; } } craftResult.setInventorySlotContents(0, PotteryManager.instance().getStampResult(pattern, target)); } @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 output into inventory and signal change if (slotIndex == outputSlot.slotNumber) { if (!mergeItemStack(slotStack, inventoryStart, hotbarEnd, true)) return null; slot.onSlotChange(slotStack, itemStack); } // Try merge stacks within inventory and hotbar spaces else 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; } }