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