mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-04 22:22:18 -07:00
Use correct toX/Y/Z in player move packet handling
This commit is contained in:
@@ -23,12 +23,28 @@ diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListener
|
|||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
|
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
||||||
|
double d0 = entity.getX();
|
||||||
|
double d1 = entity.getY();
|
||||||
|
double d2 = entity.getZ();
|
||||||
|
- double d3 = ServerGamePacketListenerImpl.clampHorizontal(packet.getX());
|
||||||
|
- double d4 = ServerGamePacketListenerImpl.clampVertical(packet.getY());
|
||||||
|
- double d5 = ServerGamePacketListenerImpl.clampHorizontal(packet.getZ());
|
||||||
|
+ double d3 = ServerGamePacketListenerImpl.clampHorizontal(packet.getX()); final double toX = d3; // Paper - OBFHELPER
|
||||||
|
+ double d4 = ServerGamePacketListenerImpl.clampVertical(packet.getY()); final double toY = d4; // Paper - OBFHELPER
|
||||||
|
+ double d5 = ServerGamePacketListenerImpl.clampHorizontal(packet.getZ()); final double toZ = d5; // Paper - OBFHELPER
|
||||||
|
float f = Mth.wrapDegrees(packet.getYRot());
|
||||||
|
float f1 = Mth.wrapDegrees(packet.getXRot());
|
||||||
|
double d6 = d3 - this.vehicleFirstGoodX;
|
||||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
||||||
}
|
}
|
||||||
speed *= 2f; // TODO: Get the speed of the vehicle instead of the player
|
speed *= 2f; // TODO: Get the speed of the vehicle instead of the player
|
||||||
|
|
||||||
+ // Paper start - Prevent moving into unloaded chunks
|
+ // Paper start - Prevent moving into unloaded chunks
|
||||||
+ if (player.level.paperConfig.preventMovingIntoUnloadedChunks && worldserver.getChunkIfLoadedImmediately((int) Math.floor(packet.getX()) >> 4, (int) Math.floor(packet.getZ()) >> 4) == null) {
|
+ if (player.level.paperConfig.preventMovingIntoUnloadedChunks && (
|
||||||
|
+ !worldserver.areChunksLoadedForMove(this.player.getBoundingBox().expandTowards(new Vec3(toX, toY, toZ).subtract(this.player.position()))) ||
|
||||||
|
+ !worldserver.areChunksLoadedForMove(entity.getBoundingBox().expandTowards(new Vec3(toX, toY, toZ).subtract(entity.position())))
|
||||||
|
+ )) {
|
||||||
+ this.connection.send(new ClientboundMoveVehiclePacket(entity));
|
+ this.connection.send(new ClientboundMoveVehiclePacket(entity));
|
||||||
+ return;
|
+ return;
|
||||||
+ }
|
+ }
|
||||||
@@ -38,23 +54,24 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
ServerGamePacketListenerImpl.LOGGER.warn("{} (vehicle of {}) moved too quickly! {},{},{}", new Object[]{entity.getName().getString(), this.player.getName().getString(), d6, d7, d8});
|
ServerGamePacketListenerImpl.LOGGER.warn("{} (vehicle of {}) moved too quickly! {},{},{}", new Object[]{entity.getName().getString(), this.player.getName().getString(), d6, d7, d8});
|
||||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
||||||
float prevYaw = this.player.getYRot();
|
this.allowedPlayerTicks = 20; // CraftBukkit
|
||||||
float prevPitch = this.player.getXRot();
|
} else {
|
||||||
// CraftBukkit end
|
this.awaitingTeleportTime = this.tickCount;
|
||||||
- double d3 = this.player.getX();
|
- double d0 = ServerGamePacketListenerImpl.clampHorizontal(packet.getX(this.player.getX()));
|
||||||
+ double d3 = this.player.getX(); final double toX = d3; // Paper - OBFHELPER
|
- double d1 = ServerGamePacketListenerImpl.clampVertical(packet.getY(this.player.getY()));
|
||||||
double d4 = this.player.getY();
|
- double d2 = ServerGamePacketListenerImpl.clampHorizontal(packet.getZ(this.player.getZ()));
|
||||||
- double d5 = this.player.getZ();
|
+ double d0 = ServerGamePacketListenerImpl.clampHorizontal(packet.getX(this.player.getX())); final double toX = d0; // Paper - OBFHELPER
|
||||||
+ double d5 = this.player.getZ(); final double toZ = d5; // Paper - OBFHELPER
|
+ double d1 = ServerGamePacketListenerImpl.clampVertical(packet.getY(this.player.getY())); final double toY = d1;
|
||||||
double d6 = this.player.getY();
|
+ double d2 = ServerGamePacketListenerImpl.clampHorizontal(packet.getZ(this.player.getZ())); final double toZ = d2; // Paper - OBFHELPER
|
||||||
double d7 = d0 - this.firstGoodX;
|
float f = Mth.wrapDegrees(packet.getYRot(this.player.getYRot()));
|
||||||
double d8 = d1 - this.firstGoodY;
|
float f1 = Mth.wrapDegrees(packet.getXRot(this.player.getXRot()));
|
||||||
|
|
||||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
||||||
} else {
|
} else {
|
||||||
speed = this.player.getAbilities().walkingSpeed * 10f;
|
speed = this.player.getAbilities().walkingSpeed * 10f;
|
||||||
}
|
}
|
||||||
+ // Paper start - Prevent moving into unloaded chunks
|
+ // Paper start - Prevent moving into unloaded chunks
|
||||||
+ if (player.level.paperConfig.preventMovingIntoUnloadedChunks && (this.player.getX() != toX || this.player.getZ() != toZ) && !worldserver.hasChunk((int) Math.floor(toX) >> 4, (int) Math.floor(toZ) >> 4)) {
|
+ if (player.level.paperConfig.preventMovingIntoUnloadedChunks && (this.player.getX() != toX || this.player.getZ() != toZ) && !worldserver.areChunksLoadedForMove(this.player.getBoundingBox().expandTowards(new Vec3(toX, toY, toZ).subtract(this.player.position())))) {
|
||||||
+ this.internalTeleport(this.player.getX(), this.player.getY(), this.player.getZ(), this.player.getYRot(), this.player.getXRot(), Collections.emptySet(), true);
|
+ this.internalTeleport(this.player.getX(), this.player.getY(), this.player.getZ(), this.player.getYRot(), this.player.getXRot(), Collections.emptySet(), true);
|
||||||
+ return;
|
+ return;
|
||||||
+ }
|
+ }
|
||||||
|
@@ -0,0 +1,25 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
||||||
|
Date: Mon, 14 Mar 2022 12:35:37 -0700
|
||||||
|
Subject: [PATCH] Don't allow vehicle movement from players while teleporting
|
||||||
|
|
||||||
|
Bring the vehicle move packet behavior in line with the
|
||||||
|
regular player move packet.
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
|
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
||||||
|
} else {
|
||||||
|
Entity entity = this.player.getRootVehicle();
|
||||||
|
|
||||||
|
+ // Paper start
|
||||||
|
+ if (this.awaitingPositionFromClient != null) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ // Paper end
|
||||||
|
+
|
||||||
|
if (entity != this.player && entity.getControllingPassenger() == this.player && entity == this.lastVehicle) {
|
||||||
|
ServerLevel worldserver = this.player.getLevel();
|
||||||
|
double d0 = entity.getX();final double fromX = d0; // Paper - OBFHELPER
|
@@ -16,18 +16,13 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
- double d0 = entity.getX();
|
- double d0 = entity.getX();
|
||||||
- double d1 = entity.getY();
|
- double d1 = entity.getY();
|
||||||
- double d2 = entity.getZ();
|
- double d2 = entity.getZ();
|
||||||
- double d3 = ServerGamePacketListenerImpl.clampHorizontal(packet.getX());
|
|
||||||
- double d4 = ServerGamePacketListenerImpl.clampVertical(packet.getY());
|
|
||||||
- double d5 = ServerGamePacketListenerImpl.clampHorizontal(packet.getZ());
|
|
||||||
+ double d0 = entity.getX();final double fromX = d0; // Paper - OBFHELPER
|
+ double d0 = entity.getX();final double fromX = d0; // Paper - OBFHELPER
|
||||||
+ double d1 = entity.getY();final double fromY = d1; // Paper - OBFHELPER
|
+ double d1 = entity.getY();final double fromY = d1; // Paper - OBFHELPER
|
||||||
+ double d2 = entity.getZ();final double fromZ = d2; // Paper - OBFHELPER
|
+ double d2 = entity.getZ();final double fromZ = d2; // Paper - OBFHELPER
|
||||||
+ double d3 = ServerGamePacketListenerImpl.clampHorizontal(packet.getX());final double toX = d3; // Paper - OBFHELPER
|
double d3 = ServerGamePacketListenerImpl.clampHorizontal(packet.getX()); final double toX = d3; // Paper - OBFHELPER
|
||||||
+ double d4 = ServerGamePacketListenerImpl.clampVertical(packet.getY());final double toY = d4; // Paper - OBFHELPER
|
double d4 = ServerGamePacketListenerImpl.clampVertical(packet.getY()); final double toY = d4; // Paper - OBFHELPER
|
||||||
+ double d5 = ServerGamePacketListenerImpl.clampHorizontal(packet.getZ());final double toZ = d5; // Paper - OBFHELPER
|
double d5 = ServerGamePacketListenerImpl.clampHorizontal(packet.getZ()); final double toZ = d5; // Paper - OBFHELPER
|
||||||
float f = Mth.wrapDegrees(packet.getYRot());
|
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
||||||
float f1 = Mth.wrapDegrees(packet.getXRot());
|
|
||||||
double d6 = d3 - this.vehicleFirstGoodX;
|
|
||||||
double d7 = d4 - this.vehicleFirstGoodY;
|
double d7 = d4 - this.vehicleFirstGoodY;
|
||||||
double d8 = d5 - this.vehicleFirstGoodZ;
|
double d8 = d5 - this.vehicleFirstGoodZ;
|
||||||
double d9 = entity.getDeltaMovement().lengthSqr();
|
double d9 = entity.getDeltaMovement().lengthSqr();
|
||||||
@@ -63,14 +58,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
|
|
||||||
entity.move(MoverType.PLAYER, new Vec3(d6, d7, d8));
|
entity.move(MoverType.PLAYER, new Vec3(d6, d7, d8));
|
||||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
||||||
float prevPitch = this.player.getXRot();
|
|
||||||
// CraftBukkit end
|
|
||||||
double d3 = this.player.getX(); final double toX = d3; // Paper - OBFHELPER
|
|
||||||
- double d4 = this.player.getY();
|
|
||||||
+ double d4 = this.player.getY(); final double toY = d4; // Paper - OBFHELPER
|
|
||||||
double d5 = this.player.getZ(); final double toZ = d5; // Paper - OBFHELPER
|
|
||||||
double d6 = this.player.getY();
|
|
||||||
double d7 = d0 - this.firstGoodX;
|
|
||||||
double d8 = d1 - this.firstGoodY;
|
double d8 = d1 - this.firstGoodY;
|
||||||
double d9 = d2 - this.firstGoodZ;
|
double d9 = d2 - this.firstGoodZ;
|
||||||
double d10 = this.player.getDeltaMovement().lengthSqr();
|
double d10 = this.player.getDeltaMovement().lengthSqr();
|
||||||
|
@@ -20,19 +20,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
||||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
||||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
|
||||||
speed = this.player.getAbilities().walkingSpeed * 10f;
|
|
||||||
}
|
|
||||||
// Paper start - Prevent moving into unloaded chunks
|
|
||||||
- if (player.level.paperConfig.preventMovingIntoUnloadedChunks && (this.player.getX() != toX || this.player.getZ() != toZ) && !worldserver.hasChunk((int) Math.floor(toX) >> 4, (int) Math.floor(toZ) >> 4)) {
|
|
||||||
+ if (player.level.paperConfig.preventMovingIntoUnloadedChunks && (this.player.getX() != toX || this.player.getZ() != toZ) && worldserver.getChunkIfLoadedImmediately((int) Math.floor(toX) >> 4, (int) Math.floor(toZ) >> 4) == null) { // Paper - use getIfLoadedImmediately
|
|
||||||
this.internalTeleport(this.player.getX(), this.player.getY(), this.player.getZ(), this.player.getYRot(), this.player.getXRot(), Collections.emptySet(), true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
|
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/world/level/Level.java
|
--- a/src/main/java/net/minecraft/world/level/Level.java
|
||||||
|
Reference in New Issue
Block a user