package advancedsystemsmanager.containers; import advancedsystemsmanager.api.network.IPacketSync; import advancedsystemsmanager.api.tileentities.ITileInterfaceProvider; import advancedsystemsmanager.network.ASMPacket; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; 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; import net.minecraft.tileentity.TileEntity; import java.util.List; public abstract class ContainerBase<T extends TileEntity & ITileInterfaceProvider> extends Container { protected T te; int playerInventoryEnd; private InventoryPlayer player; public ContainerBase(T te, InventoryPlayer player) { this.te = te; this.player = player; } protected void bindPlayerInventory(int x, int y) { for (int i = 0; i < 9; i++) { addSlotToContainer(new Slot(player, i, x + i * 18, y + 58)); } for (int i = 0; i < 3; i++) { for (int j = 0; j < 9; j++) { addSlotToContainer(new Slot(player, j + i * 9 + 9, x + j * 18, y + i * 18)); } } playerInventoryEnd = inventorySlots.size(); } public void updateServer(ASMPacket message, EntityPlayerMP player) { message.sendPlayerPackets(te.readData(message, player), this); } public void updateClient(ASMPacket message, EntityPlayer player) { te.readData(message, player); } public T getTileEntity() { return te; } public ITileInterfaceProvider getInterface() { return te; } public List<ICrafting> getCrafters() { return crafters; } @SideOnly(Side.CLIENT) public void sendFinalUpdate(IPacketSync element) { } @Override public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int slot) { Slot slotObject = (Slot)inventorySlots.get(slot); ItemStack stack = null; if (slotObject != null && slotObject.getHasStack()) { ItemStack stackInSlot = slotObject.getStack(); stack = stackInSlot.copy(); if (slot < playerInventoryEnd) { if (!mergeItemStack(stackInSlot, playerInventoryEnd, inventorySlots.size(), false)) { return null; } } else { if (!mergeItemStack(stackInSlot, 0, playerInventoryEnd, false)) { return null; } } if (stackInSlot.stackSize == 0) { slotObject.putStack(null); } else { slotObject.onSlotChanged(); } if (stackInSlot.stackSize == stack.stackSize) { return null; } slotObject.onPickupFromSlot(entityPlayer, stackInSlot); } return stack; } @Override public boolean canInteractWith(EntityPlayer entityplayer) { return entityplayer.getDistanceSq(te.xCoord, te.yCoord, te.zCoord) <= 64; } }