Дроп предмета при ПКМ на слот

Версия Minecraft
1.5.2
Всем всего!

Сделал рюкзак со встроенным верстаком, работает почти все, проблемы только с верстаком. При попытке взять предмет из слота при помощи мыши, он дропается, если кол-во в стаке больше единицы, то дропается один, словно вместо ПКМ тыкаю по "Q". 

Буду благодарен за помощь!

Контейнер с инвентарем:

Код:
public class ContainerBag extends Container{

 public World world;
 public InventoryBag inventory;
 public InventoryCrafting craftMatrix = new InventoryCrafting(this, 3, 3);
    public IInventory craftResult = new InventoryCraftResult();
 public int blockSlot;
 
 public ContainerBag(EntityPlayer player)
 {
 
 int yOffset = - 90; // Смещение слотов сумки по вертикали
 int craftingXOffset = 162; // Смещение сетки крафта по горизонтали
 int craftingYOffset = 30; // Смещение сетки крафта по вертикали
 int slotId = 0; // Используется для нумерации слотов сумки
 int maxAddedSlotId = 0;
 
 this.world = player.worldObj;
 this.inventory = new InventoryBag(player, player.getHeldItem());
 
 // Добавляем 4 ряда слотов по 9 шт в каждом из нашей сумки
 for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 9; ++j)
            {
                this.addSlotToContainer(new SlotBag(inventory, slotId, 8 + j * 18, 84 + i * 18 + yOffset));
                slotId ++;
                maxAddedSlotId ++;
            }
            
        }
 

    this.blockSlot = player.inventory.currentItem + slotId + 27;
 
    
    // Инвентарь вестака: Результат и 9 слотов
    
    
    for (int l = 0; l < 3; ++l)
        {
            for (int i1 = 0; i1 < 3; ++i1)
            {
                this.addSlotToContainer(new Slot(this.craftMatrix, i1 + l * 3, 30 + i1 * 18 + craftingXOffset, 17 + l * 18 + craftingYOffset));
            }
        }
        
    this.addSlotToContainer(new SlotCrafting(player, this.craftMatrix, this.craftResult, 0, 104 + craftingXOffset, 35 + craftingYOffset));
        
    
 // Стандартный инвентарь игрока
 for (int i = 0; i < 3; ++i)
        {
            for (int j = 0; j < 9; ++j)
            {
                this.addSlotToContainer(new Slot(player.inventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
                maxAddedSlotId ++;
            }
        }

        for (int i = 0; i < 9; ++i)
        {
            this.addSlotToContainer(new Slot(player.inventory, i, 8 + i * 18, 142));
            maxAddedSlotId ++;
        }
        
        if (!player.worldObj.isRemote) EldrichMagic.logger.dev_Message(false, "ListSize = "+this.inventorySlots.size()+"/"+this.inventoryItemStacks.size()+". and max id is "+maxAddedSlotId);
 
        this.inventory.openChest();
        
 }
 
 public void onCraftMatrixChanged(IInventory par1IInventory)
    {
        this.craftResult.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(this.craftMatrix, this.world));
    }

    /**
     * Callback for when the crafting gui is closed.
     */
   
 
 @Override
 public void onCraftGuiClosed(EntityPlayer player)
 {
 
 super.onCraftGuiClosed(player);
 this.inventory.saveInventory(this.blockSlot);
 
 if (!world.isRemote)
        {
            for (int i = 0; i < 9; ++i)
            {
                ItemStack itemstack = this.craftMatrix.getStackInSlotOnClosing(i);

                if (itemstack != null)
                {
                    player.dropPlayerItem(itemstack);
                }
            }
        }
 
 }
 
 @Override 
 public ItemStack slotClick(int par1, int par2, int par3, EntityPlayer par4EntityPlayer) {
      return par1 == this.blockSlot?null:super.slotClick(par1, par2, par3, par4EntityPlayer);
   }
 
 @Override
 public boolean canInteractWith(EntityPlayer entityplayer) {
 // TODO Auto-generated method stub
 return true;
 }
 
 public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int slotId)
    {
        return null;
    }
 
 public boolean func_94530_a(ItemStack par1ItemStack, Slot par2Slot)
    {
        return par2Slot.inventory != this.craftResult && super.func_94530_a(par1ItemStack, par2Slot);
    }

}

Код:
public class InventoryBag implements IInventory{

 public int invSize = 72;
 public ItemStack currentBag = null;
 public ItemStack[] inventory = new ItemStack[invSize];
 public EntityPlayer player;
 
 public InventoryBag(EntityPlayer player, ItemStack currentBag)
 {
 
 this.currentBag = currentBag;
 this.player = player;
 
 }
 
 @Override
 public int getSizeInventory() 
 {
 return this.invSize;
 }

 @Override
 public ItemStack getStackInSlot(int slot) 
 {
 return this.inventory[slot];
 }

 @Override
 public ItemStack decrStackSize(int i, int j) 
 {
 return EmUtils.inventory.decrStackSize(i, j, this.inventory);
 }

 @Override
 public ItemStack getStackInSlotOnClosing(int i) 
 {
 return this.inventory[i];
 }

 @Override
 public void setInventorySlotContents(int i, ItemStack itemstack) 
 {
 this.inventory[i] = itemstack;
 }

 @Override
 public String getInvName() 
 {
 return EmUtils.chat.translateToLocal("inventory.bag.name");
 }

 @Override
 public boolean isInvNameLocalized() 
 {
 return true;
 }

 @Override
 public int getInventoryStackLimit() 
 {
 return 64;
 }

 @Override
 public void onInventoryChanged() 
 {
 
 }

 @Override
 public boolean isUseableByPlayer(EntityPlayer entityplayer) 
 {
 return true;
 }

 @Override
 public void openChest() {loadInventory();}

 @Override
 public void closeChest() {}
 
 public void loadInventory()
 {
 
 if (this.currentBag.hasTagCompound())
 {
 
 if (this.currentBag.getTagCompound().hasKey("Inventory"))
 {
 
 if (this.currentBag.getTagCompound().hasKey("Inventory"))
 {
 
 NBTTagList list = this.currentBag.getTagCompound().getTagList("Inventory");
 
 for (int i1 = 0; i1 <= list.tagCount() - 1 && list.tagCount() != 0; i1 ++)
 {
 
 NBTTagCompound item = (NBTTagCompound)list.tagAt(i1);
 int slot = item.getByte("Slot");
 this.inventory[slot] = ItemStack.loadItemStackFromNBT(item);
 
 }
 
 }
 
 }
 
 }
 
 }
 
 public void saveInventory(int slot)
 {
 
 if (this.currentBag.hasTagCompound())
 {
 
 if (this.currentBag.getTagCompound().hasKey("Inventory"))
 this.currentBag.getTagCompound().removeTag("Inventory");
 
 NBTTagList list = new NBTTagList();
 
 for (int i1 = 0; i1 <= this.invSize - 1 && this.inventory.length != 0; i1 ++)
 {
 
 if (this.inventory[i1] != null)
 {

 NBTTagCompound item = new NBTTagCompound();
 
 item.setByte("Slot", (byte)i1);
 this.inventory[i1].writeToNBT(item);
 list.appendTag(item);
 
 }
 
 }
 
 NBTTagCompound tag = this.currentBag.getTagCompound();
 tag.setTag("Inventory", list);
 
 this.currentBag.getTagCompound().setTag("Inventory", list);
 this.currentBag.getTagCompound().setBoolean("Opened", false);
 
 
 ItemStack[] arr$ = this.player.inventory.mainInventory;
         int len$ = arr$.length;

         for(int i$ = 0; i$ < len$; ++i$) {
            ItemStack itemStack = arr$[i$];
            if(itemStack != null && itemStack.getItem() instanceof ItemBag && itemStack.getTagCompound().getBoolean("Opened")) 
            {
             EldrichMagic.logger.dev_Message(true, "fgjlgfjvmlrjfcvmlfj");
             itemStack.setTagCompound(this.currentBag.getTagCompound());
            break;
             
            }
         }
 
 
 EldrichMagic.logger.dev_Message(true, "Helllooo");
 
 }
 
 }

 @Override
 public boolean isStackValidForSlot(int i, ItemStack itemstack) 
 {
 return true;
 }

}
 
Сверху