Помогите Криво работает InventoryClickEvent

  • Автор темы Автор темы Amafauz
  • Дата начала Дата начала

Amafauz

Новичок
Баллы
6
Здравствуйте, появилась проблема. Есть InventoryClickEvent, в нём есть currentItem. Этот currentItem == голова с owner`ом. Мне нужно достать из него этого самого овнера.. Но проблема в том, что в нём нет этого овнера! Тупо приходит ItemStack без SkullMeta но с ItemMeta

P.S -
#1 =
Код:
ItemStack testStack = new ItemStack(Material.SKULL_ITEM, 1, (short) 3);
                SkullMeta meta = (SkullMeta) testStack.getItemMeta();
                meta.setOwningPlayer(Bukkit.getOfflinePlayer(clan.getOwner()));
                testStack.setItemMeta(meta);
              
                inv.setItem(10, testStack);

# 2 =
Код:
@EventHandler
    public void onClick(InventoryClickEvent e) {
        if (e.getWhoClicked() instanceof Player) {
            Player p = (Player) e.getWhoClicked();
            ItemStack curr = e.getCurrentItem();
            Inventory inv = e.getClickedInventory();
          
            if (curr == null || inv == null)
                return;

            if (curr.getType() == Material.AIR || inv.getHolder() == null)
                return;

            if (inv.getHolder() instanceof ClanInventoryHolder) {
                e.setCancelled(true);
              
                if (isHead(curr)) {
                    String name = getHeadName(curr);
                    System.out.println(name);
                }
            }
        }
    }

#3 =
Код:
private boolean isHead(ItemStack stack) {
        if (stack != null && stack.getType() != Material.AIR) {
            if (stack.getType() == Material.SKULL_ITEM
                    && stack.getDurability() == 3) {
                SkullMeta meta = (SkullMeta) stack.getItemMeta();

                if (meta == null)
                    return false;

                if (!meta.hasOwner())
                    return false;

                if (meta.getOwningPlayer() == null)
                    return false;

                if (meta.getOwningPlayer().getName() == null)
                    return false;

                if (meta.getOwningPlayer().getName().isEmpty())
                    return false;

                return true;
            }
        }

        return false;
    }

    private String getHeadName(ItemStack stack) {
        if (!isHead(stack))
            return "";

        SkullMeta meta = (SkullMeta) stack.getItemMeta();

        return meta.getOwningPlayer().getName();
    }

В итоге isHead возращает false...
 
По-моему у тебя слишком много лишнего кода, но это не в тему.
У меня все отлично проверяет так:

Код:
@EventHandler
public void onClick(InventoryClickEvent e) {
    Player p = (Player) e.getWhoClicked();
    Inventory inv = e.getClickedInventory();
    ItemStack clicked = e.getCurrentItem();
    if (clicked.getType() != null && clicked.getType() != Material.AIR) {
        if (clicked.getType() == Material.SKULL_ITEM && clicked.getDurability() == 3) {
            SkullMeta meta = (SkullMeta) clicked.getItemMeta();
            String name = meta.getOwningPlayer().getName();
            p.sendMessage("Owner= " + name);
        }
    }

}
Единственное подмечу - нужно добавить функцию уже из твоего плагина на проверку ClanInventoryHolder, получится такой код:

Код:
   @EventHandler
    public void onClick(InventoryClickEvent e) {
        Player p = (Player) e.getWhoClicked();
        Inventory inv = e.getClickedInventory();
        ItemStack clicked = e.getCurrentItem();
        if (clicked.getType() != null && clicked.getType() != Material.AIR) {
            if (clicked.getType() == Material.SKULL_ITEM && clicked.getDurability() == 3) {
                if (!(inv.getHolder() instanceof ClanInventoryHolder)) {
                    SkullMeta meta = (SkullMeta) clicked.getItemMeta();
                    String name = meta.getOwningPlayer().getName();
                    p.sendMessage("Owner =" + name);
                }
            }

        }
    }
}
 
Последнее редактирование:
Назад
Верх