package com.minemaarten.advancedmod.inventory; import java.util.List; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import com.minemaarten.advancedmod.network.MessageHandleTextUpdate; import com.minemaarten.advancedmod.network.NetworkHandler; import com.minemaarten.advancedmod.tileentity.TileEntityCamoMine; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class ContainerCamoMine extends ContainerAdvancedMod{ private final TileEntityCamoMine te; private int lastTimer = -1; private String lastTarget = ""; public ContainerCamoMine(InventoryPlayer playerInventory, TileEntityCamoMine te){ addSlotToContainer(new SlotCamouflage(te, 0, 80, 58)); addSlotToContainer(new SlotCamouflage(te, 1, 80, 22)); addSlotToContainer(new SlotCamouflage(te, 2, 80, 40)); addSlotToContainer(new SlotCamouflage(te, 3, 62, 40)); addSlotToContainer(new SlotCamouflage(te, 4, 98, 40)); addSlotToContainer(new SlotCamouflage(te, 5, 102, 18)); addPlayerSlots(playerInventory, 8, 84); this.te = te; } @Override public boolean canInteractWith(EntityPlayer player){ return te.isUseableByPlayer(player); } @Override public void detectAndSendChanges(){ super.detectAndSendChanges(); if(lastTimer != te.getTimer()) { for(ICrafting crafter : (List<ICrafting>)crafters) { crafter.sendProgressBarUpdate(this, 0, te.getTimer()); } lastTimer = te.getTimer(); } if(!lastTarget.equals(te.getTarget())) { for(Object crafter : crafters) { if(crafter instanceof EntityPlayerMP) { NetworkHandler.sendTo(new MessageHandleTextUpdate(te, 0, te.getTarget()), (EntityPlayerMP)crafter); } } lastTarget = te.getTarget(); } } @Override @SideOnly(Side.CLIENT) public void updateProgressBar(int id, int value){ super.updateProgressBar(id, value); if(id == 0) { te.setTimer(value); } } /** * Called when a player shift-clicks on a slot. You must override this or you will crash when someone does that. */ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex){ ItemStack itemstack = null; Slot slot = (Slot)inventorySlots.get(slotIndex); if(slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); //From here change accordingly... if(slotIndex < 6) { if(!mergeItemStack(itemstack1, 6, 42, true)) { return null; } } else { //Shift click single items only. if(itemstack1.stackSize == 1) { for(int i = 0; i < 6; i++) { Slot shiftedInSlot = (Slot)inventorySlots.get(i); if(!shiftedInSlot.getHasStack() && shiftedInSlot.isItemValid(itemstack1)) mergeItemStack(itemstack1, i, i + 1, false); } } } //...till here. if(itemstack1.stackSize == 0) { slot.putStack((ItemStack)null); } else { slot.onSlotChanged(); } if(itemstack1.stackSize == itemstack.stackSize) { return null; } slot.onPickupFromSlot(player, itemstack1); } return itemstack; } }