Fix distanceSq check on block breaking (#6195)

This commit is contained in:
Jake Potrebic 2021-07-15 20:01:48 -07:00
parent 6602dc655e
commit 186cf8842e
2 changed files with 6 additions and 2 deletions

View file

@ -210,7 +210,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
} }
} }
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser @@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
double blockDistanceSquared = this.player.distanceToSqr(blockposition.getX() + 0.5D, blockposition.getY() + 0.5D + 1.5D, blockposition.getZ() + 0.5D); // Copied from ServerPlayerGameMode#handleBlockBreakAction double blockDistanceSquared = d0 * d0 + d1 * d1 + d2 * d2;
if (blockDistanceSquared > 40 * 40) { if (blockDistanceSquared > 40 * 40) {
LOGGER.warn("{} tried to break a block {} square blocks away from their position", this.player.getScoreboardName(), blockDistanceSquared); LOGGER.warn("{} tried to break a block {} square blocks away from their position", this.player.getScoreboardName(), blockDistanceSquared);
- this.disconnect("Invalid block break distance"); - this.disconnect("Invalid block break distance");

View file

@ -72,7 +72,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
case STOP_DESTROY_BLOCK: case STOP_DESTROY_BLOCK:
- this.player.gameMode.handleBlockBreakAction(blockposition, packetplayinblockdig_enumplayerdigtype, packet.getDirection(), this.player.level.getMaxBuildHeight()); - this.player.gameMode.handleBlockBreakAction(blockposition, packetplayinblockdig_enumplayerdigtype, packet.getDirection(), this.player.level.getMaxBuildHeight());
+ // Paper start - Don't allow digging in unloaded chunks + // Paper start - Don't allow digging in unloaded chunks
+ double blockDistanceSquared = this.player.distanceToSqr(blockposition.getX() + 0.5D, blockposition.getY() + 0.5D + 1.5D, blockposition.getZ() + 0.5D); // Copied from ServerPlayerGameMode#handleBlockBreakAction + // Copied from ServerPlayerGameMode#handleBlockBreakAction
+ double d0 = this.player.getX() - ((double) blockposition.getX() + 0.5D);
+ double d1 = this.player.getY() - ((double) blockposition.getY() + 0.5D) + 1.5D;
+ double d2 = this.player.getZ() - ((double) blockposition.getZ() + 0.5D);
+ double blockDistanceSquared = d0 * d0 + d1 * d1 + d2 * d2;
+ if (blockDistanceSquared > 40 * 40) { + if (blockDistanceSquared > 40 * 40) {
+ LOGGER.warn("{} tried to break a block {} square blocks away from their position", this.player.getScoreboardName(), blockDistanceSquared); + LOGGER.warn("{} tried to break a block {} square blocks away from their position", this.player.getScoreboardName(), blockDistanceSquared);
+ this.disconnect("Invalid block break distance"); + this.disconnect("Invalid block break distance");