Fix framed maps looping through all players in world (#11819)

This commit is contained in:
Warrior 2024-12-25 12:31:03 +01:00 committed by GitHub
parent 25cc3d8578
commit 763b32d825
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 11 additions and 6 deletions

View file

@ -60,7 +60,7 @@ index 3dff97f13586be3b52bbe786852c185f6753a019..ff6503bf8eb88d1264c3d848a89d0255
} else if (this.seenBy.remove(player.connection)) { } else if (this.seenBy.remove(player.connection)) {
this.serverEntity.removePairing(player); this.serverEntity.removePairing(player);
diff --git a/net/minecraft/server/level/ServerEntity.java b/net/minecraft/server/level/ServerEntity.java diff --git a/net/minecraft/server/level/ServerEntity.java b/net/minecraft/server/level/ServerEntity.java
index 870b9efd445ddadb3725e88351555ad986ce7c72..a4da36060ca75968f5831adfc3f7117281649b7a 100644 index db06f966077928419bfe469260f04d7dfda69f28..0fb253aa55a24b56b17f524b3261c5b75c7d7e59 100644
--- a/net/minecraft/server/level/ServerEntity.java --- a/net/minecraft/server/level/ServerEntity.java
+++ b/net/minecraft/server/level/ServerEntity.java +++ b/net/minecraft/server/level/ServerEntity.java
@@ -90,6 +90,13 @@ public class ServerEntity { @@ -90,6 +90,13 @@ public class ServerEntity {
@ -77,7 +77,7 @@ index 870b9efd445ddadb3725e88351555ad986ce7c72..a4da36060ca75968f5831adfc3f71172
public void sendChanges() { public void sendChanges() {
// Paper start - optimise collisions // Paper start - optimise collisions
if (((ca.spottedleaf.moonrise.patches.chunk_system.entity.ChunkSystemEntity)this.entity).moonrise$isHardColliding()) { if (((ca.spottedleaf.moonrise.patches.chunk_system.entity.ChunkSystemEntity)this.entity).moonrise$isHardColliding()) {
@@ -130,7 +137,7 @@ public class ServerEntity { @@ -131,7 +138,7 @@ public class ServerEntity {
this.sendDirtyEntityData(); this.sendDirtyEntityData();
} }
@ -86,7 +86,7 @@ index 870b9efd445ddadb3725e88351555ad986ce7c72..a4da36060ca75968f5831adfc3f71172
byte b = Mth.packDegrees(this.entity.getYRot()); byte b = Mth.packDegrees(this.entity.getYRot());
byte b1 = Mth.packDegrees(this.entity.getXRot()); byte b1 = Mth.packDegrees(this.entity.getXRot());
boolean flag = Math.abs(b - this.lastSentYRot) >= 1 || Math.abs(b1 - this.lastSentXRot) >= 1; boolean flag = Math.abs(b - this.lastSentYRot) >= 1 || Math.abs(b1 - this.lastSentXRot) >= 1;
@@ -165,7 +172,7 @@ public class ServerEntity { @@ -166,7 +173,7 @@ public class ServerEntity {
long l1 = this.positionCodec.encodeY(vec3); long l1 = this.positionCodec.encodeY(vec3);
long l2 = this.positionCodec.encodeZ(vec3); long l2 = this.positionCodec.encodeZ(vec3);
boolean flag5 = l < -32768L || l > 32767L || l1 < -32768L || l1 > 32767L || l2 < -32768L || l2 > 32767L; boolean flag5 = l < -32768L || l > 32767L || l1 < -32768L || l1 > 32767L || l2 < -32768L || l2 > 32767L;
@ -95,7 +95,7 @@ index 870b9efd445ddadb3725e88351555ad986ce7c72..a4da36060ca75968f5831adfc3f71172
this.wasOnGround = this.entity.onGround(); this.wasOnGround = this.entity.onGround();
this.teleportDelay = 0; this.teleportDelay = 0;
packet = ClientboundEntityPositionSyncPacket.of(this.entity); packet = ClientboundEntityPositionSyncPacket.of(this.entity);
@@ -230,6 +237,7 @@ public class ServerEntity { @@ -231,6 +238,7 @@ public class ServerEntity {
} }
this.entity.hasImpulse = false; this.entity.hasImpulse = false;

View file

@ -29,7 +29,7 @@
removedPassengers(passengers, this.lastPassengers) removedPassengers(passengers, this.lastPassengers)
.forEach( .forEach(
removedPassenger -> { removedPassenger -> {
@@ -102,10 +_,10 @@ @@ -102,13 +_,14 @@
this.lastPassengers = passengers; this.lastPassengers = passengers;
} }
@ -42,7 +42,12 @@
+ MapId mapId = itemFrame.cachedMapId; // Paper - Perf: Cache map ids on item frames + MapId mapId = itemFrame.cachedMapId; // Paper - Perf: Cache map ids on item frames
MapItemSavedData savedData = MapItem.getSavedData(mapId, this.level); MapItemSavedData savedData = MapItem.getSavedData(mapId, this.level);
if (savedData != null) { if (savedData != null) {
for (ServerPlayer serverPlayer : this.level.players()) { - for (ServerPlayer serverPlayer : this.level.players()) {
+ for (final net.minecraft.server.network.ServerPlayerConnection connection : this.trackedPlayers) { // Paper
+ final ServerPlayer serverPlayer = connection.getPlayer(); // Paper
savedData.tickCarriedBy(serverPlayer, item);
Packet<?> updatePacket = savedData.getUpdatePacket(mapId, serverPlayer);
if (updatePacket != null) {
@@ -141,7 +_,13 @@ @@ -141,7 +_,13 @@
} else { } else {
this.teleportDelay++; this.teleportDelay++;