Проверка инвентаря

Версия Minecraft
1.20.X
Ядро
Paper

Nekorise

Пользователь
Сообщения
11
Другие ядра
  1. Purpur
Идея в том, что нужно создать и открыть инвентарь игроку по команде.
Есть класс с кастом-инвентарём и методом, который его заполняет.
В классе обработки команды создаётся новый экземпляр этого инвентаря (То есть у каждого игрока он свой)
В классе слушателя ивентов (А конкретно InventoryClickEvent) мне надо понять, как проверить открыт-ли именно тот инвентарь, который игрок открыл (создал) через команду.
Идея с проверкой названия инвентаря отпадает в силу её абсурдности.
Как можно проверить открыт-ли именно тот инвентарь, который был создан для игрока?

Класс с созданием инвентаря:
Код:
public class MainGUI 
{
public Inventory mainInventory = Bukkit.createInventory(null, 18, "gui-меню");

public void Menu(Player player)
    {
ItemStack item = new ItemStack(Material.STRUCTURE_VOID);
        
        ItemMeta meta = item.getItemMeta();
meta.setDisplayName(HEX.ApplyColor("Твой ник: " + player.getName()));
        item.setItemMeta(meta);
        
mainInventory.setItem(4, item);
    }
}

Класс слушателя ивентов:
Код:
public class MainGUIEvent implements Listener 
{

@EventHandler
    public void onGUIClick(InventoryClickEvent event)
    {
        Player player = (Player) event.getWhoClicked();

 if ( ? ? ? )
        {
if (event.getRawSlot() == 4)
            {
player.sendMessage("Клик по предмету");
            }
event.setCancelled(true);
        }
    }
}

Класс обработки команды:
Код:
public class AboutCommand implements CommandExecutor {
@Override
    public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args)
    {
if (args.length <= 0)
        {

MainGUI mainGUI = new MainGUI();

            mainGUI.Menu((Player) sender);
            Player player = (Player) sender;
player.openInventory(mainGUI.mainInventory);

 return true;
        }
 return false;
    }
}
 
Закрыто. Проблема возникла из-за глупости.

Класс инвентаря должен имплементировать InventoryHolder, а атрибут "owner" в методе создания инвентаря должен равняться классу, в котором он создаётся.
В слушателе достаточно сделать проверку event.getClickedInventory().getHolder() instanceof КлассИнвентаря
Если кому-то вдруг нужен будет пример, вот мой код:

Класс обработки инвентаря (Создание, заполнение и обработка кликов)
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Вам необходимо зарегистрироваться для просмотра изображений-вложений


Класс слушателя:
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
Назад
Сверху Снизу