From 5cf21217459aefc84a33f6b6591c3d8af6411881 Mon Sep 17 00:00:00 2001 From: MartijnMuijsers Date: Tue, 29 Nov 2022 23:39:55 +0100 Subject: [PATCH] Optimize player list for sending player info --- .../0005-Player-canSee-by-entity-UUID.patch | 34 +++++++++++++++ ...PI.patch => 0006-Last-tick-time-API.patch} | 0 .../0065-Player-canSee-by-entity-UUID.patch | 31 ++++++++++++++ ...-Spread-out-sending-all-player-info.patch} | 0 ...-player-list-for-sending-player-info.patch | 42 +++++++++++++++++++ ...atch => 0068-Measure-last-tick-time.patch} | 0 ...PI.patch => 0069-Last-tick-time-API.patch} | 0 ...-Show-last-tick-time-in-tps-command.patch} | 0 ...-physics-check-before-vehicle-check.patch} | 0 ...072-Variable-main-thread-task-delay.patch} | 2 +- ... 0073-Reduce-RandomSource-instances.patch} | 0 ....patch => 0074-CPU-cores-estimation.patch} | 0 ... 0075-Add-centralized-AsyncExecutor.patch} | 0 ...=> 0076-Remove-Paper-async-executor.patch} | 0 ... 0077-Remove-Paper-cleaner-executor.patch} | 0 ... => 0078-Remove-background-executor.patch} | 0 ...h => 0079-Remove-bootstrap-executor.patch} | 0 ...0080-Remove-world-upgrade-executors.patch} | 0 ...> 0081-Remove-tab-complete-executor.patch} | 0 ...=> 0082-Remove-text-filter-executor.patch} | 0 20 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 patches/api/0005-Player-canSee-by-entity-UUID.patch rename patches/api/{0005-Last-tick-time-API.patch => 0006-Last-tick-time-API.patch} (100%) create mode 100644 patches/server/0065-Player-canSee-by-entity-UUID.patch rename patches/server/{0065-Spread-out-sending-all-player-info.patch => 0066-Spread-out-sending-all-player-info.patch} (100%) create mode 100644 patches/server/0067-Optimize-player-list-for-sending-player-info.patch rename patches/server/{0066-Measure-last-tick-time.patch => 0068-Measure-last-tick-time.patch} (100%) rename patches/server/{0067-Last-tick-time-API.patch => 0069-Last-tick-time-API.patch} (100%) rename patches/server/{0068-Show-last-tick-time-in-tps-command.patch => 0070-Show-last-tick-time-in-tps-command.patch} (100%) rename patches/server/{0069-Collision-physics-check-before-vehicle-check.patch => 0071-Collision-physics-check-before-vehicle-check.patch} (100%) rename patches/server/{0070-Variable-main-thread-task-delay.patch => 0072-Variable-main-thread-task-delay.patch} (99%) rename patches/server/{0071-Reduce-RandomSource-instances.patch => 0073-Reduce-RandomSource-instances.patch} (100%) rename patches/server/{0072-CPU-cores-estimation.patch => 0074-CPU-cores-estimation.patch} (100%) rename patches/server/{0073-Add-centralized-AsyncExecutor.patch => 0075-Add-centralized-AsyncExecutor.patch} (100%) rename patches/server/{0074-Remove-Paper-async-executor.patch => 0076-Remove-Paper-async-executor.patch} (100%) rename patches/server/{0075-Remove-Paper-cleaner-executor.patch => 0077-Remove-Paper-cleaner-executor.patch} (100%) rename patches/server/{0076-Remove-background-executor.patch => 0078-Remove-background-executor.patch} (100%) rename patches/server/{0077-Remove-bootstrap-executor.patch => 0079-Remove-bootstrap-executor.patch} (100%) rename patches/server/{0078-Remove-world-upgrade-executors.patch => 0080-Remove-world-upgrade-executors.patch} (100%) rename patches/server/{0079-Remove-tab-complete-executor.patch => 0081-Remove-tab-complete-executor.patch} (100%) rename patches/server/{0080-Remove-text-filter-executor.patch => 0082-Remove-text-filter-executor.patch} (100%) diff --git a/patches/api/0005-Player-canSee-by-entity-UUID.patch b/patches/api/0005-Player-canSee-by-entity-UUID.patch new file mode 100644 index 0000000..997ed6f --- /dev/null +++ b/patches/api/0005-Player-canSee-by-entity-UUID.patch @@ -0,0 +1,34 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: MartijnMuijsers +Date: Tue, 29 Nov 2022 23:38:12 +0100 +Subject: [PATCH] Player#canSee by entity UUID + +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/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java +index 1e27b9de47f111b9c000243214e22890e323f7fc..9ce603a0c905017f512260de110cf7d8d2097028 100644 +--- a/src/main/java/org/bukkit/entity/Player.java ++++ b/src/main/java/org/bukkit/entity/Player.java +@@ -1466,6 +1466,16 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM + @org.jetbrains.annotations.ApiStatus.Experimental // Paper + public boolean canSee(@NotNull Entity entity); + ++ // Gale start - Purpur - Player#canSee by entity UUID ++ /** ++ * Checks to see if an entity has been visually hidden from this player. ++ * ++ * @param uuid The {@link Entity#getUniqueId()} of the entity to check ++ * @return True if the entity with the provided UUID is not being hidden from this player ++ */ ++ boolean canSee(@NotNull UUID entityUUID); ++ // Gale end - Purpur - Player#canSee by entity UUID ++ + /** + * Checks to see if this player is currently flying or not. + * diff --git a/patches/api/0005-Last-tick-time-API.patch b/patches/api/0006-Last-tick-time-API.patch similarity index 100% rename from patches/api/0005-Last-tick-time-API.patch rename to patches/api/0006-Last-tick-time-API.patch diff --git a/patches/server/0065-Player-canSee-by-entity-UUID.patch b/patches/server/0065-Player-canSee-by-entity-UUID.patch new file mode 100644 index 0000000..4e2a32a --- /dev/null +++ b/patches/server/0065-Player-canSee-by-entity-UUID.patch @@ -0,0 +1,31 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: MartijnMuijsers +Date: Tue, 29 Nov 2022 23:37:12 +0100 +Subject: [PATCH] Player#canSee by entity UUID + +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/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +index a5220a4e514865c70700527bcd2f941d852564c0..db83c62770d5bac7255251d26c75771ec6897317 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +@@ -1890,6 +1890,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + return !this.hiddenEntities.containsKey(entity.getUniqueId()); + } + ++ // Gale start - Purpur - Player#canSee by entity UUID ++ @Override ++ public boolean canSee(UUID entityUUID) { ++ return !this.hiddenEntities.containsKey(entityUUID); ++ } ++ // Gale end - Purpur - Player#canSee by entity UUID ++ + @Override + public Map serialize() { + Map result = new LinkedHashMap(); diff --git a/patches/server/0065-Spread-out-sending-all-player-info.patch b/patches/server/0066-Spread-out-sending-all-player-info.patch similarity index 100% rename from patches/server/0065-Spread-out-sending-all-player-info.patch rename to patches/server/0066-Spread-out-sending-all-player-info.patch diff --git a/patches/server/0067-Optimize-player-list-for-sending-player-info.patch b/patches/server/0067-Optimize-player-list-for-sending-player-info.patch new file mode 100644 index 0000000..d777350 --- /dev/null +++ b/patches/server/0067-Optimize-player-list-for-sending-player-info.patch @@ -0,0 +1,42 @@ +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 + } + } diff --git a/patches/server/0066-Measure-last-tick-time.patch b/patches/server/0068-Measure-last-tick-time.patch similarity index 100% rename from patches/server/0066-Measure-last-tick-time.patch rename to patches/server/0068-Measure-last-tick-time.patch diff --git a/patches/server/0067-Last-tick-time-API.patch b/patches/server/0069-Last-tick-time-API.patch similarity index 100% rename from patches/server/0067-Last-tick-time-API.patch rename to patches/server/0069-Last-tick-time-API.patch diff --git a/patches/server/0068-Show-last-tick-time-in-tps-command.patch b/patches/server/0070-Show-last-tick-time-in-tps-command.patch similarity index 100% rename from patches/server/0068-Show-last-tick-time-in-tps-command.patch rename to patches/server/0070-Show-last-tick-time-in-tps-command.patch diff --git a/patches/server/0069-Collision-physics-check-before-vehicle-check.patch b/patches/server/0071-Collision-physics-check-before-vehicle-check.patch similarity index 100% rename from patches/server/0069-Collision-physics-check-before-vehicle-check.patch rename to patches/server/0071-Collision-physics-check-before-vehicle-check.patch diff --git a/patches/server/0070-Variable-main-thread-task-delay.patch b/patches/server/0072-Variable-main-thread-task-delay.patch similarity index 99% rename from patches/server/0070-Variable-main-thread-task-delay.patch rename to patches/server/0072-Variable-main-thread-task-delay.patch index 9ed99c2..e184fc0 100644 --- a/patches/server/0070-Variable-main-thread-task-delay.patch +++ b/patches/server/0072-Variable-main-thread-task-delay.patch @@ -384,7 +384,7 @@ index 9de597c11c3bd0f23e87c3a6187b2036987356e0..4b99b15c950d11451a70b8362aec5124 } } diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index d2e6a92a44416bfaa161c78dd4b9a7b3ad78792a..1c419c1b97b2109d43e3488e1583fb8a6ec6833d 100644 +index a60db92d8c6afab40e12b3ac28241beac06bcf63..a9f5ce015e1f99391c8ba91cbe0c91de327c693f 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -100,6 +100,7 @@ import net.minecraft.world.scores.Objective; diff --git a/patches/server/0071-Reduce-RandomSource-instances.patch b/patches/server/0073-Reduce-RandomSource-instances.patch similarity index 100% rename from patches/server/0071-Reduce-RandomSource-instances.patch rename to patches/server/0073-Reduce-RandomSource-instances.patch diff --git a/patches/server/0072-CPU-cores-estimation.patch b/patches/server/0074-CPU-cores-estimation.patch similarity index 100% rename from patches/server/0072-CPU-cores-estimation.patch rename to patches/server/0074-CPU-cores-estimation.patch diff --git a/patches/server/0073-Add-centralized-AsyncExecutor.patch b/patches/server/0075-Add-centralized-AsyncExecutor.patch similarity index 100% rename from patches/server/0073-Add-centralized-AsyncExecutor.patch rename to patches/server/0075-Add-centralized-AsyncExecutor.patch diff --git a/patches/server/0074-Remove-Paper-async-executor.patch b/patches/server/0076-Remove-Paper-async-executor.patch similarity index 100% rename from patches/server/0074-Remove-Paper-async-executor.patch rename to patches/server/0076-Remove-Paper-async-executor.patch diff --git a/patches/server/0075-Remove-Paper-cleaner-executor.patch b/patches/server/0077-Remove-Paper-cleaner-executor.patch similarity index 100% rename from patches/server/0075-Remove-Paper-cleaner-executor.patch rename to patches/server/0077-Remove-Paper-cleaner-executor.patch diff --git a/patches/server/0076-Remove-background-executor.patch b/patches/server/0078-Remove-background-executor.patch similarity index 100% rename from patches/server/0076-Remove-background-executor.patch rename to patches/server/0078-Remove-background-executor.patch diff --git a/patches/server/0077-Remove-bootstrap-executor.patch b/patches/server/0079-Remove-bootstrap-executor.patch similarity index 100% rename from patches/server/0077-Remove-bootstrap-executor.patch rename to patches/server/0079-Remove-bootstrap-executor.patch diff --git a/patches/server/0078-Remove-world-upgrade-executors.patch b/patches/server/0080-Remove-world-upgrade-executors.patch similarity index 100% rename from patches/server/0078-Remove-world-upgrade-executors.patch rename to patches/server/0080-Remove-world-upgrade-executors.patch diff --git a/patches/server/0079-Remove-tab-complete-executor.patch b/patches/server/0081-Remove-tab-complete-executor.patch similarity index 100% rename from patches/server/0079-Remove-tab-complete-executor.patch rename to patches/server/0081-Remove-tab-complete-executor.patch diff --git a/patches/server/0080-Remove-text-filter-executor.patch b/patches/server/0082-Remove-text-filter-executor.patch similarity index 100% rename from patches/server/0080-Remove-text-filter-executor.patch rename to patches/server/0082-Remove-text-filter-executor.patch