aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0863-Optimize-player-lookups-for-beacons.patch
blob: 7ffe90e869d12894bd3bc65bc6b02f7833f63329 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
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 2e3d89ca35b513340cd1ebefa875280b32e1756e..8a89ba2f50b0032b9db854d2c8cb6493f58dbe34 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;
         }