Search code examples
javaminecraftbukkit

Problem with integers when logging to minecraft server


I am making a plugin for logging (authme isn't working for me), which will send you 5 messages to warn you about logging and then it will kick you. Everything works perfectly, but int i will be after this 6. I know, I can set i to 1, but what can I do, if there are logging more players?

int i = 1;
    
    void waitForLogin(String message, Player p) {
        Bukkit.getScheduler().runTaskLater(plugin, () -> justDoIt(message, p), 60);
        Bukkit.getScheduler().runTaskLater(plugin, () -> justDoIt(message, p), 120);
        Bukkit.getScheduler().runTaskLater(plugin, () -> justDoIt(message, p), 180);
        Bukkit.getScheduler().runTaskLater(plugin, () -> justDoIt(message, p), 240);
        Bukkit.getScheduler().runTaskLater(plugin, () -> justDoIt(message, p), 300);
        Bukkit.getScheduler().runTaskLater(plugin, () -> justDoIt(message, p), 360);
    }
    
    void justDoIt(String message, Player p) {
        if (may_loggin.contains(p)) {
            if (i == 6) {
                p.kickPlayer(ChatColor.DARK_RED + "Cas vyprsel!");
            } else {
                p.sendMessage(message);
                i++;
            }
        }
    }

My code


Solution

  • You can use a HashMap with the player name or ID of some sort as the key.

    Map<String. Integer> playerCounter = new HashMap<>():
        
        void waitForLogin(String message, Player p) {
            Bukkit.getScheduler().runTaskLater(plugin, () -> justDoIt(message, p), 60);
            Bukkit.getScheduler().runTaskLater(plugin, () -> justDoIt(message, p), 120);
            Bukkit.getScheduler().runTaskLater(plugin, () -> justDoIt(message, p), 180);
            Bukkit.getScheduler().runTaskLater(plugin, () -> justDoIt(message, p), 240);
            Bukkit.getScheduler().runTaskLater(plugin, () -> justDoIt(message, p), 300);
            Bukkit.getScheduler().runTaskLater(plugin, () -> justDoIt(message, p), 360);
        }
    
        void justDoIt(String message, Player p) {
            if (may_loggin.contains(p)) {
                if (i == 6) {
                    p.kickPlayer(ChatColor.DARK_RED + "Cas vyprsel!");
                    playerCounter.remove(p.getName());
                } else {
                    p.sendMessage(message);
                    playerCounter.put(p.getName(), playerCounter.getOrDefault(p.getName(), 0) + 1);
                }
            }
        }
    

    Replace..getName() with whatever fields player class uses to identify itself.