Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Статус
Закрыто для дальнейших ответов.

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, но не думаю что это хорошее решение.
Как мне нормально сравнить клик по инвентарю из события с моими кастомными?
 
В одном классе имеем два метода, которые возвращают созданные в них инвентари:
Код:
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, но не думаю что это хорошее решение.
Как мне нормально сравнить клик по инвентарю из события с моими кастомными?
Я не понял, что ты хочешь сделать, но для сравнения инвентарей обычно используют InventoryHolder. Сделай свой класс, который его реализует, и засовывай в инвентарь при создании
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх