60 lines
3.2 KiB
Diff
60 lines
3.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Cryptite <cryptite@gmail.com>
|
|
Date: Thu, 15 Dec 2022 15:48:34 -0600
|
|
Subject: [PATCH] Player-specific target chunk send rate
|
|
|
|
|
|
diff --git a/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java b/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java
|
|
index e4461c176682644d842b15b833c662039333d24f..9dabd5bb2d9e6c2f9a6dc7103ca914478b17cd60 100644
|
|
--- a/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java
|
|
+++ b/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java
|
|
@@ -386,8 +386,8 @@ public final class PlayerChunkLoader {
|
|
return (int)Math.ceil(Math.min(config * MinecraftServer.getServer().getPlayerCount(), max <= 1.0 ? Double.MAX_VALUE : max));
|
|
}
|
|
|
|
- protected long getTargetSendPerPlayerAddend() {
|
|
- return GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate <= 1.0 ? 0L : (long)Math.round(1.0e9 / GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate);
|
|
+ protected long getTargetSendPerPlayerAddend(ServerPlayer player) { // Slice
|
|
+ return player.targetChunkSendRate <= 1.0 ? 0L : (long)Math.round(1.0e9 / player.targetChunkSendRate); // Slice
|
|
}
|
|
|
|
protected long getMaxSendAddend() {
|
|
@@ -541,7 +541,6 @@ public final class PlayerChunkLoader {
|
|
}
|
|
|
|
final int maxSends = this.getMaxConcurrentChunkSends();
|
|
- final long nextPlayerDeadline = this.getTargetSendPerPlayerAddend() + time;
|
|
for (;;) {
|
|
if (this.chunkSendQueue.isEmpty()) {
|
|
break;
|
|
@@ -574,7 +573,7 @@ public final class PlayerChunkLoader {
|
|
throw new IllegalStateException();
|
|
}
|
|
|
|
- data.nextChunkSendTarget = nextPlayerDeadline;
|
|
+ data.nextChunkSendTarget = this.getTargetSendPerPlayerAddend(data.player) + time; // Slice
|
|
this.chunkSendWaitQueue.add(data);
|
|
|
|
synchronized (this.sendingChunkCounts) {
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
|
index fc07b3340c8e90df20ab3989bb07a8c4bfc13579..5fc08093a818486642fbff9a3587bc5e7d051ea2 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
|
@@ -14,6 +14,8 @@ import java.util.Objects;
|
|
import java.util.Optional;
|
|
import java.util.OptionalInt;
|
|
import javax.annotation.Nullable;
|
|
+
|
|
+import io.papermc.paper.configuration.GlobalConfiguration;
|
|
import net.minecraft.BlockUtil;
|
|
import net.minecraft.ChatFormatting;
|
|
import net.minecraft.CrashReport;
|
|
@@ -269,6 +271,7 @@ public class ServerPlayer extends Player {
|
|
public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper
|
|
public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event
|
|
public boolean smoothWorldTeleport; // Slice
|
|
+ public double targetChunkSendRate = GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate; // Slice
|
|
|
|
public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) {
|
|
super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile);
|