diff --git a/leaves-server/minecraft-patches/features/0074-Replay-Mod-API.patch b/leaves-server/minecraft-patches/features/0074-Replay-Mod-API.patch index 7fc4ccb0..b58d16a1 100644 --- a/leaves-server/minecraft-patches/features/0074-Replay-Mod-API.patch +++ b/leaves-server/minecraft-patches/features/0074-Replay-Mod-API.patch @@ -81,7 +81,7 @@ index 514f8fbdeb776087608665c35de95294aadf5cf0..2f78ca86f46ea08fdcf4b8047d3d0b04 if (players.size() >= resultLimit) { return players; diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 39898e5e2bd75eced05f0b90b3881270d144fd93..9a45eaae53ff9caac6e37f532e86748add886148 100644 +index 39898e5e2bd75eced05f0b90b3881270d144fd93..25087f470db918dbca3ec582581d02822e5ff17d 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -1638,7 +1638,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop> startTrackingPackets = this.getStartTrackingPackets(objective); + +- for (ServerPlayer serverPlayer : this.server.getPlayerList().getPlayers()) { ++ for (ServerPlayer serverPlayer : this.server.getPlayerList().realPlayers) { // Leaves - only real players + if (serverPlayer.getBukkitEntity().getScoreboard().getHandle() != this) continue; // CraftBukkit - Only players on this board + for (Packet packet : startTrackingPackets) { + serverPlayer.connection.send(packet); +@@ -270,7 +270,7 @@ public class ServerScoreboard extends Scoreboard { + public void stopTrackingObjective(Objective objective) { + List> stopTrackingPackets = this.getStopTrackingPackets(objective); + +- for (ServerPlayer serverPlayer : this.server.getPlayerList().getPlayers()) { ++ for (ServerPlayer serverPlayer : this.server.getPlayerList().realPlayers) { // Leaves - only real players + if (serverPlayer.getBukkitEntity().getScoreboard().getHandle() != this) continue; // CraftBukkit - Only players on this board + for (Packet packet : stopTrackingPackets) { + serverPlayer.connection.send(packet); +diff --git a/net/minecraft/server/commands/ListPlayersCommand.java b/net/minecraft/server/commands/ListPlayersCommand.java +index c6ae34f91b3629990294fc5e69237a1e600ef038..2109b0a2d4099e64c34cd1c45b83f72654d3b615 100644 +--- a/net/minecraft/server/commands/ListPlayersCommand.java ++++ b/net/minecraft/server/commands/ListPlayersCommand.java +@@ -33,7 +33,7 @@ public class ListPlayersCommand { + private static int format(CommandSourceStack source, Function nameExtractor) { + PlayerList playerList = source.getServer().getPlayerList(); + // CraftBukkit start +- List playersTemp = playerList.getPlayers(); ++ List playersTemp = playerList.realPlayers; + if (source.getBukkitSender() instanceof org.bukkit.entity.Player) { + org.bukkit.entity.Player sender = (org.bukkit.entity.Player) source.getBukkitSender(); + playersTemp = playersTemp.stream().filter((ep) -> sender.canSee(ep.getBukkitEntity())).collect(java.util.stream.Collectors.toList()); diff --git a/net/minecraft/server/commands/OpCommand.java b/net/minecraft/server/commands/OpCommand.java index f2286b96b8f40b4588f817913c42ae7b4a92340f..dbe6c37642d35ac6ee8b428cf1e45878a5dfa9da 100644 --- a/net/minecraft/server/commands/OpCommand.java @@ -142,7 +186,7 @@ index e6de7ef46d197c14495d4b55d094af34816fc063..5072dc7ac71e1640b2aad35c3c3560e0 } // Leaves end - skip diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 7a0d36b9c6a633919a116fc4d47e500b2c6cbc28..7dffd2a20b8efdbf48925bae485ee4920b1ec362 100644 +index 7a0d36b9c6a633919a116fc4d47e500b2c6cbc28..95cb24f44412e2aad5f15f8256e3506366c1412d 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -130,6 +130,7 @@ public abstract class PlayerList { @@ -287,7 +331,15 @@ index 7a0d36b9c6a633919a116fc4d47e500b2c6cbc28..7dffd2a20b8efdbf48925bae485ee492 this.playersByName.put(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT), player); // Spigot this.playersByUUID.put(player.getUUID(), player); // this.broadcastAll(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player))); // CraftBukkit - replaced with loop below -@@ -517,6 +638,43 @@ public abstract class PlayerList { +@@ -503,6 +624,7 @@ public abstract class PlayerList { + } + + protected void save(ServerPlayer player) { ++ if (player instanceof org.leavesmc.leaves.replay.ServerPhotographer) return; // Leaves - skip photographer + if (!player.getBukkitEntity().isPersistent()) return; // CraftBukkit + player.lastSave = MinecraftServer.currentTick; // Paper - Incremental chunk and player saving + this.playerIo.save(player); +@@ -517,6 +639,43 @@ public abstract class PlayerList { } } @@ -331,7 +383,7 @@ index 7a0d36b9c6a633919a116fc4d47e500b2c6cbc28..7dffd2a20b8efdbf48925bae485ee492 public @Nullable net.kyori.adventure.text.Component remove(ServerPlayer player) { // CraftBukkit - return string // Paper - return Component // Paper start - Fix kick event leave message not being sent return this.remove(player, net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? player.getBukkitEntity().displayName() : io.papermc.paper.adventure.PaperAdventure.asAdventure(player.getDisplayName()))); -@@ -590,6 +748,7 @@ public abstract class PlayerList { +@@ -590,6 +749,7 @@ public abstract class PlayerList { player.retireScheduler(); // Paper - Folia schedulers player.getAdvancements().stopListening(); this.players.remove(player); @@ -339,7 +391,27 @@ index 7a0d36b9c6a633919a116fc4d47e500b2c6cbc28..7dffd2a20b8efdbf48925bae485ee492 this.playersByName.remove(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot this.server.getCustomBossEvents().onPlayerDisconnect(player); UUID uuid = player.getUUID(); -@@ -1030,7 +1189,7 @@ public abstract class PlayerList { +@@ -964,14 +1124,14 @@ public abstract class PlayerList { + } + + public String[] getPlayerNamesArray() { +- String[] strings = new String[this.players.size() + this.server.getBotList().bots.size()]; // Leaves - fakeplayer support ++ String[] strings = new String[this.realPlayers.size() + this.server.getBotList().bots.size()]; // Leaves - fakeplayer support, and skip photographer + +- for (int i = 0; i < this.players.size(); i++) { +- strings[i] = this.players.get(i).getGameProfile().getName(); ++ for (int i = 0; i < this.realPlayers.size(); i++) { // Leaves - only real players ++ strings[i] = this.realPlayers.get(i).getGameProfile().getName(); // Leaves - only real players + } + // Leaves start - fakeplayer support +- for (int i = this.players.size(); i < strings.length; ++i) { +- strings[i] = this.server.getBotList().bots.get(i - this.players.size()).getGameProfile().getName(); ++ for (int i = this.realPlayers.size(); i < strings.length; ++i) { // Leaves - only real players ++ strings[i] = this.server.getBotList().bots.get(i - this.realPlayers.size()).getGameProfile().getName(); // Leaves - only real players + } + // Leaves end - fakeplayer support + +@@ -1030,7 +1190,7 @@ public abstract class PlayerList { // Paper start - whitelist verify event / login event public LoginResult canBypassFullServerLogin(final GameProfile profile, final LoginResult currentResult) { diff --git a/leaves-server/minecraft-patches/features/0111-Xaero-Map-Protocol.patch b/leaves-server/minecraft-patches/features/0111-Xaero-Map-Protocol.patch index 875f5909..49121adf 100644 --- a/leaves-server/minecraft-patches/features/0111-Xaero-Map-Protocol.patch +++ b/leaves-server/minecraft-patches/features/0111-Xaero-Map-Protocol.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Xaero Map Protocol diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 59d596eebda9351f7401dd4b526fefa35324b5d6..8bc8114abd5acebb78e59b522a1ee958338348e3 100644 +index d4eb10d3734930a43b8270cdc7eb78bf40907c94..81a6b4d9c35056b3eda889800f61964ab522a8b9 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -1317,6 +1317,7 @@ public abstract class PlayerList { +@@ -1318,6 +1318,7 @@ public abstract class PlayerList { player.connection.send(new ClientboundInitializeBorderPacket(worldBorder)); player.connection.send(new ClientboundSetTimePacket(level.getGameTime(), level.getDayTime(), level.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT))); player.connection.send(new ClientboundSetDefaultSpawnPositionPacket(level.getSharedSpawnPos(), level.getSharedSpawnAngle())); diff --git a/leaves-server/paper-patches/features/0010-Replay-Mod-API.patch b/leaves-server/paper-patches/features/0010-Replay-Mod-API.patch index 158844c6..3111bb6e 100644 --- a/leaves-server/paper-patches/features/0010-Replay-Mod-API.patch +++ b/leaves-server/paper-patches/features/0010-Replay-Mod-API.patch @@ -75,3 +75,16 @@ index 322a1e38799a7bf45b8d3ee151b0b62df45d55d7..7a5e29746890bfbb7ef8e910e787e82c } @Override +diff --git a/src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java b/src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java +index 25aae550dcdcef2df268d0dd99bdcc9bbd49fcf8..83af50de50a03e164d572f3c3466b6d0b42ed138 100644 +--- a/src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java ++++ b/src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java +@@ -23,7 +23,7 @@ public class LazyPlayerSet extends LazyHashSet { + } + + public static Set makePlayerSet(final MinecraftServer server) { +- List players = server.getPlayerList().players; ++ List players = server.getPlayerList().realPlayers; // Leaves - only real players + Set reference = new HashSet<>(players.size()); + for (ServerPlayer player : players) { + reference.add(player.getBukkitEntity()); diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/replay/ServerPhotographer.java b/leaves-server/src/main/java/org/leavesmc/leaves/replay/ServerPhotographer.java index a1845ecc..23c7e5c5 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/replay/ServerPhotographer.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/replay/ServerPhotographer.java @@ -77,7 +77,6 @@ public class ServerPhotographer extends ServerPlayer { @Override public void tick() { super.tick(); - super.doTick(); if (this.getServer().getTickCount() % 10 == 0) { connection.resetPosition();