aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0288-Optimize-World-Time-Updates.patch
diff options
context:
space:
mode:
authorJake Potrebic <[email protected]>2021-06-15 21:53:50 -0700
committerJake Potrebic <[email protected]>2021-06-15 21:53:50 -0700
commit6f064f928efdba35b3ad3d3263d063f0cbb1022f (patch)
tree40f6c57b2a7ff93fc99e5cdcf80cb0b809c26bc1 /patches/server/0288-Optimize-World-Time-Updates.patch
parentea0ec8c5a01dc3b65a803182abd3ec0bc506e91b (diff)
downloadPaper-6f064f928efdba35b3ad3d3263d063f0cbb1022f.tar.gz
Paper-6f064f928efdba35b3ad3d3263d063f0cbb1022f.zip
add more patches back
Diffstat (limited to 'patches/server/0288-Optimize-World-Time-Updates.patch')
-rw-r--r--patches/server/0288-Optimize-World-Time-Updates.patch42
1 files changed, 42 insertions, 0 deletions
diff --git a/patches/server/0288-Optimize-World-Time-Updates.patch b/patches/server/0288-Optimize-World-Time-Updates.patch
new file mode 100644
index 0000000000..13cfcd9d97
--- /dev/null
+++ b/patches/server/0288-Optimize-World-Time-Updates.patch
@@ -0,0 +1,42 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+Date: Fri, 2 Nov 2018 23:11:51 -0400
+Subject: [PATCH] Optimize World Time Updates
+
+Splits time updates into incremental updates as well as does
+the updates per world, so that we can re-use the same packet
+object for every player unless they have per-player time enabled.
+
+diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
+index a302d232da3fbaa2cb3e1903cfd096d404847c54..a1c65ea148692e50dbc466d87dae5198e0b6a51f 100644
+--- a/src/main/java/net/minecraft/server/MinecraftServer.java
++++ b/src/main/java/net/minecraft/server/MinecraftServer.java
+@@ -1387,12 +1387,24 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
+
+ MinecraftTimings.timeUpdateTimer.startTiming(); // Spigot // Paper
+ // Send time updates to everyone, it will get the right time from the world the player is in.
+- if (this.tickCount % 20 == 0) {
+- for (int i = 0; i < this.getPlayerList().players.size(); ++i) {
+- ServerPlayer entityplayer = (ServerPlayer) this.getPlayerList().players.get(i);
+- entityplayer.connection.send(new ClientboundSetTimePacket(entityplayer.level.getGameTime(), entityplayer.getPlayerTime(), entityplayer.level.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT))); // Add support for per player time
++ // Paper start - optimize time updates
++ for (final ServerLevel world : this.getAllLevels()) {
++ final boolean doDaylight = world.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT);
++ final long dayTime = world.getDayTime();
++ long worldTime = world.getGameTime();
++ final ClientboundSetTimePacket worldPacket = new ClientboundSetTimePacket(worldTime, dayTime, doDaylight);
++ for (Player entityhuman : world.players()) {
++ if (!(entityhuman instanceof ServerPlayer) || (tickCount + entityhuman.getId()) % 20 != 0) {
++ continue;
++ }
++ ServerPlayer entityplayer = (ServerPlayer) entityhuman;
++ long playerTime = entityplayer.getPlayerTime();
++ ClientboundSetTimePacket packet = (playerTime == dayTime) ? worldPacket :
++ new ClientboundSetTimePacket(worldTime, playerTime, doDaylight);
++ entityplayer.connection.send(packet); // Add support for per player time
+ }
+ }
++ // Paper end
+ MinecraftTimings.timeUpdateTimer.stopTiming(); // Spigot // Paper
+
+ while (iterator.hasNext()) {