package shedar.mods.ic2.nuclearcontrol.containers; import shedar.mods.ic2.nuclearcontrol.SlotFilter; import shedar.mods.ic2.nuclearcontrol.tileentities.TileEntityRemoteThermo; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; public class ContainerRemoteThermo extends Container { public TileEntityRemoteThermo remoteThermo; private EntityPlayer player; private double lastEnergy = -1; public ContainerRemoteThermo(EntityPlayer player, TileEntityRemoteThermo remoteThermo) { super(); this.remoteThermo = remoteThermo; this.player = player; //energy charger addSlotToContainer(new SlotFilter(remoteThermo, 0, 13, 53)); //upgrades addSlotToContainer(new SlotFilter(remoteThermo, 1, 190, 8)); addSlotToContainer(new SlotFilter(remoteThermo, 2, 190, 26)); addSlotToContainer(new SlotFilter(remoteThermo, 3, 190, 44)); addSlotToContainer(new SlotFilter(remoteThermo, 4, 190, 62)); //inventory for (int i = 0; i < 3; i++) { for (int k = 0; k < 9; k++) { addSlotToContainer(new Slot(player.inventory, k + i * 9 + 9, 27 + k * 18, 84 + i * 18)); } } for (int j = 0; j < 9; j++) { addSlotToContainer(new Slot(player.inventory, j, 27 + j * 18, 142)); } } @Override public void detectAndSendChanges() { super.detectAndSendChanges(); int energy = (int)remoteThermo.energy; //? for (int i = 0; i < crafters.size(); i++) { ICrafting crafting = (ICrafting)crafters.get(i); if (lastEnergy != energy) { crafting.sendProgressBarUpdate(this, 0, energy); } } lastEnergy = energy; } public void updateProgressBar(int type, int value) { if (type == 0) { remoteThermo.setEnergy(value); } } @Override public boolean canInteractWith(EntityPlayer var1) { return remoteThermo.isUseableByPlayer(player); } @Override public ItemStack transferStackInSlot(EntityPlayer p, int slotId) { Slot slot = (Slot)this.inventorySlots.get(slotId); if (slot != null) { ItemStack items = slot.getStack(); if (items != null) { int initialCount = items.stackSize; if(slotId < remoteThermo.getSizeInventory())//moving from thermo to inventory { mergeItemStack(items, remoteThermo.getSizeInventory(), inventorySlots.size(), false); if (items.stackSize == 0) { slot.putStack((ItemStack)null); } else { slot.onSlotChanged(); if (initialCount != items.stackSize) return items; } } else//moving from inventory to thermo { for(int i = 0; i < remoteThermo.getSizeInventory();i++) { if (!remoteThermo.isItemValid(i, items)) { continue; } ItemStack targetStack = remoteThermo.getStackInSlot(i); if (targetStack == null) { Slot targetSlot = (Slot)this.inventorySlots.get(i); targetSlot.putStack(items); slot.putStack((ItemStack)null); break; } else if (items.isStackable() && items.isItemEqual(targetStack)) { mergeItemStack(items, i, i + 1, false); if (items.stackSize == 0) { slot.putStack((ItemStack)null); } else { slot.onSlotChanged(); if (initialCount != items.stackSize) return items; } break; } } } } } return null; } }