From 56cc95b9eea8c7b45ab577e896872968b34f5f15 Mon Sep 17 00:00:00 2001 From: Taiyou06 Date: Thu, 8 May 2025 10:46:59 +0200 Subject: [PATCH] Reduce ChunkSource Updates --- .../0166-Save-world-async-properly.patch | 1 - .../0167-reduce-PlayerChunk-Updates.patch | 32 +++++++++++++++++++ .../modules/opt/ReduceChunkSourceUpdates.java | 23 +++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 leaf-server/minecraft-patches/features/0167-reduce-PlayerChunk-Updates.patch create mode 100644 leaf-server/src/main/java/org/dreeam/leaf/config/modules/opt/ReduceChunkSourceUpdates.java diff --git a/leaf-server/minecraft-patches/features/0166-Save-world-async-properly.patch b/leaf-server/minecraft-patches/features/0166-Save-world-async-properly.patch index e76e1021..198d4cdd 100644 --- a/leaf-server/minecraft-patches/features/0166-Save-world-async-properly.patch +++ b/leaf-server/minecraft-patches/features/0166-Save-world-async-properly.patch @@ -5,7 +5,6 @@ Subject: [PATCH] Save world async properly P.S from Tai: I've been using this fix for weeks in my own server but didn't had balls to push it as thought it may cause issues but, it's merged in paper 1.21.5 now. - diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java index ba1dd51e7187a80e8438e46383257c22f5382130..6cb0c14cb7aa243bbee6ca9ba57da4cc6eafdfd8 100644 --- a/net/minecraft/server/level/ServerLevel.java diff --git a/leaf-server/minecraft-patches/features/0167-reduce-PlayerChunk-Updates.patch b/leaf-server/minecraft-patches/features/0167-reduce-PlayerChunk-Updates.patch new file mode 100644 index 00000000..60b0456b --- /dev/null +++ b/leaf-server/minecraft-patches/features/0167-reduce-PlayerChunk-Updates.patch @@ -0,0 +1,32 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Taiyou06 +Date: Thu, 8 May 2025 10:08:54 +0200 +Subject: [PATCH] reduce PlayerChunk Updates + + +diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java +index abe79d07196de0a10a382d4c37161c7eb4a604ae..405b8da8b886b5caac7ed774472e106374c42185 100644 +--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java ++++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java +@@ -1367,6 +1367,10 @@ public class ServerGamePacketListenerImpl + this.resetPosition(); + } + ++ // Leaf start - ReduceChunkSourceUpdates ++ final net.minecraft.world.level.ChunkPos playerStartChunkPosition = this.player.chunkPosition(); ++ // Leaf end - ReduceChunkSourceUpdates ++ + if (!this.updateAwaitingTeleport() && this.player.hasClientLoaded()) { + double d = clampHorizontal(packet.getX(this.player.getX())); final double toX = d; // Paper - OBFHELPER + double d1 = clampVertical(packet.getY(this.player.getY())); final double toY = d1; // Paper - OBFHELPER +@@ -1638,7 +1642,9 @@ public class ServerGamePacketListenerImpl + && !isFallFlying + && !isAutoSpinAttack + && this.noBlocksAround(this.player); +- this.player.serverLevel().getChunkSource().move(this.player); ++ if (!org.dreeam.leaf.config.modules.opt.ReduceChunkSourceUpdates.enabled || this.player.serverLevel() != serverLevel || this.player.chunkPosition() == playerStartChunkPosition) { ++ this.player.serverLevel().getChunkSource().move(this.player); ++ } + 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()); diff --git a/leaf-server/src/main/java/org/dreeam/leaf/config/modules/opt/ReduceChunkSourceUpdates.java b/leaf-server/src/main/java/org/dreeam/leaf/config/modules/opt/ReduceChunkSourceUpdates.java new file mode 100644 index 00000000..e89a0ad2 --- /dev/null +++ b/leaf-server/src/main/java/org/dreeam/leaf/config/modules/opt/ReduceChunkSourceUpdates.java @@ -0,0 +1,23 @@ +package org.dreeam.leaf.config.modules.opt; + +import org.dreeam.leaf.config.ConfigModules; +import org.dreeam.leaf.config.EnumConfigCategory; + +public class ReduceChunkSourceUpdates extends ConfigModules { + + public String getBasePath() { + return EnumConfigCategory.PERF.getBaseKeyName() + ".reduce-chunk-source-updates"; + } + + public static boolean enabled = false; + + @Override + public void onLoaded() { + enabled = config.getBoolean(getBasePath() + ".enabled", enabled, + config.pickStringRegionBased( + "Reduces chunk source updates on inter-chunk player moves. (Recommended to enable)", + "减少玩家跨区块移动时的区块源更新。" + ) + ); + } +}