LanAnY
@EventHandler
public void onDamage(AttrEntityDamageEvent e) {
    if (!damages.containsKey(e.getEntity())) return;// 判断实体
    Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
    Objective objective = board.registerNewObjective(DamageScoreboard.randomStr(), "dummy", "伤害统计");
    objective.setDisplaySlot(DisplaySlot.SIDEBAR);
    if (e.getDamager() instanceof Player) {
        Entity entity1 = e.getEntity();
        World world = entity1.getWorld();
        double x = InjuryStatistics.instance.getConfig().getDouble("InjuryStatistics.x");
        double y = entity1.getLocation().getY();
        double z = InjuryStatistics.instance.getConfig().getDouble("InjuryStatistics.z");
        Collection<Entity> collection = world.getNearbyEntities(entity1.getLocation(), x, y, z);
        for (Entity entity : collection) {
            if (entity instanceof Player) {
                final Player player = (Player) entity;
                final BiMap<Player, Double> fd0 = damages.get(e.getEntity());
                fd0.put(player, fd0.containsKey(player) ? (fd0.get(player) + e.getDamage()) : e.getDamage());
                damages.put(e.getEntity(), fd0);
                tasks.execute(() -> {
                    final BiMap<Double, Player> fd = fd0.inverse();
                    final List<Double> list = new ArrayList<>(fd.keySet());
                    Collections.sort(list);
                    AtomicInteger i = new AtomicInteger();
                    list.forEach(s -> {
                        Score score = objective.getScore(fd.get(s).getName() + ": " + AttrUtil.getNum(String.valueOf(Math.round(s))) + " (" + AttrUtil.dps(player) + " DPS)");
                        score.setScore(i.get());
                        i.getAndIncrement();
                    });
                    player.setScoreboard(board);
                });
            }
        }
    }
}求各位大佬帮忙看看,我这个问题是出在哪,这个记分板显示的内容重复了

2021.12 数据,可能有更多内容@EventHandler
public void onDamage(AttrEntityDamageEvent e) {
    if (!damages.containsKey(e.getEntity())) return;// 判断实体
    Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
    Objective objective = board.registerNewObjective(DamageScoreboard.randomStr(), &quot;dummy&quot;, &quot;伤害统计&quot;);
    objective.setDisplaySlot(DisplaySlot.SIDEBAR);
    if (e.getDamager() instanceof Player) {
  Entity entity1 = e.getEntity();
  World world = entity1.getWorld();
  double x = InjuryStatistics.instance.getConfig().getDouble(&quot;InjuryStatistics.x&quot;);
  double y = entity1.getLocation().getY();
  double z = InjuryStatistics.instance.getConfig().getDouble(&quot;InjuryStatistics.z&quot;);
  Collection&lt;Entity&gt; collection = world.getNearbyEntities(entity1.getLocation(), x, y, z);
  for (Entity entity : collection) {
   if (entity instanceof Player) {
    final Player player = (Player) entity;
    final BiMap&lt;Player, Double&gt; fd0 = damages.get(e.getEntity());
    fd0.put(player, fd0.containsKey(player) ? (fd0.get(player) + e.getDamage()) : e.getDamage());
    damages.put(e.getEntity(), fd0);
    tasks.execute(() -&gt; {
  final BiMap&lt;Double, Player&gt; fd = fd0.inverse();
  final List&lt;Double&gt; list = new ArrayList&lt;&gt;(fd.keySet());
  Collections.sort(list);
  AtomicInteger i = new AtomicInteger();
  list.forEach(s -&gt; {
   Score score = objective.getScore(fd.get(s).getName() + &quot;: &quot; + AttrUtil.getNum(String.valueOf(Math.round(s))) + &quot; (&quot; + AttrUtil.dps(player) + &quot; DPS)&quot;);
   score.setScore(i.get());
   i.getAndIncrement();
  });
  player.setScoreboard(board);
    });
   }
  }
    }
}求各位大佬帮忙看看,我这个问题是出在哪,这个记分板显示的内容重复了

William_Shi
我稍微读了一下,不一定能完全确定问题
1.修改集合的存储方式。任何情况下不要存储Player对象,存UUID,因为玩家可能会下线,此时Player对象就可能出现问题
2.试试看不要根据浮点数来寻找玩家名,通过玩家名寻找对应的浮点数

第一页 上一页 下一页 最后一页