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 2f12a1054c9c9e311e02dc5c3244ad3688db15ba..45e3a4f09a0e515932d08f52e7d07cf8f6014fb6 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 @@ -329,7 +329,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; }