将具有相同 IP 的在线玩家收集到列表中

Gather online players with same IP to a list

我 运行 我的服务器上有一堆 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)和命令 returns 一个空列表。控制台中没有错误。 [1]: https://i.stack.imgur.com/ykTAX.png 有什么想法吗?

你只需要检查你和其他人之间的玩家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;
}

使用此代码成功运行:

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());,这似乎已经成功了.