@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);
});
}
}
}
}求各位大佬帮忙看看,我这个问题是出在哪,这个记分板显示的内容重复了
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);
});
}
}
}
}求各位大佬帮忙看看,我这个问题是出在哪,这个记分板显示的内容重复了
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 数据,可能有更多内容
@EventHandlerpublic 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);
});
}
}
}
}求各位大佬帮忙看看,我这个问题是出在哪,这个记分板显示的内容重复了
我稍微读了一下,不一定能完全确定问题
1.修改集合的存储方式。任何情况下不要存储Player对象,存UUID,因为玩家可能会下线,此时Player对象就可能出现问题
2.试试看不要根据浮点数来寻找玩家名,通过玩家名寻找对应的浮点数
1.修改集合的存储方式。任何情况下不要存储Player对象,存UUID,因为玩家可能会下线,此时Player对象就可能出现问题
2.试试看不要根据浮点数来寻找玩家名,通过玩家名寻找对应的浮点数