(InventoryClickEvent e)
| 431 | } |
| 432 | |
| 433 | @EventHandler |
| 434 | public void onClick(InventoryClickEvent e) { |
| 435 | if (!inventory.equals(e.getView().getTopInventory())) { |
| 436 | return; |
| 437 | } |
| 438 | if (e.getAction() == InventoryAction.COLLECT_TO_CURSOR && !e.getClickedInventory().equals(inventory)) { |
| 439 | e.setCancelled(true); |
| 440 | return; |
| 441 | } |
| 442 | if (!inventory.equals(e.getClickedInventory()) && e.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY) { |
| 443 | if (openSlots.size() > 0) { |
| 444 | Map<Integer, ItemStack> slots = new HashMap<>(); |
| 445 | int amount = e.getCurrentItem().getAmount(); |
| 446 | for (int slot : openSlots) { |
| 447 | if (amount <= 0) { |
| 448 | break; |
| 449 | } |
| 450 | ItemStack item = inventory.getItem(slot); |
| 451 | if (item == null) { |
| 452 | int diff = Math.min(amount, e.getCurrentItem().getType().getMaxStackSize()); |
| 453 | amount -= diff; |
| 454 | ItemStack clone = e.getCurrentItem().clone(); |
| 455 | clone.setAmount(diff); |
| 456 | slots.put(slot, clone); |
| 457 | continue; |
| 458 | } |
| 459 | if (e.getCurrentItem().isSimilar(item)) { |
| 460 | int max = item.getType().getMaxStackSize() - item.getAmount(); |
| 461 | int diff = Math.min(max, e.getCurrentItem().getAmount()); |
| 462 | amount -= diff; |
| 463 | ItemStack clone = item.clone(); |
| 464 | clone.setAmount(clone.getAmount() + diff); |
| 465 | slots.put(slot, clone); |
| 466 | } |
| 467 | } |
| 468 | if (slots.size() == 0) { |
| 469 | return; |
| 470 | } |
| 471 | onClickOpenSlot.accept(e, new ArrayList<>(slots.keySet())); |
| 472 | if (e.isCancelled()) { |
| 473 | return; |
| 474 | } |
| 475 | e.setCancelled(true); |
| 476 | ItemStack item = e.getCurrentItem(); |
| 477 | item.setAmount(amount); |
| 478 | e.setCurrentItem(item); |
| 479 | slots.forEach(inventory::setItem); |
| 480 | Bukkit.getScheduler().scheduleSyncDelayedTask(RedLib.getInstance(), () -> { |
| 481 | ((Player) e.getWhoClicked()).updateInventory(); |
| 482 | }); |
| 483 | return; |
| 484 | } |
| 485 | e.setCancelled(true); |
| 486 | } |
| 487 | if (e.getInventory().equals(e.getClickedInventory())) { |
| 488 | if (openSlots.contains(e.getSlot())) { |
| 489 | List<Integer> list = new ArrayList<>(); |
| 490 | list.add(e.getSlot()); |
nothing calls this directly
no test coverage detected