Event output is duplicating

Discussion in 'Plugin Development' started by TerThesz, Apr 6, 2020.

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

    TerThesz

    I'm trying to make Inv menu but every time someone opens it the output form onInventoryClikc will duplicate.
    Here's my code:

    Code:
    public class MainMenu implements Listener {
       
        private Inventory inv;
        private ItemStack infinit, timed,  derank;
        private Plugin plugin = MainClass.getPlugin(MainClass.class);
        public Player getPlayerName;
       
        public MainMenu (Plugin p, Player playerName) {
           
            getPlayerName = playerName;
            inv = Bukkit.getServer().createInventory(null, 9, ChatColor.AQUA + "" + ChatColor.BOLD + "Rank Picker");
           
            infinit = createChest(ChatColor.LIGHT_PURPLE + "Full-time rank", "54", "Non-timed rank");
            timed = createChest(ChatColor.LIGHT_PURPLE + "Timed rank", "54", "Timed rank");
            derank = createChest(ChatColor.LIGHT_PURPLE + "Derank", "54", "Remove rank");
           
            inv.setItem(0, infinit);
            inv.setItem(1, timed);
            inv.setItem(2, derank);
            System.out.println("4");
           
            Bukkit.getServer().getPluginManager().registerEvents(this, p);
           
        }
       
        private ItemStack createChest(String name, String meta, String lore) {
            Material item = Material.CHEST;
            ItemStack i = new ItemStack(item, 1);
            ItemMeta im = i.getItemMeta();
            im.setDisplayName(name);
            im.setLore(Arrays.asList(lore));
            i.setItemMeta(im);
            return i;
           
        }
       
        public void show (Player p) {
            p.openInventory(inv);
           
        }
       
        public String rankPick;
        @EventHandler
        public void onInventoryClicl(InventoryClickEvent e) {
            Commands commands = new Commands();
            if (!e.getInventory().getName().equalsIgnoreCase(inv.getName())) return;
            if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Full-time rank")) {
                e.setCancelled(true);
                rankPick = "FillTime";
               
            }
            if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Timed rank")) {
                e.setCancelled(true);
                rankPick = "Timed";
               
            }
            if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Derank")) {
                e.setCancelled(true);
                rankPick = "Demote";
               
            }
           
            SubMenu smenu = new SubMenu(plugin, (Player)e.getWhoClicked());
            smenu.show((Player)e.getWhoClicked());   
    
        }
       
    }
    When i open the menu the output duplicates
     
  2. Online

    timtower Administrator Administrator Moderator

    @TerThesz Why are you making it per player? And if you are doing that, where do you unregister the event?
     
  3. Offline

    TerThesz

    How do i unregister the event?
     
  4. Online

    timtower Administrator Administrator Moderator

    Why are you making it per player?
     
  5. Offline

    TerThesz

    What of you mean?
     
  6. You're not really doing anything with the player's name so you won't need the Player at all.
    Register the event listener inside your main class within onEnable once and leave it out of this class or look into HandlerList and unregister it using that.
     
Thread Status:
Not open for further replies.

Share This Page