예제 #1
0
  // 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;
  }