mirror of
https://github.com/PaperMC/Paper.git
synced 2024-09-12 06:58:11 +02:00
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 30885166 Update to Minecraft 1.16.4 CraftBukkit Changes: 3af81c71 Update to Minecraft 1.16.4 Spigot Changes: f011ca24 Update to Minecraft 1.16.4 Co-authored-by: Mariell Hoversholm <proximyst@proximyst.com>
65 lines
4.4 KiB
Diff
65 lines
4.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Gabriele C <sgdc3.mail@gmail.com>
|
|
Date: Mon, 22 Oct 2018 17:34:10 +0200
|
|
Subject: [PATCH] Add option to prevent players from moving into unloaded
|
|
chunks #1551
|
|
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
index 098c99793c68ac916b52776f9a1cc2c6510c0057..15e1f9f65280043853544d3bf796f991df2482de 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
@@ -389,4 +389,9 @@ public class PaperWorldConfig {
|
|
waterOverLavaFlowSpeed = getInt("water-over-lava-flow-speed", 5);
|
|
log("Water over lava flow speed: " + waterOverLavaFlowSpeed);
|
|
}
|
|
+
|
|
+ public boolean preventMovingIntoUnloadedChunks = false;
|
|
+ private void preventMovingIntoUnloadedChunks() {
|
|
+ preventMovingIntoUnloadedChunks = getBoolean("prevent-moving-into-unloaded-chunks", false);
|
|
+ }
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
index bb46e757b560d1bfec5c84d59971b51d9aa90bd8..b4270cab83e676ea9cd6975286f96e350a493962 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
@@ -394,6 +394,13 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
|
}
|
|
speed *= 2f; // TODO: Get the speed of the vehicle instead of the player
|
|
|
|
+ // Paper start - Prevent moving into unloaded chunks
|
|
+ if (player.world.paperConfig.preventMovingIntoUnloadedChunks && worldserver.getChunkIfLoadedImmediately((int) Math.floor(packetplayinvehiclemove.getX()) >> 4, (int) Math.floor(packetplayinvehiclemove.getZ()) >> 4) == null) {
|
|
+ this.networkManager.sendPacket(new PacketPlayOutVehicleMove(entity));
|
|
+ return;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
if (d10 - d9 > Math.max(100.0D, Math.pow((double) (org.spigotmc.SpigotConfig.movedTooQuicklyMultiplier * (float) i * speed), 2)) && !this.isExemptPlayer()) {
|
|
// CraftBukkit end
|
|
PlayerConnection.LOGGER.warn("{} (vehicle of {}) moved too quickly! {},{},{}", entity.getDisplayName().getString(), this.player.getDisplayName().getString(), d6, d7, d8);
|
|
@@ -990,9 +997,9 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
|
double d1 = this.player.locY();
|
|
double d2 = this.player.locZ();
|
|
double d3 = this.player.locY();
|
|
- double d4 = packetplayinflying.a(this.player.locX());
|
|
+ double d4 = packetplayinflying.a(this.player.locX());double toX = d4; // Paper - OBFHELPER
|
|
double d5 = packetplayinflying.b(this.player.locY());
|
|
- double d6 = packetplayinflying.c(this.player.locZ());
|
|
+ double d6 = packetplayinflying.c(this.player.locZ());double toZ = d6; // Paper - OBFHELPER
|
|
float f = packetplayinflying.a(this.player.yaw);
|
|
float f1 = packetplayinflying.b(this.player.pitch);
|
|
double d7 = d4 - this.l;
|
|
@@ -1031,6 +1038,12 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
|
} else {
|
|
speed = player.abilities.walkSpeed * 10f;
|
|
}
|
|
+ // Paper start - Prevent moving into unloaded chunks
|
|
+ if (player.world.paperConfig.preventMovingIntoUnloadedChunks && (this.player.locX() != toX || this.player.locZ() != toZ) && !worldserver.isChunkLoaded((int) Math.floor(toX) >> 4, (int) Math.floor(toZ) >> 4)) {
|
|
+ this.internalTeleport(this.player.locX(), this.player.locY(), this.player.locZ(), this.player.yaw, this.player.pitch, Collections.emptySet());
|
|
+ return;
|
|
+ }
|
|
+ // Paper end
|
|
|
|
if (!this.player.H() && (!this.player.getWorldServer().getGameRules().getBoolean(GameRules.DISABLE_ELYTRA_MOVEMENT_CHECK) || !this.player.isGliding())) {
|
|
float f2 = this.player.isGliding() ? 300.0F : 100.0F;
|