Event not Registering

Discussion in 'Plugin Development' started by TheNewTao, Dec 13, 2015.

Thread Status:
Not open for further replies.
  1. Offline

    TheNewTao

    Hi,

    I have an InventoryClickEvent, code:

    Code:
    package me.thenewtao.voucher;
    
    import org.bukkit.Bukkit;
    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;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    
    public class Events implements Listener {
    
        Voucher main;
        VouchInventories inventories;
    
        public Events(Voucher main, VouchInventories inventories) {
            this.main = main;
            this.inventories = inventories;
        }
    
        @EventHandler
        public void onInteract(PlayerInteractEvent e) {
            if (main.vouchesSaved.containsKey(e.getPlayer().getItemInHand())) {
                Player p = e.getPlayer();
                for (ItemStack current : main.vouchesSaved.get(p.getItemInHand())) {
                    p.getInventory().addItem(current);
                }
            }
        }
    
        @EventHandler
        public void onClick(InventoryClickEvent e) {
            Bukkit.broadcastMessage("you clicked!");
            Bukkit.broadcastMessage("Curret item clicked is :" + e.getCurrentItem().toString());
            Player p = (Player) e.getWhoClicked();
            if (e.getInventory().equals(main.typeVouch)) {
                if (e.getCurrentItem().equals(inventories.items)) {
                    p.openInventory(inventories.createItemVouch());
                } else if (e.getCurrentItem().equals(inventories.money)) {
    
                } else {
                    p.closeInventory();
                }
            } else if (e.getInventory().getName().equals("Create a Vouch")) {
                Inventory currentVouch = e.getInventory();
                Bukkit.broadcastMessage(inventories.confirm.toString());
                if (e.getCurrentItem().equals(inventories.confirm)) {
                    ItemStack[] contents = currentVouch.getContents();
                    ItemStack vouch = new ItemStack(Material.PAPER, 1);
                    ItemMeta vouchMeta = vouch.getItemMeta();
                    vouchMeta.setDisplayName("Vouch " + "(#)" + main.currentVouch);
                    vouch.setItemMeta(vouchMeta);
                    main.vouchesSaved.put(vouch, contents);
                    main.currentVouch++;
                    p.closeInventory();
                    p.getInventory().addItem(vouch);
    
                }
            }
        }
    
    }
    
    So it works normally, when I click any inventory slot it runs this:

    Code:
          Bukkit.broadcastMessage("you clicked!");
            Bukkit.broadcastMessage("Curret item clicked is :" + e.getCurrentItem().toString());
    However, when I open this inventory:

    Code:
    p.openInventory(inventories.createItemVouch());
    
    
    // The code for the method createItemVouch is here:
    
        public Inventory createItemVouch() {
            confirm = new ItemStack(Material.STAINED_GLASS_PANE, 1);
            cancel = new ItemStack(Material.STAINED_GLASS_PANE, 1, (byte) 14);
            ItemMeta confirmMeta = confirm.getItemMeta();
            ItemMeta cancelMeta = cancel.getItemMeta();
            confirmMeta.setDisplayName("Confirm");
            cancelMeta.setDisplayName("Cancel");
            confirm.setItemMeta(confirmMeta);
            cancel.setItemMeta(cancelMeta);
    
            Inventory newVouch = Bukkit.createInventory(null, 54, "Create a Vouch");
    
            newVouch.setItem(45, cancel);
            newVouch.setItem(53, confirm);
    
            return newVouch;
        }
    
    Nothing triggers, not even the "you clicked" message. It is as if the event is not being registered, it should run this:
    Code:
    else if (e.getInventory().getName().equals("Create a Vouch")) {
                Inventory currentVouch = e.getInventory();
                Bukkit.broadcastMessage(inventories.confirm.toString());
                if (e.getCurrentItem().equals(inventories.confirm)) {
                    ItemStack[] contents = currentVouch.getContents();
                    ItemStack vouch = new ItemStack(Material.PAPER, 1);
                    ItemMeta vouchMeta = vouch.getItemMeta();
                    vouchMeta.setDisplayName("Vouch " + "(#)" + main.currentVouch);
                    vouch.setItemMeta(vouchMeta);
                    main.vouchesSaved.put(vouch, contents);
                    main.currentVouch++;
                    p.closeInventory();
                    p.getInventory().addItem(vouch);
    
                }
            }
    And it doesn't run anything, I thought it should run the "you clicked" message at least, but it doesn't; however, in any other inventory it does play that message.

    I don't know what I am doing wrong, I didn't register the events wrong because other events do work.
     
  2. Offline

    Lightspeed

  3. Offline

    TheNewTao

    @Lightspeed
    Sure :)
    Code:
        HashMap<ItemStack, ItemStack[]> vouchesSaved = new HashMap<ItemStack, ItemStack[]>();
    
        VouchInventories inventories = new VouchInventories(this);
        Events events = new Events(this, inventories);
    
        public int currentVouch = 0;
     
        public Inventory typeVouch = Bukkit.createInventory(null, 27, "What type of Vouch?");
    
        public void onEnable() {
            Bukkit.getPluginManager().registerEvents(events, this);
            inventories.createVouch();
        }
    After googling, I am having something really similar to https://bukkit.org/threads/inventoryclickevent-not-working-in-certain-inventory.175603/
     
    Last edited: Dec 13, 2015
  4. Offline

    Lightspeed

    @TheNewTao So this never fires but, every other event does? Like do you have the debugging sysout before any ifs to make sure or after ifs?
     
  5. Offline

    TheNewTao

    @Lightspeed

    This problem is driving me insane lol, I created a whole new project to test it out. My code:

    Code:
    package me.thenewtao.voucher;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Voucher extends JavaPlugin {
    
        public static Inventory voucherMenu;
        public static Inventory itemsMenu;
    
        Events events = new Events(this);
    
        public void onEnable() {
            Bukkit.getServer().getPluginManager().registerEvents(events, this);
        }
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (sender instanceof Player && sender != null) {
                Player p = (Player) sender;
                if (cmd.getName().equalsIgnoreCase("voucher"))
                    itemsMenu = Bukkit.createInventory(null, 27, "Voucher Items Menu");
                voucherMenu = Bukkit.createInventory(p, 27, "Voucher Menu");
                voucherMenu.setItem(0, new ItemStack(Material.ANVIL, 1));
                p.openInventory(voucherMenu);
                Bukkit.broadcastMessage("Noob get rekt");
            }
    
            return true;
        }
    }
    
    
    // Events
    
    package me.thenewtao.voucher;
    
    import org.bukkit.Bukkit;
    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 Events implements Listener {
        Voucher main;
    
        public Events(Voucher main) {
            this.main = main;
        }
    
        @EventHandler
        public void onClick(InventoryClickEvent e) {
            Bukkit.broadcastMessage("You cliked");
            Player p = (Player) e.getWhoClicked();
            if (e.getInventory().equals(main.voucherMenu)) {
                p.sendMessage("first gui");
    
            } else if (e.getInventory().equals(main.itemsMenu)) {
                p.sendMessage("second gui");
            }
            if (e.getCurrentItem().getType() == Material.ANVIL) {
                p.openInventory(main.itemsMenu);
            }
        }
    
    }
    

    Same problem, when I am on the itemsMenu inventory, it does not fire the event, but it does on the voucherMenu.
     
  6. Offline

    Lightspeed

    @TheNewTao Can you add sysout("Check #1); then change the number every if in the event and give me logs?
     
Thread Status:
Not open for further replies.

Share This Page