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

Помогите как сравнить кастомные инвентари?

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

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

    xChupa Активный участник

    Баллы:
    61
    Имя в Minecraft:
    xChupa
    В одном классе имеем два метода, которые возвращают созданные в них инвентари:
    Код:
    public Inventory getOneInventory(Player player){
        oneInventory = Bukkit.createInventory(player, oneInventorySize, getOneInventoryName(player));
        return oneInventory;
    }
    public Inventory getSecondInventory(Player player, Chel chel){
        secondInventory = Bukkit.createInventory(player, secondInventorySize, getSecondInventoryName(player, chel));
        return secondInventory;
    }
    
    В другом классе обработчика событий InventoryClickEvent мне нужно сравнить инвентарь с этими двумя. Напрямую через getInventory().equals() не работает, потому что при вызове getOneInventory() или getSecondInventory() создается новый инвентарь.
    Попробовал сравнить через getTitile, все работает, но выдает ошибку.
    Код:
    @EventHandler
    public void choiceClick(InventoryClickEvent e){
        Player player = (Player) e.getWhoClicked();
        if(e.getView().getTitle().equals(Main.Choice().getOneInventoryName(player))){
            e.setCancelled(true);
            if(e.getClick().isLeftClick()){
                if(e.getSlot() == 12){
                    chel = Main.Chel().getChel(Main.Chel().getVasya(), player);
                    player.openInventory(Main.Choice().getSecondInventory(player, chel));
    }}}}
    @EventHandler
    public void chelClick(InventoryClickEvent e){
        Player player = (Player) e.getWhoClicked();
        if(e.getView().getTitle().equals(Main.Choice().getSecondInventoryName(player, chel))){
            e.setCancelled(true);
            //code
    }}
    
    Суть в том, что значение chel задается при обработке первого инвентаря, когда мы кликаем по любому
    предмету в первом инвентаре, то выдает ошибку в консоль потому что он прогоняет if во втором событии, а там chel = null;
    Я бы мог завернуть это все в try catch, но не думаю что это хорошее решение.
    Как мне нормально сравнить клик по инвентарю из события с моими кастомными?
     
  2. Sturm_PT

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

    Баллы:
    76
    Я не понял, что ты хочешь сделать, но для сравнения инвентарей обычно используют InventoryHolder. Сделай свой класс, который его реализует, и засовывай в инвентарь при создании
     
  3. Автор темы
    xChupa

    xChupa Активный участник

    Баллы:
    61
    Имя в Minecraft:
    xChupa
    Спасибо!
     
Статус темы:
Закрыта.

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