/* * The MIT License (MIT) * * Copyright (c) 2014 Cayde Dixon * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ package net.cazzar.mods.jukeboxreloaded.gui; import net.cazzar.mods.jukeboxreloaded.blocks.TileJukebox; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemRecord; import net.minecraft.item.ItemStack; public class ContainerJukebox extends Container { protected static final int PLAYER_INVENTORY_ROWS = 3; protected static final int PLAYER_INVENTORY_COLUMNS = 9; protected static final int INVENTORY_ROWS = 3; protected static final int INVENTORY_COLUMNS = 4; TileJukebox tileJukebox; public ContainerJukebox(InventoryPlayer inventoryPlayer, TileJukebox tile) { tileJukebox = tile; int slot = 0; for (int col = 0; col < INVENTORY_ROWS; ++col) for (int row = 0; row < INVENTORY_COLUMNS; ++row) // IInventory inv, int slot, int x, int y addSlotToContainer(new Slot(tile, slot++, 54 + row * 18, 17 + col * 18)); // offset corner * index * width to same point of slot // Add the player's inventory slots to the container for (int inventoryRowIndex = 0; inventoryRowIndex < PLAYER_INVENTORY_ROWS; ++inventoryRowIndex) for (int inventoryColumnIndex = 0; inventoryColumnIndex < PLAYER_INVENTORY_COLUMNS; ++inventoryColumnIndex) addSlotToContainer(new net.minecraft.inventory.Slot( inventoryPlayer, inventoryColumnIndex + inventoryRowIndex * 9 + 9, 8 + inventoryColumnIndex * 18, 94 + inventoryRowIndex * 18 )); // Add the player's action bar slots to the container for (int actionBarSlotIndex = 0; actionBarSlotIndex < PLAYER_INVENTORY_COLUMNS; ++actionBarSlotIndex) addSlotToContainer(new net.minecraft.inventory.Slot( inventoryPlayer, actionBarSlotIndex, 8 + actionBarSlotIndex * 18, 152)); } @Override public boolean canInteractWith(EntityPlayer entityplayer) { return true; } @Override public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int i) { ItemStack itemstack = null; final net.minecraft.inventory.Slot slot = (net.minecraft.inventory.Slot) inventorySlots .get(i); if (slot != null && slot.getHasStack()) { final ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); final int chestSlots = tileJukebox.getSizeInventory(); if (i < chestSlots) { if (!mergeItemStack(itemstack1, chestSlots, inventorySlots.size(), true)) return null; } else if (!mergeItemStack(itemstack1, 0, chestSlots, false)) return null; if (itemstack1.stackSize == 0) slot.putStack(null); else slot.onSlotChanged(); } return itemstack; } @Override protected boolean mergeItemStack(ItemStack par1ItemStack, int par2, int par3, boolean par4) { return par1ItemStack.getItem() instanceof ItemRecord && super.mergeItemStack(par1ItemStack, par2, par3, par4); } }