首页 > 解决方案 > 登录到我的世界服务器时出现整数问题

问题描述

我正在制作一个用于日志记录的插件(authme 对我不起作用),它将向您发送 5 条消息以警告您有关日志记录,然后它会踢你。一切正常,但 int i 将在这 6 之后。我知道,我可以将 i 设置为 1,但是如果有更多玩家登录,我该怎么办?

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++;
            }
        }
    }

我的代码

标签: javaminecraftbukkit

解决方案


您可以使用HashMap带有某种玩家名称或 ID 的 a 作为键。

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);
            }
        }
    }

代替。.getName()使用玩家类用来标识自己的任何字段。


推荐阅读