// Drag events by nature only matters when they affect the top inventory. // What you are holding in the cursor is already yours. // If you drag it into your own inventory you are not really taking anything. // If you drag into the top inventory however, you may both give and take. // You "take" by dragging over an existing item (since we don't do any math). protected static List<Entry<ItemStack, Integer>> getChangesDrag(InventoryDragEvent event) { // Create List<Entry<ItemStack, Integer>> ret = new MassiveList<>(); // Fill final Inventory inventory = event.getInventory(); for (Entry<Integer, ItemStack> entry : event.getNewItems().entrySet()) { int rawSlot = entry.getKey(); if (InventoryUtil.isBottomInventory(rawSlot, inventory)) continue; ItemStack take = inventory.getItem(rawSlot); if (isSomething(take)) ret.add(new SimpleEntry<ItemStack, Integer>(take, +take.getAmount())); ItemStack give = entry.getValue(); if (isSomething(give)) ret.add(new SimpleEntry<ItemStack, Integer>(give, -give.getAmount())); } // Return return ret; }