Skip to content

Commit 4446f17

Browse files
authored
Fix PlayerClientLoadedWorldEvent calls (#13374)
1 parent cc3dae7 commit 4446f17

File tree

2 files changed

+17
-32
lines changed

2 files changed

+17
-32
lines changed

paper-server/patches/features/0023-Optimise-collision-checking-in-player-move-packet-ha.patch

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Subject: [PATCH] Optimise collision checking in player move packet handling
66
Move collision logic to just the hasNewCollision call instead of getCubes + hasNewCollision
77

88
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
9-
index 1c5750c258bfb4b551048670a5e73a19a813ec47..ad4d20dda67ffb37e15a1623104a6e23417cc68e 100644
9+
index 96f1ffabd7d5e60f6d843cf5081f4f137c07ee99..59b664b69b68313d02d06d952ea9d2e6d602500f 100644
1010
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
1111
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
1212
@@ -623,6 +623,7 @@ public class ServerGamePacketListenerImpl
@@ -78,7 +78,7 @@ index 1c5750c258bfb4b551048670a5e73a19a813ec47..ad4d20dda67ffb37e15a1623104a6e23
7878
}
7979

8080
@Override
81-
@@ -1509,7 +1542,7 @@ public class ServerGamePacketListenerImpl
81+
@@ -1502,7 +1535,7 @@ public class ServerGamePacketListenerImpl
8282
}
8383
}
8484

@@ -87,15 +87,15 @@ index 1c5750c258bfb4b551048670a5e73a19a813ec47..ad4d20dda67ffb37e15a1623104a6e23
8787
d3 = d - this.lastGoodX; // Paper - diff on change, used for checking large move vectors above
8888
d4 = d1 - this.lastGoodY; // Paper - diff on change, used for checking large move vectors above
8989
d5 = d2 - this.lastGoodZ; // Paper - diff on change, used for checking large move vectors above
90-
@@ -1548,6 +1581,7 @@ public class ServerGamePacketListenerImpl
90+
@@ -1541,6 +1574,7 @@ public class ServerGamePacketListenerImpl
9191
boolean flag1 = this.player.verticalCollisionBelow;
9292
this.player.move(MoverType.PLAYER, new Vec3(d3, d4, d5));
9393
this.player.onGround = packet.isOnGround(); // CraftBukkit - SPIGOT-5810, SPIGOT-5835, SPIGOT-6828: reset by this.player.move
9494
+ final boolean didCollide = toX != this.player.getX() || toY != this.player.getY() || toZ != this.player.getZ(); // Paper - needed here as the difference in Y can be reset - also note: this is only a guess at whether collisions took place, floating point errors can make this true when it shouldn't be...
9595
// Paper start - prevent position desync
9696
if (this.awaitingPositionFromClient != null) {
9797
return; // ... thanks Mojang for letting move calls teleport across dimensions.
98-
@@ -1581,7 +1615,17 @@ public class ServerGamePacketListenerImpl
98+
@@ -1574,7 +1608,17 @@ public class ServerGamePacketListenerImpl
9999
}
100100

101101
// Paper start - Add fail move event
@@ -114,7 +114,7 @@ index 1c5750c258bfb4b551048670a5e73a19a813ec47..ad4d20dda67ffb37e15a1623104a6e23
114114
if (!allowMovement) {
115115
io.papermc.paper.event.player.PlayerFailMoveEvent event = fireFailMove(io.papermc.paper.event.player.PlayerFailMoveEvent.FailReason.CLIPPED_INTO_BLOCK,
116116
toX, toY, toZ, toYaw, toPitch, false);
117-
@@ -1716,7 +1760,7 @@ public class ServerGamePacketListenerImpl
117+
@@ -1709,7 +1753,7 @@ public class ServerGamePacketListenerImpl
118118

119119
private boolean updateAwaitingTeleport() {
120120
if (this.awaitingPositionFromClient != null) {
@@ -123,7 +123,7 @@ index 1c5750c258bfb4b551048670a5e73a19a813ec47..ad4d20dda67ffb37e15a1623104a6e23
123123
this.awaitingTeleportTime = this.tickCount;
124124
this.teleport(
125125
this.awaitingPositionFromClient.x,
126-
@@ -1735,6 +1779,34 @@ public class ServerGamePacketListenerImpl
126+
@@ -1728,6 +1772,34 @@ public class ServerGamePacketListenerImpl
127127
}
128128
}
129129

paper-server/patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -374,27 +374,14 @@
374374
return;
375375
}
376376

377-
@@ -536,12 +_,20 @@
377+
@@ -536,6 +_,7 @@
378378
this.lastGoodZ = this.awaitingPositionFromClient.z;
379379
this.player.hasChangedDimension();
380380
this.awaitingPositionFromClient = null;
381381
+ this.player.level().getChunkSource().move(this.player); // CraftBukkit
382382
}
383383
}
384384

385-
@Override
386-
public void handleAcceptPlayerLoad(ServerboundPlayerLoadedPacket packet) {
387-
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level());
388-
+ // Paper start - PlayerLoadedWorldEvent
389-
+ if (this.hasClientLoaded()) {
390-
+ return;
391-
+ }
392-
+ final io.papermc.paper.event.player.PlayerClientLoadedWorldEvent event = new io.papermc.paper.event.player.PlayerClientLoadedWorldEvent(this.player.getBukkitEntity(), false);
393-
+ event.callEvent();
394-
+ // Paper end - PlayerLoadedWorldEvent
395-
this.markClientLoaded();
396-
}
397-
398385
@@ -563,6 +_,7 @@
399386
@Override
400387
public void handleRecipeBookChangeSettingsPacket(ServerboundRecipeBookChangeSettingsPacket packet) {
@@ -2581,29 +2568,27 @@
25812568
if (!this.receivedMovementThisTick) {
25822569
this.player.setKnownMovement(Vec3.ZERO);
25832570
}
2584-
@@ -2130,13 +_,21 @@
2585-
}
2586-
2587-
public boolean hasClientLoaded() {
2588-
- return !this.waitingForRespawn && this.clientLoadedTimeoutTimer <= 0;
2589-
+ return !this.waitingForRespawn; // Paper - Add PlayerLoadedWorldEvent
2571+
@@ -2134,12 +_,18 @@
25902572
}
25912573

25922574
public void tickClientLoadTimeout() {
2593-
if (this.clientLoadedTimeoutTimer > 0) {
2575+
- if (this.clientLoadedTimeoutTimer > 0) {
2576+
+ if (this.clientLoadedTimeoutTimer > 1) { // Paper - Add PlayerLoadedWorldEvent - only reduce till 1, let the below else-if call #markClientLoaded to trigger event and reduce to 0
25942577
this.clientLoadedTimeoutTimer--;
2595-
}
2578+
- }
2579+
+ } else if (this.clientLoadedTimeoutTimer == 1) markClientLoaded(); // Paper - Add PlayerLoadedWorldEvent - decrement by calling #markClientLoaded which will set the value to 0 *and* call the event.
2580+
}
2581+
2582+
private void markClientLoaded() {
25962583
+ // Paper start - Add PlayerLoadedWorldEvent
2597-
+ if (this.clientLoadedTimeoutTimer <= 0) {
2598-
+ this.waitingForRespawn = false;
2599-
+
2584+
+ if (!hasClientLoaded()) {
26002585
+ final io.papermc.paper.event.player.PlayerClientLoadedWorldEvent event = new io.papermc.paper.event.player.PlayerClientLoadedWorldEvent(this.player.getBukkitEntity(), true);
26012586
+ event.callEvent();
26022587
+ }
26032588
+ // Paper end - Add PlayerLoadedWorldEvent
2589+
this.clientLoadedTimeoutTimer = 0;
26042590
}
26052591

2606-
private void markClientLoaded() {
26072592
@@ -2156,4 +_,80 @@
26082593
interface EntityInteraction {
26092594
InteractionResult run(ServerPlayer player, Entity entity, InteractionHand hand);

0 commit comments

Comments
 (0)