From 7b6f1e22fe991c28457d0ec2f232df69386995b3 Mon Sep 17 00:00:00 2001 From: BillyGalbreath Date: Mon, 7 Dec 2020 12:56:28 -0600 Subject: [PATCH] Further optimise player list ticks --- ...d-out-and-optimise-player-list-ticks.patch | 99 +++++++++++++++++++ .../0161-Spread-out-player-list-ticks.patch | 50 ---------- 2 files changed, 99 insertions(+), 50 deletions(-) create mode 100644 patches/server/0161-Spread-out-and-optimise-player-list-ticks.patch delete mode 100644 patches/server/0161-Spread-out-player-list-ticks.patch diff --git a/patches/server/0161-Spread-out-and-optimise-player-list-ticks.patch b/patches/server/0161-Spread-out-and-optimise-player-list-ticks.patch new file mode 100644 index 000000000..876ec0ffb --- /dev/null +++ b/patches/server/0161-Spread-out-and-optimise-player-list-ticks.patch @@ -0,0 +1,99 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: James Lyne +Date: Mon, 7 Dec 2020 17:52:36 +0000 +Subject: [PATCH] Spread out and optimise player list ticks + + +diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java +index 3f634a266f..992276a393 100644 +--- a/src/main/java/net/minecraft/server/PlayerList.java ++++ b/src/main/java/net/minecraft/server/PlayerList.java +@@ -23,8 +23,6 @@ import org.apache.logging.log4j.LogManager; + import org.apache.logging.log4j.Logger; + + // CraftBukkit start +-import com.google.common.base.Predicate; +-import com.google.common.collect.Iterables; + + import org.bukkit.craftbukkit.CraftServer; + import org.bukkit.craftbukkit.CraftWorld; +@@ -34,13 +32,10 @@ import org.bukkit.Location; + import org.bukkit.craftbukkit.util.CraftChatMessage; + import org.bukkit.entity.Player; + import org.bukkit.event.player.PlayerChangedWorldEvent; +-import org.bukkit.event.player.PlayerPortalEvent; + import org.bukkit.event.player.PlayerJoinEvent; + import org.bukkit.event.player.PlayerLoginEvent; + import org.bukkit.event.player.PlayerQuitEvent; + import org.bukkit.event.player.PlayerRespawnEvent; +-import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +-import org.bukkit.util.Vector; + import org.spigotmc.event.player.PlayerSpawnLocationEvent; + // CraftBukkit end + +@@ -71,7 +66,7 @@ public abstract class PlayerList { + private int viewDistance; + private EnumGamemode u; + private boolean v; +- private int w; ++ private int w; private int getTick() { return this.w; } private int setTick(int i) { return this.w = i; } // Purpur - OBFHELPER + + // CraftBukkit start + private CraftServer cserver; +@@ -919,22 +914,23 @@ public abstract class PlayerList { + } + + public void tick() { +- if (++this.w > 600) { +- // CraftBukkit start +- for (int i = 0; i < this.players.size(); ++i) { +- final EntityPlayer target = (EntityPlayer) this.players.get(i); +- +- target.playerConnection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.UPDATE_LATENCY, Iterables.filter(this.players, new Predicate() { +- @Override +- public boolean apply(EntityPlayer input) { +- return target.getBukkitEntity().canSee(input.getBukkitEntity()); +- } +- }))); ++ // Purpur start ++ int tick = getTick(); ++ if (tick < this.players.size()) { ++ final org.bukkit.craftbukkit.entity.CraftPlayer target = this.players.get(tick).getBukkitEntity(); ++ final java.util.List list = new java.util.ArrayList<>(); ++ for (EntityPlayer entityplayer : this.players) { ++ if (target.canSee(entityplayer.getUniqueID())) { ++ list.add(entityplayer); ++ } + } +- // CraftBukkit end +- this.w = 0; ++ target.getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.UPDATE_LATENCY, list)); + } +- ++ if (++tick > 600) { ++ tick = 0; ++ } ++ setTick(tick); ++ // Purpur end + } + + public void sendAll(Packet packet) { +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +index e781ae267d..4f42bc2183 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +@@ -1382,7 +1382,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + + @Override + public boolean canSee(Player player) { +- return !hiddenPlayers.containsKey(player.getUniqueId()); ++ // Purpur start ++ return canSee(player.getUniqueId()); ++ } ++ ++ public boolean canSee(UUID uuid) { ++ return !hiddenPlayers.containsKey(uuid); ++ // Purpur end + } + + @Override diff --git a/patches/server/0161-Spread-out-player-list-ticks.patch b/patches/server/0161-Spread-out-player-list-ticks.patch deleted file mode 100644 index 420fdf0f6..000000000 --- a/patches/server/0161-Spread-out-player-list-ticks.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: James Lyne -Date: Mon, 7 Dec 2020 17:52:36 +0000 -Subject: [PATCH] Spread out player list ticks - - -diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java -index 3f634a266..7ac756179 100644 ---- a/src/main/java/net/minecraft/server/PlayerList.java -+++ b/src/main/java/net/minecraft/server/PlayerList.java -@@ -919,10 +919,11 @@ public abstract class PlayerList { - } - - public void tick() { -- if (++this.w > 600) { -+ if (true) { -+ int tick = getTick(); // Purpur - // CraftBukkit start -- for (int i = 0; i < this.players.size(); ++i) { -- final EntityPlayer target = (EntityPlayer) this.players.get(i); -+ if (tick < this.players.size()) { // Purpur -+ final EntityPlayer target = (EntityPlayer) this.players.get(tick); // Purpur - - target.playerConnection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.UPDATE_LATENCY, Iterables.filter(this.players, new Predicate() { - @Override -@@ -931,12 +932,23 @@ public abstract class PlayerList { - } - }))); - } -+ - // CraftBukkit end -- this.w = 0; -+ // Purpur start -+ if (tick >= 600) { -+ setTick(0); -+ } else { -+ setTick(tick + 1); -+ } -+ // Purpur end - } - - } - -+ public final int getTick() { return this.w; } // Purpur - OBFHELPER -+ -+ public final void setTick(int tick) { this.w = tick; } // Purpur - OBFHELPER -+ - public void sendAll(Packet packet) { - for (int i = 0; i < this.players.size(); ++i) { - ((EntityPlayer) this.players.get(i)).playerConnection.sendPacket(packet);