Search code examples
javapluginsminecraftbukkitspigot

Cannot resolve method 'getTitle' in 'Inventory' when click event


In my event for clicking on kit GUI I get this error "Cannot resolve method 'getTitle' in 'Inventory'".

 // Event for clicking on kit GUI
    @EventHandler
    public void onInventoryClick(InventoryClickEvent e) {
        Player player = (Player) e.getWhoClicked();
        Inventory inv = e.getInventory();
        if (inv.getTitle().equals("Kit Creator")) {
            e.setCancelled(true);
            if (e.getCurrentItem() == null) {
                return;
            }
            switch (e.getCurrentItem().getType()) {
                case GREEN_WOOL:
                    createKit(player);
                    break;
                case RED_WOOL:
                    deleteKit(player);
                    break;
                case BLUE_WOOL:
                    useKit(player);
                    break;
                default:
                    addItem(player, e.getCurrentItem());
                    break;
            }
        }
    }

I am very appreciative of anyone willing to help me.

I found information regarding .getView(), but I couldn't figure out how to use it in my case.


Solution

  • To get the title, you should use e.getView().getTitle(). The view is just the inventory opened.

    I suggest you to use InventoryHolder to check for your inventory.

    Firstly, you should create a class that implement Inventory Holder like that:

    public class MyHolder implements InventoryHolder {
        
        @Override
        public Inventory getInventory() {
            return null;
        }
    }
    

    When creating the inventory, instead of putting "null" or the player as first argument (the holder, like new MyHolder()).

    Now, you can do e.getInventory().getHolder() then check if the holder is not null and if instanceof MyHolder.

    Finally, You can put data into your holder as you will retrieve the exact same object used to create the inventory.