mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-18 12:48:53 +01:00
da9d110d5b
This patch does not appear to be doing anything useful, and may hide errors. Currently, the save logic does not run through this path either so it did not do anything. Additionally, properly implement support for handling RegionFileSizeException in Moonrise.
40 lines
2.5 KiB
Diff
40 lines
2.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
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 b54c1ecf3384fba741fa6334caee498b83887508..13aa191235ac6bb1d00d89ae29c750595cc6be78 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -1603,10 +1603,22 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
|
}
|
|
|
|
// 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.serverLevel().getGameRules().getBoolean(GameRules.RULE_DAYLIGHT))); // Add support for per player time
|
|
+ // Paper start - Perf: Optimize time updates
|
|
+ for (final ServerLevel level : this.getAllLevels()) {
|
|
+ final boolean doDaylight = level.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT);
|
|
+ final long dayTime = level.getDayTime();
|
|
+ long worldTime = level.getGameTime();
|
|
+ final ClientboundSetTimePacket worldPacket = new ClientboundSetTimePacket(worldTime, dayTime, doDaylight);
|
|
+ for (Player entityhuman : level.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 - Perf: Optimize time updates
|
|
}
|
|
}
|
|
|