aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0838-Optimize-player-lookups-for-beacons.patch
diff options
context:
space:
mode:
authorSpottedleaf <[email protected]>2024-07-17 10:24:53 -0700
committerSpottedleaf <[email protected]>2024-07-17 10:28:32 -0700
commit00b949f1bbbf444e2b5e7b8de7c9b14fbd2133c6 (patch)
tree82639515bc5e9ae00c1e639e72137ed51e1ac688 /patches/server/0838-Optimize-player-lookups-for-beacons.patch
parent967f98aa81da851740aeb429778e46159fd188df (diff)
downloadPaper-00b949f1bbbf444e2b5e7b8de7c9b14fbd2133c6.tar.gz
Paper-00b949f1bbbf444e2b5e7b8de7c9b14fbd2133c6.zip
Remove Moonrise utils to MCUtils, remove duplicated/unused utils
Diffstat (limited to 'patches/server/0838-Optimize-player-lookups-for-beacons.patch')
-rw-r--r--patches/server/0838-Optimize-player-lookups-for-beacons.patch36
1 files changed, 36 insertions, 0 deletions
diff --git a/patches/server/0838-Optimize-player-lookups-for-beacons.patch b/patches/server/0838-Optimize-player-lookups-for-beacons.patch
new file mode 100644
index 0000000000..1c203c23a6
--- /dev/null
+++ b/patches/server/0838-Optimize-player-lookups-for-beacons.patch
@@ -0,0 +1,36 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Spottedleaf <[email protected]>
+Date: Thu, 6 Jul 2023 20:17:37 -0700
+Subject: [PATCH] Optimize player lookups for beacons
+
+For larger ranges, it's better to iterate over the player list
+than the entity slices.
+
+diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
+index b6633ca1ee73ef0f8a220992a2e0424e67dd9758..814e70f558d7a6186233da0ff86c94c95d390e09 100644
+--- a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
++++ b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
+@@ -333,7 +333,22 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name
+ double d0 = blockEntity != null ? blockEntity.getEffectRange() : (i * 10 + 10); // Paper - Custom beacon ranges
+
+ AABB axisalignedbb = (new AABB(blockposition)).inflate(d0).expandTowards(0.0D, (double) world.getHeight(), 0.0D);
+- List<Player> list = world.getEntitiesOfClass(Player.class, axisalignedbb);
++ // Paper start - Perf: optimize player lookup for beacons
++ List<Player> list;
++ if (d0 <= 128.0) {
++ list = world.getEntitiesOfClass(Player.class, axisalignedbb);
++ } else {
++ list = new java.util.ArrayList<>();
++ for (Player player : world.players()) {
++ if (player.isSpectator()) {
++ continue;
++ }
++ if (player.getBoundingBox().intersects(axisalignedbb)) {
++ list.add(player);
++ }
++ }
++ }
++ // Paper end - Perf: optimize player lookup for beacons
+
+ return list;
+ }