Events 事件清单单击事件don';t工作[Minecraft Bukkit插件]

Events 事件清单单击事件don';t工作[Minecraft Bukkit插件],events,minecraft,bukkit,inventory,Events,Minecraft,Bukkit,Inventory,我想创建一个使用清单的minecraft GUI。我已经制作了所有包含项目的GUI。但是,当我尝试与GUI交互时(比如单击某个项目),这是毫无意义的。所以我很确定是InventoryClickEvent不起作用 这是我的代码: package can.evilestvirus.randomtp; import java.util.Arrays; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.c

我想创建一个使用清单的minecraft GUI。我已经制作了所有包含项目的GUI。但是,当我尝试与GUI交互时(比如单击某个项目),这是毫无意义的。所以我很确定是InventoryClickEvent不起作用

这是我的代码:

package can.evilestvirus.randomtp;

import java.util.Arrays;


import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.PluginManager;

public class CommandRtp implements CommandExecutor {


@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

    if (sender instanceof Player) {

        Player player = (Player) sender;

        Inventory inv = Bukkit.createInventory(null, 9, "Menu de tp aléatoire");

        ItemStack goldBlock = new ItemStack(Material.GOLD_BLOCK, 1);
        ItemMeta goldBlockM = goldBlock.getItemMeta();
        goldBlockM.setDisplayName("§8[§a+§8] §aRandomTP Normal §8[§a+§8]");
        goldBlockM.setLore(Arrays.asList("§b- §6Distance de TP: 2500 Blocks", "§b- §6Prix: $0", "§b- §6Cooldown de 60 secondes", "§a§lCliquez ici pour utiliser"));
        goldBlockM.addEnchant(Enchantment.DURABILITY, 10, true);
        goldBlockM.addItemFlags(ItemFlag.HIDE_ENCHANTS);
        goldBlock.setItemMeta(goldBlockM);
        inv.setItem(3, goldBlock);

        ItemStack diamondBlock = new ItemStack(Material.DIAMOND_BLOCK, 1);
        ItemMeta diamondBlockM = diamondBlock.getItemMeta();
        diamondBlockM.setDisplayName("§8[§a+§8] §aRandomTP §6§lVIP §8[§a+§8]");
        diamondBlockM.setLore(Arrays.asList("§b- §6Distance de TP: 5000 Blocks", "§b- §6Prix: $1000", "§b- §6Cooldown de 5 minutes", "§a§lCliquez ici pour utiliser"));
        diamondBlockM.addEnchant(Enchantment.DURABILITY, 10, true);
        diamondBlockM.addItemFlags(ItemFlag.HIDE_ENCHANTS);
        diamondBlock.setItemMeta(diamondBlockM);
        inv.setItem(5, diamondBlock);


        player.openInventory(inv);





    }


    return true;


}

@EventHandler
public void onClick(InventoryClickEvent event) {

    Player player = (Player) event.getWhoClicked();
    ItemStack current = event.getCurrentItem();

    if(current == null) return;

    if(event.getInventory().getTitle().equals("Menu de tp aléatoire")) {

        event.setCancelled(true);

        if(current.getType() == Material.GOLD_BLOCK) {

            player.closeInventory();
            player.chat("/rtpPlayer");
        }

        if(current.getType() == Material.DIAMOND_BLOCK) {

            player.closeInventory();
            player.setFlying(true);
        }


    }
}
}

我的主要课程代码如下:

    package can.evilestvirus.randomtp;

import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

import can.evilestvirus.randomtp.CommandRtpPlayer;

public class Main extends JavaPlugin {
    @Override
    public void onEnable() {
        System.out.println("HELLO PEOPLE!");
         this.getCommand("rtpplayer").setExecutor(new CommandRtpPlayer());
         this.getCommand("rtp").setExecutor(new CommandRtp());
         Bukkit.getPluginManager().registerEvents((Listener) this, Bukkit.getPluginManager().getPlugins()[0]);
         Bukkit.getPluginManager().registerEvents((Listener) new CommandRtp(), this);

    }
}

您需要在
CommandRtp
类中实现
Listener
。一旦你这样做了,它应该会起作用

因此,您的课程将如下所示:

公共类CommandRtp实现侦听器、CommandExecutor{
//代码

}

您需要在
CommandRtp
类中实现
Listener
。一旦你这样做了,它应该会起作用

因此,您的课程将如下所示:

公共类CommandRtp实现侦听器、CommandExecutor{
//代码

}

好的,我找到了错误。我创建了一个新类,并正确注册了新类。在我更改IF之后,检查我的菜单是否与命令菜单相同,因为我使用的函数不是功能性的

这是我的新代码,适用于那些与我有相同问题的人:

   package can.evilestvirus.randomtp;

import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;

public class MenuHandler implements Listener {

    @EventHandler
    public void onMenuClick(InventoryClickEvent e){

        Player player = (Player) e.getWhoClicked();

        if(e.getView().getTitle().equalsIgnoreCase("Menu de tp aleatoire")){
            e.setCancelled(true);
            if (e.getCurrentItem().getType() == Material.GOLD_BLOCK) {
                player.closeInventory();
                player.chat("/rtpPlayer");
            }
            if (e.getCurrentItem().getType() == Material.DIAMOND_BLOCK) {
                player.closeInventory();
                player.setFlying(true);
            }
        }
    }

}
这是主要课程:

package can.evilestvirus.randomtp;

import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin{

    @Override
    public void onEnable() {
        getCommand("rtpplayer").setExecutor(new CommandRtpPlayer());
        getCommand("rtp").setExecutor(new CommandRtp());
        Bukkit.getPluginManager().registerEvents(new MenuHandler(), this);
    }
}

好的,我发现了我的错误。我创建了一个新类,并正确注册了新类。在我更改IF之后,检查我的菜单是否与命令菜单相同,因为我使用的函数不是功能性的

这是我的新代码,适用于那些与我有相同问题的人:

   package can.evilestvirus.randomtp;

import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;

public class MenuHandler implements Listener {

    @EventHandler
    public void onMenuClick(InventoryClickEvent e){

        Player player = (Player) e.getWhoClicked();

        if(e.getView().getTitle().equalsIgnoreCase("Menu de tp aleatoire")){
            e.setCancelled(true);
            if (e.getCurrentItem().getType() == Material.GOLD_BLOCK) {
                player.closeInventory();
                player.chat("/rtpPlayer");
            }
            if (e.getCurrentItem().getType() == Material.DIAMOND_BLOCK) {
                player.closeInventory();
                player.setFlying(true);
            }
        }
    }

}
这是主要课程:

package can.evilestvirus.randomtp;

import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin{

    @Override
    public void onEnable() {
        getCommand("rtpplayer").setExecutor(new CommandRtpPlayer());
        getCommand("rtp").setExecutor(new CommandRtp());
        Bukkit.getPluginManager().registerEvents(new MenuHandler(), this);
    }
}

您可以使用此事件:

@EventHandler
public void onInventoryClick(InventoryClickEvent event)  {

}

对我来说,它起作用

您可以使用此事件:

@EventHandler
public void onInventoryClick(InventoryClickEvent event)  {

}

对我来说,它工作了

我实现了Listener,但它不工作。我可以打开菜单,但当我想要交互时,它什么也不做,而且似乎没有调用事件。我实现了侦听器,但它不起作用。我可以打开菜单,但当我想互动时,它什么也不做,而且似乎没有调用事件。