Событие Bukkit InventoryClickEvent не работает

Я хочу создать графический интерфейс (однострочный инвентарь) с ромбиком внутри. Но при нажатии на ромб ничего не происходит. Я почти уверен, что GuiCommand#onInventoryClick(InventoryClickEvent e) или просто InventoryClickEvent не работает. Кто-нибудь может помочь?

Это мой код:

package net.itrature.guiplugin.commands;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;

public class GuiCommand implements CommandExecutor, Listener
{
    private Inventory inv;
    
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
    {
        if (!(sender instanceof Player)) return true;
        if (args.length != 0) sender.sendMessage(ChatColor.RED + "Usage: /gui");
        
        inv = Bukkit.createInventory(null, 9);
        inv.setItem(4, new ItemStack(Material.DIAMOND));
        
        ((Player) sender).openInventory(inv);
        
        return true;
    }
    
    @EventHandler
    public void onInventoryClick(InventoryClickEvent event)
    {
        // Testing if the diamond is clicked
        if (event.getInventory() == inv && event.getCurrentItem().getType() == Material.DIAMOND)
            event.getWhoClicked().sendMessage("Diamond clicked!"); // Never occurs
    }
}

Это мой основной класс:

package net.itrature.guiplugin;

import org.bukkit.plugin.java.JavaPlugin;

import net.itrature.guiplugin.commands.GuiCommand;

public class GuiPlugin extends JavaPlugin
{
    private static GuiPlugin plugin;
    
    @Override
    public void onEnable()
    {
        if (plugin != null) getLogger().warning("Plugin loaded twice!");
        else plugin = this;
        
        getCommand("gui").setExecutor(new GuiCommand());
        
        getLogger().info("Plugin enabled!");
    }
    
    @Override
    public void onDisable()
    {
        plugin = null;
        
        getLogger().info("Plugin disabled!");
    }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
23
1

Ответы 1

Вам необходимо зарегистрировать события с помощью registerEvents(). Например, в вашем onEnable():

GuiCommand guiCommand = new GuiCommand();
getCommand("gui").setExecutor(guiCommand);
Bukkit.getPluginManager().registerEvents(guiCommand, this);

Обычно рекомендуется разделить CommandExecutors и Listeners на отдельные классы.

Другие вопросы по теме