Помогите InventoryClickEvent, почему не работает как задумано?

Todorov26

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Todorov26
Код моего обработчика:
Код:
@EventHandler
public void onClick(InventoryClickEvent event){
    if(event.getClickedInventory() == null) return;
    if(!event.getClickedInventory().equals(this.inventory)) return;

if(slot != core && slot != aded) event.setCancelled(true);

if(slot == core || slot == aded){
            System.out.println("clicked");
            if(inventory.getItem(slot) == null && inventory.getItem(slot).getType() != Material.PISTON){
                System.out.println("not piston");
                ItemStack cursor = event.getCursor();
                System.out.println(cursor);
                if(cursor == null || cursor.getType() != Material.PISTON){
                    System.out.println("cursor no potion");
                    event.setCancelled(true);
                }
            }
        }

Основная задумка была чтобы в слоты core и aded можно было положить только зелье и поршень соответственно. Однако ничего не пахало и я решил сделать пока чисто поршни.

Вопросов несколько:
1) Почему не отменяется ивент если я кликаю по слоту не поршнем?
2) Почему впринципе в if(slot ==core) я попадаю только когда кликаю по положенному в инвентарь предмету
 
Код моего обработчика:
Код:
@EventHandler
public void onClick(InventoryClickEvent event){
    if(event.getClickedInventory() == null) return;
    if(!event.getClickedInventory().equals(this.inventory)) return;

if(slot != core && slot != aded) event.setCancelled(true);

if(slot == core || slot == aded){
            System.out.println("clicked");
            if(inventory.getItem(slot) == null && inventory.getItem(slot).getType() != Material.PISTON){
                System.out.println("not piston");
                ItemStack cursor = event.getCursor();
                System.out.println(cursor);
                if(cursor == null || cursor.getType() != Material.PISTON){
                    System.out.println("cursor no potion");
                    event.setCancelled(true);
                }
            }
        }

Основная задумка была чтобы в слоты core и aded можно было положить только зелье и поршень соответственно. Однако ничего не пахало и я решил сделать пока чисто поршни.

Вопросов несколько:
1) Почему не отменяется ивент если я кликаю по слоту не поршнем?
2) Почему впринципе в if(slot ==core) я попадаю только когда кликаю по положенному в инвентарь предмету
Попробуй использовать equals
 
Код моего обработчика:
Код:
@EventHandler
public void onClick(InventoryClickEvent event){
    if(event.getClickedInventory() == null) return;
    if(!event.getClickedInventory().equals(this.inventory)) return;

if(slot != core && slot != aded) event.setCancelled(true);

if(slot == core || slot == aded){
            System.out.println("clicked");
            if(inventory.getItem(slot) == null && inventory.getItem(slot).getType() != Material.PISTON){
                System.out.println("not piston");
                ItemStack cursor = event.getCursor();
                System.out.println(cursor);
                if(cursor == null || cursor.getType() != Material.PISTON){
                    System.out.println("cursor no potion");
                    event.setCancelled(true);
                }
            }
        }

Основная задумка была чтобы в слоты core и aded можно было положить только зелье и поршень соответственно. Однако ничего не пахало и я решил сделать пока чисто поршни.

Вопросов несколько:
1) Почему не отменяется ивент если я кликаю по слоту не поршнем?
2) Почему впринципе в if(slot ==core) я попадаю только когда кликаю по положенному в инвентарь предмету
Пушто есть два ивента, в частности InventoryDragEvent
 
А я откуда знаю инвентари же сравнивают через equals
Если созданный тобой инвентарь и ты его хранишь в переменной, то можно и через "==". Да и тут вроде проблема вовсе не в сравниванию инвентарей.
 
Есть созданный тобой инвентарь и ты его хранишь в переменной, то можно и через "==". Да и тут вроде проблема вовсе не в сравниванию инвентарей.
Ясно.
Кстати, выходит что если создать предмет и сравнить с предметов похожым то нужно через equals?
 
А можно попросить подсказать примером кода, как запретить класть в опр. слот инвентаря, какой-либо конкретный предмет?
Код:
ItemStack item = /* YOUR ITEM STACK */;
if (event.getCursor().isSimilar(item) && event.getSlot() == 5) {
    event.setCancelled(true);
}
 
Последнее редактирование:
А можно попросить подсказать примером кода, как запретить класть в опр. слот инвентаря, какой-либо конкретный предмет?
Получаешь лист слотов, которые задел игрок - getInventorySlots()
Проходишься через forEach, чтобы посмотреть, не задел ли он случайно твой слот, если задел - event.setCancelled(true);
 
Назад
Верх