.

Статус
Закрыто для дальнейших ответов.
Ща тестану

Собсна, запретить перемещать любые предметы в определенные инвентари
Чет не пашет.. InventoryDragEvent..
Код:
    @EventHandler
    public void onInventoryDrag(InventoryDragEvent event) {
        System.out.println("Drag event");
        if (shop_inventories.containsKey(event.getInventory())) {
            System.out.println("Drag cancelled");
            event.setCancelled(true);
        }
    }
Даже первого soutа нет... Когда он ваще вызывается?
Хотя нет, иногда вижу и первый sout и второй, но так и не понял когда он вызывается, но переносить вещи можно
Drag event - растягивание вещей, перенос сенсорным режимом. Возможно при шифте.

Click event - при клике.
Кликнул что бы поднять вещь - ивент.
Кликнул чтобы опустить - ивент.

дальше куришь доки.
 
В общем, вопрос точнее:
как отменить перемещение предмета из инвентаря в инвентарь, если инвентарь в который предмет перемещается содержится в коллекции shop_inventories
?

Уже интереснее, попытаюсь курнуть..
Java:
@EventHandler
public void onInventoryDrag(InventoryDragEvent e){
    if (e.getInventory()==null) return;
    if (e.getView().getTopInventory()==null) return;
    Player p = (Player) e.getWhoClicked();
    if (GUI.getInventories().containsKey(e.getView().getTopInventory())) {
        for (int i: e.getRawSlots()){
            if (i<e.getView().getTopInventory().getSize()) {
                e.setCancelled(true);
                p.updateInventory();
                return;
            }
        }
    }
}

@EventHandler
public void onInventoryClick(InventoryClickEvent e){
    if (e.getInventory()==null) return;
    if (getClickedInventory(e)==null) return;

    if (GUI.getInventories().containsKey(e.getView().getTopInventory())) {
        //weeee, it's my event!
        Player p = (Player) e.getWhoClicked();
   
        if (e.getClick().isShiftClick()){p.updateInventory(); e.setCancelled(true);}       
        if (getClickedInventory(e).equals(e.getView().getTopInventory())) e.setCancelled(true); else return;
    }
}
Это обеспечивает фулл защиту на инвентари с коллекции. стырил из своего гуишопа.
getClickedInventory - есть в спиготе, но не в ведре, использую свой метод.
Java:
/**
* Love bukkit (no)
* There is no method "getClickedInventory" in bukkit inventoryClickEvent, so I use this
* @param e
* @return
*/
public static Inventory getClickedInventory(InventoryClickEvent e){
    if (e==null)return null;
    if (e.getView()==null) return null;
    if (e.getSlot()==e.getRawSlot()) {
        return e.getView().getTopInventory();     
    }else{
        return e.getView().getBottomInventory();
    }
}
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх