From 48ea66e97fdc464dc1e766b60bcbfcc0f4fd8491 Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Thu, 6 Jul 2023 20:18:33 -0700 Subject: [PATCH] Optimize player lookups for beacons For larger ranges, it's better to iterate over the player list than the entity slices. --- ...-Optimize-player-lookups-for-beacons.patch | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 patches/server/0981-Optimize-player-lookups-for-beacons.patch diff --git a/patches/server/0981-Optimize-player-lookups-for-beacons.patch b/patches/server/0981-Optimize-player-lookups-for-beacons.patch new file mode 100644 index 0000000000..e0c3eca72c --- /dev/null +++ b/patches/server/0981-Optimize-player-lookups-for-beacons.patch @@ -0,0 +1,30 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Spottedleaf +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 59246e24558569f7f50b4d4d508616798091c888..3b866e2c20ee7bfc981ff09b29065530de993778 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 +@@ -316,7 +316,16 @@ 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 list = world.getEntitiesOfClass(Player.class, axisalignedbb); ++ // Paper start - optimize player lookup for beacons ++ List list; ++ if (d0 <= 128.0) { ++ list = world.getEntitiesOfClass(Player.class, axisalignedbb); ++ } else { ++ list = (List)world.getNearbyPlayers(null, (double)blockposition.getX() + 0.5, (double)blockposition.getY() + 0.5, (double)blockposition.getZ() + 0.5, -1.0, (net.minecraft.world.entity.Entity entity) -> { ++ return !entity.isSpectator() && entity.getBoundingBox().intersects(axisalignedbb); ++ }); ++ } ++ // Paper end - optimize player lookup for beacons + + return list; + }