Фильтр в слоте и перенос в слот с модификатором клика = 1 (c шифтом)

Версия Minecraft
1.7.10
API
Forge
Есть контейнер с 4мя слотами. Если предмет берется рукой то данный фильтр работает.
Java:
@Override
    public boolean isItemValid(ItemStack is) {
        return is != null && is.getItem() == AddedItemsBlocks.canister && is.getItemDamage() == getSlotIndex()+1;
    }

Суть: Контейнер из 4х слотов. Итемы с 4мя суб-ид. id слота должен быть = суб-ид итема => и только тогда предмет попадёт в слот.

А вот с переносом с шифтом уже сложнее. Так как я видимо не беру вещь в руку, то и проверка не срабатывает.

Класс Контейнера:

Java:
package frederic.extraaccessories.inventory;

import frederic.extraaccessories.items.ItemHeartAmulet;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;

public class ContainerHeartAmulet extends Container {
    private InventoryItemStorage inv;
    private int numRows;

    public ContainerHeartAmulet(EntityPlayer player, InventoryItemStorage inventoryItemStorage) {
        inv = inventoryItemStorage;

        inv.openInventory();
        numRows = inv.getSizeInventory() / 4;
        int i = (numRows - 4) * 4;
        int j;
        int k;
        int num = 0;
        int num0 = 0;

        for (int id = 0; id < 4; ++id) {
            addSlotToContainer(new StorageSlot(inv, id, 53 + (id / 1) * 18, 23 + (id / 4) * 1));
        }

        int slotIn = player.inventory.currentItem;
        int slotCounter = 0;

        for (j = 0; j < 9; ++j, ++slotCounter) {

            addSlotToContainer(slotCounter == slotIn ? new SlotNoTakeStorage(player.inventory, j, 8 + j * 18, 154 + i)
                    : new Slot(player.inventory, j, 8 + j * 18, 154 + i));
        }

        for (j = 0; j < 3; ++j) {
            for (k = 0; k < 9; ++k, ++slotCounter) {
                addSlotToContainer(slotCounter == slotIn
                        ? new SlotNoTakeStorage(player.inventory, k + j * 9 + 9, 8 + k * 18, 96 + j * 18 + i)
                        : new Slot(player.inventory, k + j * 9 + 9, 8 + k * 18, 96 + j * 18 + i));
            }
        }

    }

    @Override
    public boolean canInteractWith(EntityPlayer player) {
        return inv.isUseableByPlayer(player);
    }

    @Override
        public ItemStack transferStackInSlot(EntityPlayer player, int slot_i) {
            ItemStack is = null;
            Slot slot = (Slot)inventorySlots.get(slot_i);

            if (slot != null && slot.getHasStack()) {
                ItemStack is1 = slot.getStack();
                is = is1.copy();
                if (is1.getItem() instanceof ItemHeartAmulet)
                    return null;
                if (slot_i < inv.getSizeInventory())
                {
                    if (!this.mergeItemStack(is1, inv.getSizeInventory(), inventorySlots.size(), true))
                        return null;
                }
                else
                {
                    if (!this.mergeItemStack(is1, 0, inv.getSizeInventory(), false))
                        return null;
                }
                if (is1.stackSize <= 0)
                    slot.putStack(null);
                else
                    slot.onSlotChanged();
                slot.onPickupFromSlot(player, is1);
            }
            return is;
        }

    @Override
    public ItemStack slotClick(int slot, int button, int modifier, EntityPlayer player) {
        if (modifier == 2)
            return null;
        //if (modifier == 1)    return null;
        return super.slotClick(slot, button, modifier, player);
    }

    @Override
    public void onContainerClosed(EntityPlayer player) {
        super.onContainerClosed(player);
        inv.closeInventory();
    }

    public void update(EntityPlayer player) {
        if (inv != null)
            inv.update(player);
    }
}
 
Сверху