diff --git a/canvas-server/minecraft-patches/features/0003-Leaf-Flush-location-while-knockback.patch b/canvas-server/minecraft-patches/features/0003-Leaf-Flush-location-while-knockback.patch index dc32148e14..c9b1bfeb84 100644 --- a/canvas-server/minecraft-patches/features/0003-Leaf-Flush-location-while-knockback.patch +++ b/canvas-server/minecraft-patches/features/0003-Leaf-Flush-location-while-knockback.patch @@ -8,7 +8,7 @@ As part of Leaf: https://github.com/Winds-Studio/Leaf/blob/58a4a9cb7994474e63ba4 Licensed under: https://github.com/Winds-Studio/Leaf/blob/9e1b4ca7bc2e9154bc5620b7a9fef0eab3c7aae5/LICENSE.md diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index a811f5e93d94038e497a28ce81272d8db382a044..519620e364dddf14cdfd65a723b620ae2957562a 100644 +index 52ac642075df8b1b96f26876857a5a6d3091d90c..9f5b690a490560f381cdbe59db846cd320a1d663 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java @@ -1079,6 +1079,12 @@ public abstract class Player extends Avatar implements ContainerUser { diff --git a/canvas-server/minecraft-patches/features/0004-Purpur-Ender-Chest-6-Rows-Config.patch b/canvas-server/minecraft-patches/features/0004-Purpur-Ender-Chest-6-Rows-Config.patch index 42dc85cb27..0f0e19e208 100644 --- a/canvas-server/minecraft-patches/features/0004-Purpur-Ender-Chest-6-Rows-Config.patch +++ b/canvas-server/minecraft-patches/features/0004-Purpur-Ender-Chest-6-Rows-Config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Purpur Ender Chest 6 Rows Config diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 547f95af4bb245477459e0ba09c0c8f03bd9372a..5922bafd0524bf0fe6bcde2aa960f8cd5eac95b7 100644 +index aafe05d97b396f6648613813cc25c3449992424a..f0c07f82b00d5e0f9fd3069c96de4cd15a697b9b 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -1038,6 +1038,27 @@ public abstract class PlayerList { +@@ -1047,6 +1047,27 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); } // Paper - Add sendOpLevel API @@ -37,7 +37,7 @@ index 547f95af4bb245477459e0ba09c0c8f03bd9372a..5922bafd0524bf0fe6bcde2aa960f8cd // Paper start - whitelist verify event / login event diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index 519620e364dddf14cdfd65a723b620ae2957562a..dc57b2416b783d6af00d158b642980b3ae65199d 100644 +index 9f5b690a490560f381cdbe59db846cd320a1d663..c25866c36a5c44c4e29bea68e9a4a7efcbc16a5e 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java @@ -175,6 +175,7 @@ public abstract class Player extends Avatar implements ContainerUser { diff --git a/canvas-server/minecraft-patches/sources/net/minecraft/server/players/PlayerList.java.patch b/canvas-server/minecraft-patches/sources/net/minecraft/server/players/PlayerList.java.patch index 74c52e8ee8..fdb48776bf 100644 --- a/canvas-server/minecraft-patches/sources/net/minecraft/server/players/PlayerList.java.patch +++ b/canvas-server/minecraft-patches/sources/net/minecraft/server/players/PlayerList.java.patch @@ -1,11 +1,16 @@ --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -112,7 +_,7 @@ +@@ -112,7 +_,12 @@ public static final Component CHAT_FILTERED_FULL = Component.translatable("chat.filtered_full"); public static final Component DUPLICATE_LOGIN_DISCONNECT_MESSAGE = Component.translatable("multiplayer.disconnect.duplicate_login"); private static final Logger LOGGER = LogUtils.getLogger(); - public static final int SEND_PLAYER_INFO_INTERVAL = 600; + public static final int SEND_PLAYER_INFO_INTERVAL = io.canvasmc.canvas.GlobalConfiguration.getInstance().networking.playerInfoSendInterval; // Canvas - optimize playerlist tick ++ // Canvas start - send the join player list in several packets ++ // one entry is about 2KB with a signed skin and chat key, so a single packet passes the 2MB frame limit at ++ // roughly 1,000 players and nobody can join anymore. 200 entries stay far below it ++ private static final int PLAYER_INFO_JOIN_BATCH_SIZE = 200; ++ // Canvas end - send the join player list in several packets private static final ThreadLocal BAN_DATE_FORMAT = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z", Locale.ROOT)); // Folia - region threading - SDF is not thread-safe private final MinecraftServer server; private final List players = new java.util.concurrent.CopyOnWriteArrayList(); // CraftBukkit - ArrayList -> CopyOnWriteArrayList: Iterator safety @@ -35,6 +40,19 @@ 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 +@@ -358,7 +_,11 @@ + } + // Paper start - Use single player info update packet on join + if (!onlinePlayers.isEmpty()) { +- player.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(onlinePlayers, player)); // Paper - Add Listing API for Player ++ // Canvas start - send the join player list in several packets ++ for (int from = 0, size = onlinePlayers.size(); from < size; from += PLAYER_INFO_JOIN_BATCH_SIZE) { ++ player.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(onlinePlayers.subList(from, Math.min(from + PLAYER_INFO_JOIN_BATCH_SIZE, size)), player)); // Paper - Add Listing API for Player ++ } ++ // Canvas end - send the join player list in several packets + } + // Paper end - Use single player info update packet on join + player.sentListPacket = true; @@ -503,6 +_,7 @@ if (advancements != null) { advancements.save();