Solved InventoryClickEvent fires thrice

Discussion in 'Spigot Plugin Development' started by TerZer, May 23, 2016.

  1. Hey SpigotMC forum members or staff! I want your help with my plugin. I have InventoryClickEvent, but it fires thrice or twice so I don't know what to do with that. Please help :)

    Class code:

    Code (Text):
    public class Menu implements CommandExecutor, Listener{
       
       
        public Menu(Mana plugin) {
            plugin.getServer().getPluginManager().registerEvents((Listener)this, (Plugin)plugin);
        }
        static ItemStack reset = new ItemStack(Material.REDSTONE_BLOCK, 1);
        static ItemStack exit = new ItemStack(Material.BARRIER, 1);
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if(label.equals("skills")){
                if(sender instanceof Player){
                    Player player = (Player) sender;
                    Inventory myInventory = Bukkit.createInventory(player, 9, ChatColor.DARK_GREEN + "Galių medis");
                    myInventory = inv(myInventory, player);
                    player.openInventory(myInventory);
                    return true;
                }
                return false;
            }
            return false;
        }
       
        @EventHandler
        public void onInventoryClick(InventoryClickEvent e){
            Player player = (Player) e.getWhoClicked();
            Inventory inventory = e.getInventory();
            if(inventory.getName() != null && inventory.getName().equals(ChatColor.DARK_GREEN + "Galių medis") && e.getCurrentItem() != null){
                ItemStack clicked = e.getCurrentItem();
                if(clicked.getItemMeta() != null && clicked.getItemMeta().hasDisplayName() && clicked.getItemMeta().getDisplayName().equals("    " + ChatColor.GREEN + "❱ " + ChatColor.GOLD + "Žala" + ChatColor.GREEN + " ❰")){
                        if(Mana.getdata.getDouble(player.getName() + "zala") < 2){
                            if(Mana.getdata.getDouble(player.getName() + "tsk") > 0){
                            double zala = Mana.getdata.getDouble(player.getName() + "zala") + 0.25;
                            Mana.getdata.set(player.getName() + "zala", zala);
                               Mana.getdata.set(player.getName() + "tsk", Mana.getdata.getDouble(player.getName() + "tsk") - 0.5);
                               Mana.getdata.set(player.getName() + "press", Mana.getdata.getDouble(player.getName() + "press") + 0.5);
                               inv(inventory, player);
                               Mana.savedata();
                            }
                        }
                        else{
                            inv(inventory, player);
                        }
                    }
                   
                    else if(clicked.getItemMeta() != null && clicked.getItemMeta().hasDisplayName() && clicked.getItemMeta().getDisplayName().equals(ChatColor.GREEN + "❱ " + ChatColor.GOLD + "Judėjimo greitis" + ChatColor.GREEN + " ❰")){
                    if(Mana.getdata.getDouble(player.getName() + "greit") < 2){
                        if(Mana.getdata.getDouble(player.getName() + "tsk") > 0){
                        double greit = Mana.getdata.getDouble(player.getName() + "greit") + 0.25;
                        Mana.getdata.set(player.getName() + "greit", greit);
                           Mana.getdata.set(player.getName() + "tsk", Mana.getdata.getDouble(player.getName() + "tsk") - 0.5);
                           Mana.getdata.set(player.getName() + "press", Mana.getdata.getDouble(player.getName() + "press") + 0.5);
                           inv(inventory, player);
                           Mana.savedata();
                        }
                    }
                    else{
                        inv(inventory, player);
                    }
                    }
                    else if(clicked.getItemMeta() != null && clicked.getItemMeta().hasDisplayName() && clicked.getItemMeta().getDisplayName().equals(ChatColor.GREEN + "    ❱ " + ChatColor.GOLD + "Gyvybės" + ChatColor.GREEN + " ❰")){
                        if(Mana.getdata.getDouble(player.getName() + "hpup") < 2){
                            if(Mana.getdata.getDouble(player.getName() + "tsk") > 0){
                            double hp = Mana.getdata.getDouble(player.getName() + "hpup") + 0.5;
                            Mana.getdata.set(player.getName() + "hpup", hp);
                               Mana.getdata.set(player.getName() + "tsk", Mana.getdata.getDouble(player.getName() + "tsk") - 0.5);
                               Mana.getdata.set(player.getName() + "press", Mana.getdata.getDouble(player.getName() + "press") + 0.5);
                               if(Mana.getdata.getDouble(player.getName() + "hpup") == 1 || Mana.getdata.getDouble(player.getName() + "hpup") == 2){
                               player.setMaxHealth(player.getMaxHealth() + 2);
                               }
                               inv(inventory, player);
                               Mana.savedata();
                            }
                        }
                        else{
                            inv(inventory, player);
                        }
                        }
                    else if(clicked.getItemMeta() != null && clicked.getItemMeta().hasDisplayName() && clicked.getItemMeta().getDisplayName().equals(ChatColor.GREEN + "    ❱ " + ChatColor.GOLD + "Šarvai" + ChatColor.GREEN + " ❰")){
                        if(Mana.getdata.getDouble(player.getName() + "armor") < 2){
                            if(Mana.getdata.getDouble(player.getName() + "tsk") > 0){
                            double armor = Mana.getdata.getDouble(player.getName() + "armor") + 0.25;
                            Mana.getdata.set(player.getName() + "armor", armor);
                               Mana.getdata.set(player.getName() + "tsk", Mana.getdata.getDouble(player.getName() + "tsk") - 0.5);
                               Mana.getdata.set(player.getName() + "press", Mana.getdata.getDouble(player.getName() + "press") + 0.5);
                               inv(inventory, player);
                               Mana.savedata();
                            }
                        }
                        else{
                            inv(inventory, player);
                        }
                        }
                    else if(clicked.getItemMeta() != null && clicked.getItemMeta().hasDisplayName() && clicked.getItemMeta().getDisplayName().equals(ChatColor.GREEN + "    ❱ " + ChatColor.GOLD + "Nuodai" + ChatColor.GREEN + " ❰")){
                        if(Mana.getdata.getDouble(player.getName() + "nuod") < 2){
                            if(Mana.getdata.getDouble(player.getName() + "tsk") > 0){
                            double nuod = Mana.getdata.getDouble(player.getName() + "nuod") + 0.25;
                            Mana.getdata.set(player.getName() + "nuod", nuod);
                               Mana.getdata.set(player.getName() + "tsk", Mana.getdata.getDouble(player.getName() + "tsk") - 0.5);
                               Mana.getdata.set(player.getName() + "press", Mana.getdata.getDouble(player.getName() + "press") + 0.5);
                               Mana.savedata();
                            inv(inventory, player);
                            }
                        }
                        else{
                            inv(inventory, player);
                        }
                       
                        }
                    else if(clicked.getItemMeta() != null && clicked.getItemMeta().hasDisplayName() && clicked.getItemMeta().getDisplayName().equals(ChatColor.GREEN + "    ❱ " + ChatColor.GOLD + "Ginklo greitis" + ChatColor.GREEN + " ❰")){
                        if(Mana.getdata.getDouble(player.getName() + "ggrts") < 2){
                            if(Mana.getdata.getDouble(player.getName() + "tsk") > 0){
                            double ggrts = Mana.getdata.getDouble(player.getName() + "ggrts") + 0.25;
                            Mana.getdata.set(player.getName() + "ggrts", ggrts);
                               Mana.getdata.set(player.getName() + "tsk", Mana.getdata.getDouble(player.getName() + "tsk") - 0.5);
                               Mana.getdata.set(player.getName() + "press", Mana.getdata.getDouble(player.getName() + "press") + 0.5);
                               Mana.savedata();
                            inv(inventory, player);
                               Bukkit.broadcastMessage("check");
                            }
                        }
                        else{
                            inv(inventory, player);
                        }
                    }
                    else if (clicked.getItemMeta() != null && clicked.getItemMeta().hasDisplayName() && clicked.getItemMeta().getDisplayName().equals(ChatColor.RED + "RESET")){
                        Mana.getdata.set(player.getName() + "zala", 0.0);
                        Mana.getdata.set(player.getName() + "nuod", 0.0);
                        Mana.getdata.set(player.getName() + "greit", 0.0);
                        Mana.getdata.set(player.getName() + "armor", 0.0);
                        Mana.getdata.set(player.getName() + "ggrts", 0.0);
                        double heal = player.getMaxHealth();
                        double hp = Mana.getdata.getDouble(player.getName() + "hpup");
                        player.setMaxHealth(heal - (hp * 2));
                        Mana.getdata.set(player.getName() + "hpup", 0.0);
                        Mana.getdata.set(player.getName() + "tsk", (int) Mana.getdata.getDouble(player.getName() + "tsk") + (int) Mana.getdata.getDouble(player.getName() + "press"));
                        Mana.getdata.set(player.getName() + "press", 0.0);
                        inventory.setItem(0, new ItemStack(Material.PAPER, 1));
                           Mana.savedata();
                           inv(inventory, player);
                    }
                    else if (clicked.getType() == Material.BARRIER){
                        player.closeInventory();
                    }
                    e.setCancelled(true);
                }
        }
       
        public static Inventory inv(Inventory myInventory, Player p){
            ItemStack skill = new ItemStack(Material.PAPER, 1);
            ItemMeta meta = skill.getItemMeta();
            ArrayList<String> lore = new ArrayList<String>();
            if((double) Mana.getdata.get(p.getName() + "zala") < 2){
            meta.setDisplayName("    " + ChatColor.GREEN + "❱ " + ChatColor.GOLD + "Žala" + ChatColor.GREEN + " ❰");
            lore.add("");
            lore.add(ChatColor.YELLOW + "✯ " + ChatColor.RED + "Tavo žala" + ChatColor.YELLOW + " ✯");
            lore.add("     " + ChatColor.GREEN + "+ " + (double) Mana.getdata.get(p.getName() + "zala"));
            meta.setLore(lore);
            skill.setItemMeta(meta);
            myInventory.setItem(0, skill);
            }
            if((double) Mana.getdata.get(p.getName() + "zala") == 2){
                skill = new ItemStack(Material.BOOK, 1);
                meta.setDisplayName("     " + ChatColor.GREEN + "❱ " + ChatColor.GOLD + "Žala" + ChatColor.GREEN + " ❰");
                lore.add("");
                lore.add(ChatColor.YELLOW + "✯ " + ChatColor.RED + "Tavo žala" + ChatColor.YELLOW + " ✯");
                lore.add("     " + ChatColor.GREEN + "+ " + Mana.getdata.getDouble(p.getName() + "zala"));
                lore.add("   " + ChatColor.RED + "Maksimumas");
                meta.setLore(lore);
                skill.setItemMeta(meta);
                myInventory.setItem(0, skill);
            }
           
            ItemStack skill2 = new ItemStack(Material.PAPER, 1);
            if((double) Mana.getdata.get(p.getName() + "greit") < 2){
            meta = skill2.getItemMeta();
            meta.setDisplayName(ChatColor.GREEN + "❱ " + ChatColor.GOLD + "Judėjimo greitis" + ChatColor.GREEN + " ❰");
            lore.removeAll(lore);
            lore.add("");
            lore.add(ChatColor.YELLOW + " ✯ " + ChatColor.RED + "Tavo greitis" + ChatColor.YELLOW + " ✯");
            lore.add("       " + ChatColor.GREEN + "+ " + Mana.getdata.getDouble(p.getName() + "greit"));
            meta.setLore(lore);
            skill2.setItemMeta(meta);
            myInventory.setItem(1, skill2);
            }
            if((double) Mana.getdata.get(p.getName() + "greit") == 2){
                skill2 = new ItemStack(Material.BOOK, 1);
                meta = skill2.getItemMeta();
                meta.setDisplayName(ChatColor.GREEN + "❱ " + ChatColor.GOLD + "Judėjimo greitis" + ChatColor.GREEN + " ❰");
                lore.removeAll(lore);
                lore.add("");
                lore.add(ChatColor.YELLOW + " ✯ " + ChatColor.RED + "Tavo greitis" + ChatColor.YELLOW + " ✯");
                lore.add("       " + ChatColor.GREEN + "+ " + Mana.getdata.getDouble(p.getName() + "greit"));
                lore.add("     " + ChatColor.RED + "Maksimumas");
                meta.setLore(lore);
                skill2.setItemMeta(meta);
                myInventory.setItem(1, skill2);
            }
           
            ItemStack skill3 = new ItemStack(Material.PAPER, 1);
            if((double) Mana.getdata.get(p.getName() + "hpup") < 2){
            meta = skill3.getItemMeta();
            meta.setDisplayName(ChatColor.GREEN + "    ❱ " + ChatColor.GOLD + "Gyvybės" + ChatColor.GREEN + " ❰");
            lore.removeAll(lore);
            lore.add("");
            lore.add(ChatColor.YELLOW + "✯ " + ChatColor.RED + "Tavo gyvybės" + ChatColor.YELLOW + " ✯");
            lore.add("       " + ChatColor.GREEN + "+ " + Mana.getdata.getDouble(p.getName() + "hpup"));
            meta.setLore(lore);
            skill3.setItemMeta(meta);
            myInventory.setItem(2, skill3);
            }
           
            if((double) Mana.getdata.get(p.getName() + "hpup") == 2){
            skill3 = new ItemStack(Material.BOOK, 1);
            meta = skill3.getItemMeta();
            meta.setDisplayName(ChatColor.GREEN + "    ❱ " + ChatColor.GOLD + "Gyvybės" + ChatColor.GREEN + " ❰");
            lore.removeAll(lore);
            lore.add("");
            lore.add(ChatColor.YELLOW + "✯ " + ChatColor.RED + "Tavo gyvybės" + ChatColor.YELLOW + " ✯");
            lore.add("       " + ChatColor.GREEN + "+ " + Mana.getdata.getDouble(p.getName() + "hpup"));
            lore.add("     " + ChatColor.RED + "Maksimumas");
            meta.setLore(lore);
            skill3.setItemMeta(meta);
            myInventory.setItem(2, skill3);
            }
           
            if((double) Mana.getdata.get(p.getName() + "armor") < 2){
            ItemStack skill4 = new ItemStack(Material.PAPER, 1);
            meta = skill4.getItemMeta();
            meta.setDisplayName(ChatColor.GREEN + "    ❱ " + ChatColor.GOLD + "Šarvai" + ChatColor.GREEN + " ❰");
            lore.removeAll(lore);
            lore.add("");
            lore.add(ChatColor.YELLOW + "✯ " + ChatColor.RED + "Tavo šarvai" + ChatColor.YELLOW + " ✯");
            lore.add("      " + ChatColor.GREEN + "+ " + Mana.getdata.getDouble(p.getName() + "armor"));
            meta.setLore(lore);
            skill4.setItemMeta(meta);
            myInventory.setItem(3, skill4);
            }
           
            if((double) Mana.getdata.get(p.getName() + "armor") == 2){
            ItemStack skill4 = new ItemStack(Material.BOOK, 1);
            meta = skill4.getItemMeta();
            meta.setDisplayName(ChatColor.GREEN + "    ❱ " + ChatColor.GOLD + "Šarvai" + ChatColor.GREEN + " ❰");
            lore.removeAll(lore);
            lore.add("");
            lore.add(ChatColor.YELLOW + "✯ " + ChatColor.RED + "Tavo šarvai" + ChatColor.YELLOW + " ✯");
            lore.add("      " + ChatColor.GREEN + "+ " + Mana.getdata.getDouble(p.getName() + "armor"));
            lore.add("    " + ChatColor.RED + "Maksimumas");
            meta.setLore(lore);
            skill4.setItemMeta(meta);
            myInventory.setItem(3, skill4);
            }
           
            if((double) Mana.getdata.get(p.getName() + "nuod") < 2){
            ItemStack skill5 = new ItemStack(Material.PAPER, 1);
            meta = skill5.getItemMeta();
            meta.setDisplayName(ChatColor.GREEN + "    ❱ " + ChatColor.GOLD + "Nuodai" + ChatColor.GREEN + " ❰");
            lore.removeAll(lore);
            lore.add("");
            lore.add(ChatColor.YELLOW + "✯ " + ChatColor.RED + "Tavo nuodai" + ChatColor.YELLOW + " ✯");
            lore.add("      " + ChatColor.GREEN + "+ " + Mana.getdata.getDouble(p.getName() + "nuod"));            meta.setLore(lore);
            skill5.setItemMeta(meta);
            myInventory.setItem(4, skill5);
            }
           
            if((double) Mana.getdata.get(p.getName() + "nuod") == 2){
            ItemStack skill5 = new ItemStack(Material.BOOK, 1);
            meta = skill5.getItemMeta();
            meta.setDisplayName(ChatColor.GREEN + "    ❱ " + ChatColor.GOLD + "Nuodai" + ChatColor.GREEN + " ❰");
            lore.removeAll(lore);
            lore.add("");
            lore.add(ChatColor.YELLOW + "✯ " + ChatColor.RED + "Tavo nuodai" + ChatColor.YELLOW + " ✯");
            lore.add("      " + ChatColor.GREEN + "+ " + Mana.getdata.getDouble(p.getName() + "nuod"));
            lore.add("    " + ChatColor.RED + "Maksimumas");
            meta.setLore(lore);
            skill5.setItemMeta(meta);
            myInventory.setItem(4, skill5);
            }
           
            if((double) Mana.getdata.get(p.getName() + "ggrts") < 2){
            ItemStack skill6 = new ItemStack(Material.PAPER, 1);
            meta = skill6.getItemMeta();
            meta.setDisplayName(ChatColor.GREEN + "    ❱ " + ChatColor.GOLD + "Ginklo greitis" + ChatColor.GREEN + " ❰");
            lore.removeAll(lore);
            lore.add("");
            lore.add(ChatColor.YELLOW + "✯ " + ChatColor.RED + "Tavo ginklo greitis" + ChatColor.YELLOW + " ✯");
            lore.add("          " + ChatColor.GREEN + "+ " + Mana.getdata.getDouble(p.getName() + "ggrts"));
            meta.setLore(lore);
            skill6.setItemMeta(meta);
            myInventory.setItem(5, skill6);
            }
           
            if((double) Mana.getdata.get(p.getName() + "ggrts") == 2){
            ItemStack skill6 = new ItemStack(Material.BOOK, 1);
            meta = skill6.getItemMeta();
            meta.setDisplayName(ChatColor.GREEN + "    ❱ " + ChatColor.GOLD + "Ginklo greitis" + ChatColor.GREEN + " ❰");
            lore.removeAll(lore);
            lore.add("");
            lore.add(ChatColor.YELLOW + "✯ " + ChatColor.RED + "Tavo ginklo greitis" + ChatColor.YELLOW + " ✯");
            lore.add("          " + ChatColor.GREEN + "+ " + Mana.getdata.getDouble(p.getName() + "ggrts"));
            lore.add("       " + ChatColor.RED + "Maksimumas");
            meta.setLore(lore);
            skill6.setItemMeta(meta);
            myInventory.setItem(5, skill6);
            }
           
            ItemStack skill7 = new ItemStack(Material.ENDER_PEARL, 1);
            meta = skill7.getItemMeta();
            meta.setDisplayName(ChatColor.GREEN + "Taškai");
            lore.removeAll(lore);
            lore.add("");
            Double dbl = Mana.getdata.getDouble(p.getName() + "tsk");
            int tsk = dbl.intValue();
            lore.add(ChatColor.RED + "Tavo taškai: " + ChatColor.YELLOW + tsk);
            meta.setLore(lore);
            skill7.setItemMeta(meta);
            myInventory.setItem(6, skill7);
            meta = reset.getItemMeta();
            meta.setDisplayName(ChatColor.RED + "RESET");
            reset.setItemMeta(meta);
            myInventory.setItem(7, reset);
            meta = exit.getItemMeta();
            meta.setDisplayName(ChatColor.RED + "EXIT");
            exit.setItemMeta(meta);
            myInventory.setItem(8, exit);
               Mana.savedata();
            return myInventory;
        }
    }
    I am Lithuanian so some strings or variables could be in Lithuanian language.
     
  2. That code is messy as hell, but as for your issue, the event fires twice, once for each hand, so you need to check if PlayerInteractEvent#getSlot is EquipmentSlot.MAIN_HAND (or something similar)
     
    • Agree Agree x 1
  3. Can you give me some examples?
     
  4. He's referring to InventoryClickEvent, not PlayerInteractEvent.
     
  5. All kinds or just some?
     
  6. Try putting the InventoryClickEvent in another class. I had a similar problem that you are having. It would fire twice for no reason. Putting it in a separate class fixed it for me.
     
  7. Fix by myself and my friend Alter. I registered this event 3 times.
     
    • Funny Funny x 1