forked from hpfxd/PandaSpigot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path0012-Consolidate-flush-calls-for-entity-tracker-packets.patch
38 lines (36 loc) · 2.15 KB
/
0012-Consolidate-flush-calls-for-entity-tracker-packets.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: hpfxd <[email protected]>
Date: Fri, 29 Oct 2021 08:08:48 -0400
Subject: [PATCH] Consolidate flush calls for entity tracker packets
Most server packets seem to be sent from here, so try to avoid expensive flush calls from them.
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index eae936650fddd5ef418ee2ddd680d36e82045365..06e023994050a07d2efed174b1fbd8f1eddcd231 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -963,7 +963,26 @@ public abstract class MinecraftServer extends com.hpfxd.pandaspigot.tickloop.Ree
this.methodProfiler.b();
this.methodProfiler.a("tracker");
worldserver.timings.tracker.startTiming(); // Spigot
+ // PandaSpigot start - controlled flush for entity tracker packets
+ List<NetworkManager> disabledFlushes = new ArrayList<>(worldserver.players.size());
+ for (EntityHuman player : worldserver.players) {
+ if (!(player instanceof EntityPlayer)) continue; // skip non-player entities
+ PlayerConnection connection = ((EntityPlayer) player).playerConnection;
+ if (connection != null) {
+ connection.networkManager.disableAutomaticFlush();
+ disabledFlushes.add(connection.networkManager);
+ }
+ }
+ try {
+ // PandaSpigot end
worldserver.getTracker().updatePlayers();
+ // PandaSpigot start - controlled flush for entity tracker packets
+ } finally {
+ for (NetworkManager networkManager : disabledFlushes) {
+ networkManager.enableAutomaticFlush();
+ }
+ }
+ // PandaSpigot end
worldserver.timings.tracker.stopTiming(); // Spigot
this.methodProfiler.b();
this.methodProfiler.b();