You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bukkit自定义bots命令获取同IP在线玩家返回空列表问题求助

问题原因
  • 核心错误:Java字符串比较误用==运算符
    对于String这类引用类型,==比较的是两个对象的内存地址而非实际存储的内容。你从getHostAddress()方法获取到的IP字符串和你硬编码的IP常量是两个独立的对象,哪怕内容完全一致,==判断也会返回false,因此永远没有玩家会被加入结果列表。
  • 可优化问题:直接输出List<Player>类型会调用默认的toString方法,返回的是对象内存地址集合,命令执行者无法看到可读的玩家名称列表。
修复方案

修改后的代码如下:

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<Player> onlineBots = new ArrayList<>();
      // 替换为你的真实IP地址
      final String TARGET_IP = "redacted ip address";
      for (Player player : Bukkit.getOnlinePlayers()) {
        String playerIp = player.getAddress().getAddress().getHostAddress();
        // 使用equals方法比较字符串内容,常量在前避免空指针
        if (TARGET_IP.equals(playerIp)) {
          onlineBots.add(player);
        }
      }
      // 拼接玩家名称生成可读列表
      List<String> botNames = onlineBots.stream().map(Player::getName).toList();
      sender.sendMessage(ChatColor.AQUA + "Luke's Bot List: " + ChatColor.BOLD + String.join(", ", botNames));
      return true;
    }
  }
  return false;
}

如果你的服务器同时支持IPv4和IPv6,需确认你填入的IP格式和服务器记录的玩家IP格式完全一致,避免格式不匹配导致匹配失败。

内容的提问来源于stack exchange,提问作者pssluke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:45:05