mirror of
https://github.com/PaperMC/Paper.git
synced 2025-04-10 21:19:40 +00:00
35 lines
2.6 KiB
Diff
35 lines
2.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
Date: Sun, 2 Feb 2025 10:57:48 -0800
|
|
Subject: [PATCH] Do not record movement for vehicles/players unaffected by
|
|
blocks
|
|
|
|
If the player is not affected by movement through blocks, then
|
|
storing the movement would eventually invoke logic to apply effects
|
|
caused by moving through such blocks. For example, moving through
|
|
a portal in spectator mode and then later switching to creative mode
|
|
would portal the player.
|
|
|
|
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
index 90e582ca30851857add5e2d830e9876667fd1807..c569cdfa4cba4f65892ffd4045c611837049f440 100644
|
|
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
@@ -659,7 +659,7 @@ public class ServerGamePacketListenerImpl
|
|
// CraftBukkit end
|
|
|
|
this.player.serverLevel().getChunkSource().move(this.player);
|
|
- rootVehicle.recordMovementThroughBlocks(new Vec3(x, y, z), rootVehicle.position());
|
|
+ if (!rootVehicle.isSpectator() && rootVehicle.isAffectedByBlocks()) rootVehicle.recordMovementThroughBlocks(new Vec3(x, y, z), rootVehicle.position()); // Paper - Do not record movement for vehicles/players unaffected by blocks
|
|
Vec3 vec3 = new Vec3(rootVehicle.getX() - x, rootVehicle.getY() - y, rootVehicle.getZ() - z);
|
|
this.handlePlayerKnownMovement(vec3);
|
|
rootVehicle.setOnGroundWithMovement(packet.onGround(), vec3);
|
|
@@ -1577,7 +1577,7 @@ public class ServerGamePacketListenerImpl
|
|
Vec3 vec3 = new Vec3(this.player.getX() - x, this.player.getY() - y, this.player.getZ() - z);
|
|
this.player.setOnGroundWithMovement(packet.isOnGround(), packet.horizontalCollision(), vec3);
|
|
this.player.doCheckFallDamage(vec3.x, vec3.y, vec3.z, packet.isOnGround());
|
|
- this.player.recordMovementThroughBlocks(new Vec3(x, y, z), this.player.position());
|
|
+ if (!this.player.isSpectator() && this.player.isAffectedByBlocks()) this.player.recordMovementThroughBlocks(new Vec3(x, y, z), this.player.position()); // Paper - Do not record movement for vehicles/players unaffected by blocks
|
|
this.handlePlayerKnownMovement(vec3);
|
|
if (flag) {
|
|
this.player.resetFallDistance();
|