package minefantasy.container; import minefantasy.block.tileentity.TileEntityAnvil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; public class ContainerAnvil extends Container { private TileEntityAnvil anvil; private boolean hasPlayer; private int lastCookTime = 0; private int lastBurnTime = 0; private int lastItemBurnTime = 0; private int xSize; private int ySize; public ContainerAnvil(TileEntityAnvil tile) { this.anvil = tile; int yMult; if(tile.isBig()) { this.ySize = 204; } int startX = 8; int startY = 8; xSize = tile.gridSize()[0]; ySize = tile.gridSize()[1]; for (yMult = 0; yMult < ySize; ++yMult) { for (int xMult = 0; xMult < xSize; ++xMult) { this.addSlotToContainer(new Slot(tile, xMult + yMult * xSize, startX + xMult * 18, startY + yMult * 18)); } } this.addSlotToContainer(new SlotAnvil(tile.getSmith(), tile, tile.getGridSize(), 144, 35)); } public ContainerAnvil(InventoryPlayer invPlayer, TileEntityAnvil tile) { hasPlayer = invPlayer != null; this.anvil = tile; int yMult; int startX = tile.getPositions()[0][0]; int startY = tile.getPositions()[0][1]; xSize = tile.gridSize()[0]; ySize = tile.gridSize()[1]; for (yMult = 0; yMult < ySize; ++yMult) { for (int xMult = 0; xMult < xSize; ++xMult) { this.addSlotToContainer(new Slot(tile, xMult + yMult * xSize, startX + xMult * 18, startY + yMult * 18)); } } if(invPlayer != null) { this.addSlotToContainer(new SlotAnvil(invPlayer.player, tile, tile.getGridSize(), tile.getPositions()[1][0], tile.getPositions()[1][1])); int var3; for (var3 = 0; var3 < 3; ++var3) { for (int var4 = 0; var4 < 9; ++var4) { this.addSlotToContainer(new Slot(invPlayer, var4 + var3 * 9 + 9, tile.getPositions()[2][0] + var4 * 18, tile.getPositions()[2][1] + var3 * 18)); } } for (var3 = 0; var3 < 9; ++var3) { this.addSlotToContainer(new Slot(invPlayer, var3, tile.getPositions()[2][0] + var3 * 18, tile.getPositions()[2][1] + 58)); } } } /** * Updates crafting matrix; called from onCraftMatrixChanged. Args: none */ public void updateCraftingResults() { super.detectAndSendChanges(); for (int var1 = 0; var1 < this.crafters.size(); ++var1) { ICrafting var2 = (ICrafting)this.crafters.get(var1); if (this.lastCookTime != this.anvil.forgeTime) { var2.sendProgressBarUpdate(this, 0, this.anvil.forgeTime); } } this.lastCookTime = this.anvil.forgeTime; } public void updateProgressBar(int slot, int set) { if (slot == 0) { this.anvil.forgeTime = set; } } public boolean canInteractWith(EntityPlayer par1EntityPlayer) { return this.anvil.isUseableByPlayer(par1EntityPlayer); } @Override public ItemStack transferStackInSlot(EntityPlayer player, int num) { int invSize = xSize * ySize + 1; ItemStack placedItem = null; Slot slot = (Slot)this.inventorySlots.get(num); if (slot != null && slot.getHasStack()) { ItemStack itemSlot = slot.getStack(); placedItem = itemSlot.copy(); //Take if (num < invSize) { if (!this.mergeItemStack(itemSlot, invSize, 36 + invSize, true)) { return null; } slot.onSlotChange(itemSlot, placedItem); } //Put else { if (!this.mergeItemStack(itemSlot, 0, invSize-1, false)) { return null; } slot.onSlotChange(itemSlot, placedItem); } if (itemSlot.stackSize == 0) { slot.putStack((ItemStack)null); } else { slot.onSlotChanged(); } if (itemSlot.stackSize == placedItem.stackSize) { return null; } slot.onPickupFromSlot(player, itemSlot); } return placedItem; } }