将具有相同IP的在线玩家聚集到一个列表中
Posted
技术标签:
【中文标题】将具有相同IP的在线玩家聚集到一个列表中【英文标题】:Gather online players with same IP to a list 【发布时间】:2022-01-06 14:49:21 【问题描述】:我在我的服务器上运行了一堆 alt/bot 帐户,我正在尝试创建一个命令来获取所有(在线)玩家的 IP 地址,如果它与我的匹配,那么它将它们添加到玩家列表中以进行打印给执行命令的人。这是我目前所拥有的。
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
if (label.equalsIgnoreCase("bots"))
if (!sender.hasPermission("lbp.bots"))
sender.sendMessage(ChatColor.RED + "You cannot run this command.");
return true;
if (args.length == 0)
//Player p = (Player) sender;
List < Player > onlineBots = new ArrayList < Player > ();
for (Player players: Bukkit.getOnlinePlayers())
if (players.getAddress().getAddress().getHostAddress() == "redacted ip address")
onlineBots.add(players);
sender.sendMessage(ChatColor.AQUA + "Luke's Bot List: " + ChatColor.BOLD + "" + onlineBots);
return true;
return false;
我已经将我的 IP 地址插入到“编辑的 IP 地址”,加入了我的端口转发本地服务器,所以我没有加入主机 IP(仔细检查了我的 IP 在 Essentials /whois 中正确注册)并且该命令返回一个空列表。控制台中没有错误。 [1]:https://i.stack.imgur.com/ykTAX.png 有什么想法吗?
【问题讨论】:
【参考方案1】:您只需要检查您和其他人之间的播放器 IP。 Adress/Host 地址之间的值变化很大,特别是在 spigot/bungee 之间。
所以,我建议你使用这样的代码:
if (args.length == 0)
List<Player> onlineBots = new ArrayList<>();
for (Player players : Bukkit.getOnlinePlayers())
if (players.getAddress().getAddress().getHostAddress().equals(sender.getAddress().getAddress().getHostAddress()))
onlineBots.add(players);
sender.sendMessage(ChatColor.AQUA + "Luke's Bot List: " + ChatColor.BOLD + "" + onlineBots);
return true;
【讨论】:
谢谢,但我有超过 10 个帐户同时在与我的 IP 相同的 IP 下连接到我的服务器,因为它们是我的 alt 帐户。这就是为什么我想检查他们的 IP 是否等于我的 IP 然后添加到列表中,而不是只获取不是发件人的每个人。也许我只是误读了你的建议? 哦不,是我没有很好地理解您的要求。我只是编辑我的代码【参考方案2】:使用此代码让它工作:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
if (label.equalsIgnoreCase("bots"))
if (!sender.hasPermission("lbp.bots"))
sender.sendMessage(ChatColor.RED + "You cannot run this command.");
return true;
if (args.length == 0)
List < String > onlineBots = new ArrayList < > ();
for (Player players: Bukkit.getOnlinePlayers())
if (players.getAddress().getAddress().getHostAddress().equals("insert IP here"))
onlineBots.add(players.getName());
sender.sendMessage(ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "Luke's Bot List: " + ChatColor.RESET + "" + ChatColor.AQUA + "" + onlineBots.toString());
return true;
return false;
由于List<Player>
,列表以CraftPlayer 格式返回玩家,所以我将列表类型更改为List<String>
并使用onlineBots.add(players.getName());
,这似乎成功了。
【讨论】:
以上是关于将具有相同IP的在线玩家聚集到一个列表中的主要内容,如果未能解决你的问题,请参考以下文章