9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2025-12-19 15:09:25 +00:00

optimise getNearestPlayer

This commit is contained in:
hayanesuru
2025-06-03 15:16:15 +09:00
parent 12711630d4
commit 2897757163

View File

@@ -20,10 +20,10 @@ One-time operation: Convert distance to squared distance
Total operations: ~3 × n (in the no-predicate case) or ~4 × n (with predicate) Total operations: ~3 × n (in the no-predicate case) or ~4 × n (with predicate)
diff --git a/net/minecraft/world/level/EntityGetter.java b/net/minecraft/world/level/EntityGetter.java diff --git a/net/minecraft/world/level/EntityGetter.java b/net/minecraft/world/level/EntityGetter.java
index 670860df81a3abfc1b8b53be505fce0ee32ee2c4..083a2b5da246113913bcd5d0b2b9be42cf0554d9 100644 index 670860df81a3abfc1b8b53be505fce0ee32ee2c4..308e00947da3fe4888fb1b1b9fa11ac5da46663b 100644
--- a/net/minecraft/world/level/EntityGetter.java --- a/net/minecraft/world/level/EntityGetter.java
+++ b/net/minecraft/world/level/EntityGetter.java +++ b/net/minecraft/world/level/EntityGetter.java
@@ -201,23 +201,42 @@ public interface EntityGetter extends ca.spottedleaf.moonrise.patches.chunk_syst @@ -201,23 +201,43 @@ public interface EntityGetter extends ca.spottedleaf.moonrise.patches.chunk_syst
} }
// Paper end - Affects Spawning API // Paper end - Affects Spawning API
@@ -41,9 +41,10 @@ index 670860df81a3abfc1b8b53be505fce0ee32ee2c4..083a2b5da246113913bcd5d0b2b9be42
- for (Player player1 : this.players()) { - for (Player player1 : this.players()) {
- if (predicate == null || predicate.test(player1)) { - if (predicate == null || predicate.test(player1)) {
+ List<? extends Player> players = this.players();
+ if (predicate == null) { + if (predicate == null) {
+ for (int i = 0; i < this.players().size(); i++) { + for (int i = 0, playersSize = players.size(); i < playersSize; i++) {
+ Player player1 = this.players().get(i); + Player player1 = players.get(i);
double d1 = player1.distanceToSqr(x, y, z); double d1 = player1.distanceToSqr(x, y, z);
- if ((distance < 0.0 || d1 < distance * distance) && (d == -1.0 || d1 < d)) { - if ((distance < 0.0 || d1 < distance * distance) && (d == -1.0 || d1 < d)) {
- d = d1; - d = d1;
@@ -53,8 +54,8 @@ index 670860df81a3abfc1b8b53be505fce0ee32ee2c4..083a2b5da246113913bcd5d0b2b9be42
} }
} }
+ } else { + } else {
+ for (int i = 0; i < this.players().size(); i++) { + for (int i = 0, playersSize = players.size(); i < playersSize; i++) {
+ Player player1 = this.players().get(i); + Player player1 = players.get(i);
+ if (predicate.test(player1)) { + if (predicate.test(player1)) {
+ double d1 = player1.distanceToSqr(x, y, z); + double d1 = player1.distanceToSqr(x, y, z);
+ if (d1 < distance) { + if (d1 < distance) {