1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите getHolder() всегда выдает null, даже если открыт кастомный инвентарь

Тема в разделе "Разработка плагинов для новичков", создана пользователем VladNotch, 2 май 2023.

Статус темы:
Закрыта.
  1. Автор темы
    VladNotch

    VladNotch Активный участник Пользователь

    Баллы:
    76
    У меня есть меню MainGUI, которое наследуется классом InventoryHolder, в нем есть метод
    onInventoryClick.

    public void onInventoryClick(InventoryClickEvent args) {
    ...
    }


    Есть так же класс InventoryEventListener, который проверяет открытое меню, и если сравнивается
    args.getClickedInventory().getHolder() и MainGUI, то должен выполнятся тот метод onInventoryClick из MainGUI.
    @EventHandler
    public void onInventoryClick(InventoryClickEvent args) {
    Inventory inventory = args.getClickedInventory();
    if (inventory == null || args.getClickedInventory().getHolder() == null) return;
    if (inventory.getHolder() instanceof MainGUI) {
    args.setCancelled(true);
    ((MainGUI) inventory.getHolder()).onInventoryClick(args);
    }
    }



    Но почему-то args.getClickedInventory().getHolder() выдает null, из-за чего срабатывает проверка на null. Что не так?
     
  2. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Холдер необходимо указывать при создании инвентаря (передавать в конструктор)
     
  3. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Кринж, еще и пытается бесконечно вызывать метод onInventoryClick? null тебя спас :D
     
  4. Автор темы
    VladNotch

    VladNotch Активный участник Пользователь

    Баллы:
    76
    Можно пожалуйста пример, если он у вас есть?
     
  5. Автор темы
    VladNotch

    VladNotch Активный участник Пользователь

    Баллы:
    76
    А как можно по другому? Я совсем не знаю как работать с инвентарями.
     
  6. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Документация:
    https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Bukkit.html#getHelpMap()
    Чуть ниже несколько перегруженных методов createInventory().

    Гайд - первый же, что нашел по запросу в гугл: https://rubukkit.org/threads/sravnivaem-inventari.134144/

    А кто сказал, что слушатель находится в InventoryHolder'е? Это вполне могут быть разные методы в разных классах с одинаковым названием. Да и в конце концов увидит StackOverflow и сам поймёт ошибку
     
  7. Автор темы
    VladNotch

    VladNotch Активный участник Пользователь

    Баллы:
    76
    Благодарю) Да, все верно, слушатель находится в отдельном классе, так как сам GUI у меня наследуется InventoryHolder, а листенер наследует Listener.
     
Статус темы:
Закрыта.

Поделиться этой страницей