diff options
author | Spottedleaf <[email protected]> | 2023-07-06 20:18:33 -0700 |
---|---|---|
committer | Spottedleaf <[email protected]> | 2023-07-06 20:18:33 -0700 |
commit | 48ea66e97fdc464dc1e766b60bcbfcc0f4fd8491 (patch) | |
tree | 44ab5a2f70900e50928446376b872ff763b76a7f | |
parent | dadd8b5a7cf3775f9d9778f17bf7a0bedfe0a768 (diff) | |
download | Paper-48ea66e97fdc464dc1e766b60bcbfcc0f4fd8491.tar.gz Paper-48ea66e97fdc464dc1e766b60bcbfcc0f4fd8491.zip |
Optimize player lookups for beacons
For larger ranges, it's better to iterate over the player list
than the entity slices.
-rw-r--r-- | patches/server/0981-Optimize-player-lookups-for-beacons.patch | 30 |
1 files changed, 30 insertions, 0 deletions
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 <[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 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<Player> list = world.getEntitiesOfClass(Player.class, axisalignedbb); ++ // Paper start - optimize player lookup for beacons ++ List<Player> 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; + } |