From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: MartijnMuijsers Date: Tue, 29 Nov 2022 23:30:38 +0100 Subject: [PATCH] Optimize player list for sending player info License: MIT (https://opensource.org/licenses/MIT) This patch is based on the following patch: "Spread out and optimise player list ticksSpread out and optimise player list ticks" By: James Lyne As part of: Purpur (https://github.com/PurpurMC/Purpur) Licensed under: MIT (https://opensource.org/licenses/MIT) diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java index d2e6a92a44416bfaa161c78dd4b9a7b3ad78792a..a60db92d8c6afab40e12b3ac28241beac06bcf63 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1070,14 +1070,18 @@ public abstract class PlayerList { // Gale start - Purpur - spread out sending all player info ServerPlayer[] sendAllPlayerInfoBucket = this.sendAllPlayerInfoBuckets[this.sendAllPlayerInfoIn]; if (sendAllPlayerInfoBucket != null) { - for (ServerPlayer target : sendAllPlayerInfoBucket) { + // Gale start - Purpur - optimize player list for sending player info + for (ServerPlayer targetPlayer : sendAllPlayerInfoBucket) { // Gale end - Purpur - spread out sending all player info - target.connection.send(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.UPDATE_LATENCY, this.players.stream().filter(new Predicate() { - @Override - public boolean test(ServerPlayer input) { - return target.getBukkitEntity().canSee(input.getBukkitEntity()); + var target = targetPlayer.getBukkitEntity();; + final List list = new java.util.ArrayList<>(this.players.size()); + for (ServerPlayer player : this.players) { + if (target.canSee(player.getUUID())) { + list.add(player); } - }).collect(Collectors.toList()))); + } + target.getHandle().connection.send(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.UPDATE_LATENCY, list)); + // Gale end - Purpur - optimize player list for sending player info // Gale start - Purpur - spread out sending all player info } }