@Override public Set<Integer> getRawSlots() { Set<Integer> ret = new HashSet<>(); for(Integer rs : id.getRawSlots()) { ret.add(rs); } return ret; }
@EventHandler(ignoreCancelled = true) public void onMenuDrag(InventoryDragEvent event) { Inventory inv = event.getInventory(); String title = inv.getTitle(); if (!titles.containsKey(title)) { return; } Set<Integer> slots = event.getRawSlots(); slots.forEach((slot) -> { if ((slot >= 0 && slot < titles.get(title))) { event.setCancelled(true); } }); }
@EventHandler(priority = EventPriority.LOW) public void onInventoryDrag(InventoryDragEvent e) { Player p = (Player) e.getWhoClicked(); if(!inventories.containsKey(p)) return; SmartInventory inv = inventories.get(p); for(int slot : e.getRawSlots()) { if(slot >= p.getOpenInventory().getTopInventory().getSize()) continue; e.setCancelled(true); break; } inv.getListeners().stream() .filter(listener -> listener.getType() == InventoryDragEvent.class) .forEach(listener -> ((InventoryListener<InventoryDragEvent>) listener).accept(e)); }
@EventHandler(ignoreCancelled = true) private void dragMenu(InventoryDragEvent event){ MinigamePlayer ply = pdata.getMinigamePlayer((Player)event.getWhoClicked()); if(ply.isInMenu()){ if(!ply.getMenu().getAllowModify()){ for(int slot : event.getRawSlots()){ if(slot < ply.getMenu().getSize()){ event.setCancelled(true); break; } } } else{ Set<Integer> slots = new HashSet<Integer>(event.getRawSlots()); for(int slot : slots){ if(ply.getMenu().hasMenuItem(slot)){ event.getRawSlots().remove(slot); } } } } }