登录到我的世界服务器时出现整数问题
Problem with integers when logging to minecraft server
我正在制作一个日志插件(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++;
}
}
}
My code
您可以使用 HashMap
以玩家名称或某种 ID 作为键。
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()
替换为玩家class用来标识自己的任何字段。
我正在制作一个日志插件(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++;
}
}
}
My code
您可以使用 HashMap
以玩家名称或某种 ID 作为键。
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()
替换为玩家class用来标识自己的任何字段。