diff --git a/patches/server/0004-Leaves-Server-Config-And-Command.patch b/patches/server/0004-Leaves-Server-Config-And-Command.patch index 626fcee2..019fe150 100644 --- a/patches/server/0004-Leaves-Server-Config-And-Command.patch +++ b/patches/server/0004-Leaves-Server-Config-And-Command.patch @@ -129,10 +129,10 @@ index e1c99d941c7bb954bf3ac83d5002dbf58fd833b0..4760b943da08771a42fcb22eba4d586d .withRequiredArg() diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java new file mode 100644 -index 0000000000000000000000000000000000000000..9bef683796d7b3580605943c437f5317f5b4632c +index 0000000000000000000000000000000000000000..aad482669709aad45d803a43c0669478f2ec5b9b --- /dev/null +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -0,0 +1,990 @@ +@@ -0,0 +1,998 @@ +package top.leavesmc.leaves; + +import com.destroystokyo.paper.util.SneakyThrow; @@ -948,6 +948,14 @@ index 0000000000000000000000000000000000000000..9bef683796d7b3580605943c437f5317 + tickCommand = getBoolean("settings.modify.tick-command", tickCommand); + } + ++ public static boolean bladerenLeavesProtocol = true; ++ private static void bladerenLeavesProtocol() { ++ bladerenLeavesProtocol = getBoolean("settings.protocol.bladeren.protocol", bladerenLeavesProtocol); ++ } ++ ++ public static void registerLeavesFeatures() { ++ } ++ + public static final class WorldConfig { + + public final String worldName; diff --git a/patches/server/0077-Bladeren-mspt-sync-protocol.patch b/patches/server/0077-Bladeren-mspt-sync-protocol.patch index 0c9cb111..57d645b0 100644 --- a/patches/server/0077-Bladeren-mspt-sync-protocol.patch +++ b/patches/server/0077-Bladeren-mspt-sync-protocol.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Bladeren mspt sync protocol diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 28b48043f621d931006ef36123ff5d1eaed7d040..0a486e22e87d6eb717caa1b530877236c9a0f285 100644 +index 5c09e2164a045346e0e2d4ce64408ac9209cf501..d47e29850462356e843591deba7e8a83f59faba0 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1611,6 +1611,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop players = new ArrayList<>(); @@ -87,15 +88,18 @@ index 0000000000000000000000000000000000000000..f04ea3ad31ac8d9d820599a09c002d4c + return new ResourceLocation(PROTOCOL_ID, path); + } + -+ public static void onPlayerJoin(@NotNull ServerPlayer player) { -+ if (LeavesConfig.msptSyncProtocol) { -+ FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer()); -+ ProtocolUtils.sendPayloadPacket(player, MSPT_SYNC_ENABLE, buf); -+ } ++ public static void init() { ++ LeavesProtocol.registerFeature("mspt_sync", (player, compoundTag) -> { ++ if (compoundTag.getString("Value").equals("true")) { ++ onPlayerSubmit(player); ++ } else { ++ onPlayerLoggedOut(player); ++ } ++ }); + } + -+ public static void handlePacket(ServerPlayer player, @NotNull ServerboundCustomPayloadPacket packet) { -+ if (packet.identifier.equals(MSPT_SYNC_ENABLE)) { ++ public static void onPlayerSubmit(@NotNull ServerPlayer player) { ++ if (LeavesConfig.msptSyncProtocol) { + players.add(player); + } + } diff --git a/patches/server/0080-Leaves-protocol.patch b/patches/server/0080-Leaves-protocol.patch index f2be20e9..4ff5a945 100644 --- a/patches/server/0080-Leaves-protocol.patch +++ b/patches/server/0080-Leaves-protocol.patch @@ -4,28 +4,65 @@ Date: Fri, 7 Jul 2023 16:50:06 +0800 Subject: [PATCH] Leaves protocol +diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +index 3d7e2654d67b9b61cf783e234e33576a03351413..f5e16e9f144824a78ccd4a9fa0a5c0f3364fdf5d 100644 +--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java ++++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +@@ -3666,6 +3666,9 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic + if (top.leavesmc.leaves.LeavesConfig.leavesCarpetSupport && ProtocolUtils.isNamespacePacket(packet, top.leavesmc.leaves.protocol.CarpetServerProtocol.PROTOCOL_ID)) { + top.leavesmc.leaves.protocol.CarpetServerProtocol.handlePacket(player, packet); + } ++ if (top.leavesmc.leaves.LeavesConfig.bladerenLeavesProtocol && ProtocolUtils.isNamespacePacket(packet, top.leavesmc.leaves.protocol.bladeren.LeavesProtocol.PROTOCOL_ID)) { ++ top.leavesmc.leaves.protocol.bladeren.LeavesProtocol.handlePacket(player, packet); ++ } + } catch (Exception ex) { + ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t dispatch custom payload", ex); + this.disconnect("Invalid custom payload!", org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PAYLOAD); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 9676ada06db5956cdc4489d07f4c031ae9372b06..5342cbb955cd6536004ca1c905fd9ab3bd9f7839 100644 +index 163827eb405e407bca16b890c4ae3f8a4a927320..bf0d945a6faa6346276e7a9bdd16dd1964bf03a4 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -366,6 +366,7 @@ public abstract class PlayerList { +@@ -365,6 +365,7 @@ public abstract class PlayerList { + top.leavesmc.leaves.protocol.JadeProtocol.onPlayerJoin(player); // Leaves - Jade top.leavesmc.leaves.protocol.AppleSkinProtocol.onPlayerLoggedIn(player); // Leaves - appleskin top.leavesmc.leaves.protocol.CarpetServerProtocol.onPlayerJoin(player); // Leaves - carpet - top.leavesmc.leaves.protocol.bladeren.MsptSyncProtocol.onPlayerJoin(player); // Leaves - mspt sync + top.leavesmc.leaves.protocol.bladeren.LeavesProtocol.onPlayerJoin(player); // Leaves - leaves protocol final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage(); +diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java +index a89cb107ed8c405548172f720b4481c2bf6950a8..1ce04475e600d527aaf31fab6cfa6bdb1a5ac2fb 100644 +--- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java ++++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java +@@ -16,6 +16,8 @@ import top.leavesmc.leaves.protocol.syncmatica.SyncmaticaProtocol; + import top.leavesmc.leaves.util.MathUtils; + import top.leavesmc.leaves.protocol.CarpetServerProtocol.CarpetRule; + import top.leavesmc.leaves.protocol.CarpetServerProtocol.CarpetRules; ++import top.leavesmc.leaves.protocol.bladeren.LeavesProtocol.LeavesFeatureSet; ++import top.leavesmc.leaves.protocol.bladeren.LeavesProtocol.LeavesFeature; + + import java.io.File; + import java.lang.reflect.InvocationTargetException; +@@ -75,6 +77,7 @@ public final class LeavesConfig { + + LeavesConfig.load(config); + registerCarpetRules(); ++ registerLeavesFeatures(); + + commands = new HashMap<>(); + commands.put("leaves", new LeavesCommand("leaves")); diff --git a/src/main/java/top/leavesmc/leaves/protocol/bladeren/LeavesProtocol.java b/src/main/java/top/leavesmc/leaves/protocol/bladeren/LeavesProtocol.java new file mode 100644 -index 0000000000000000000000000000000000000000..c03d70efd5b6d0b6640c9cc9dd194746cfd19ace +index 0000000000000000000000000000000000000000..54553afa6a6a81d29bcbc6b502ce2d93cb7061c7 --- /dev/null +++ b/src/main/java/top/leavesmc/leaves/protocol/bladeren/LeavesProtocol.java -@@ -0,0 +1,29 @@ +@@ -0,0 +1,111 @@ +package top.leavesmc.leaves.protocol.bladeren; + +import io.netty.buffer.Unpooled; ++import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; ++import net.minecraft.network.protocol.game.ServerboundCustomPayloadPacket; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; +import org.jetbrains.annotations.Contract; @@ -33,21 +70,101 @@ index 0000000000000000000000000000000000000000..c03d70efd5b6d0b6640c9cc9dd194746 +import top.leavesmc.leaves.LeavesConfig; +import top.leavesmc.leaves.util.ProtocolUtils; + ++import java.util.HashMap; ++import java.util.Map; ++import java.util.function.BiConsumer; ++ +public class LeavesProtocol { + + public static final String PROTOCOL_ID = "bladeren"; ++ public static final String PROTOCOL_VERSION = "1.0.0"; + -+ private static final ResourceLocation LAVA_RIPTIDE = id("lava_riptide"); ++ private static final ResourceLocation HELLO_ID = id("hello"); ++ private static final ResourceLocation FEATURE_MODIFY_ID = id("feature_modify"); ++ ++ private static final Map> registeredFeatures = new HashMap<>(); + + @Contract("_ -> new") + public static @NotNull ResourceLocation id(String path) { + return new ResourceLocation(PROTOCOL_ID, path); + } + ++ public static void registerFeature(String name, BiConsumer consumer) { ++ registeredFeatures.put(name, consumer); ++ } ++ ++ public static void handlePacket(ServerPlayer player, @NotNull ServerboundCustomPayloadPacket packet) { ++ if (packet.identifier.equals(HELLO_ID)) { ++ handleHello(player, packet.data); ++ } else if (packet.identifier.equals(FEATURE_MODIFY_ID)) { ++ handleModify(player, packet.data); ++ } ++ } ++ ++ private static void handleModify(@NotNull ServerPlayer player, @NotNull FriendlyByteBuf data) { ++ String name = data.readUtf(); ++ CompoundTag tag = data.readNbt(); ++ ++ if (registeredFeatures.containsKey(name)) { ++ registeredFeatures.get(name).accept(player, tag); ++ } ++ } ++ ++ private static void handleHello(@NotNull ServerPlayer player, @NotNull FriendlyByteBuf data) { ++ String clientVersion = data.readUtf(64); ++ CompoundTag tag = data.readNbt(); ++ ++ if (tag != null) { ++ CompoundTag featureNbt = tag.getCompound("Features"); ++ for (String name : featureNbt.getAllKeys()) { ++ if (registeredFeatures.containsKey(name)) { ++ registeredFeatures.get(name).accept(player, featureNbt.getCompound(name)); ++ } ++ } ++ } ++ } ++ + public static void onPlayerJoin(@NotNull ServerPlayer player) { -+ // lava riptide -+ FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer()); -+ buf.writeBoolean(LeavesConfig.lavaRiptide); -+ ProtocolUtils.sendPayloadPacket(player, LAVA_RIPTIDE, buf); ++ if (LeavesConfig.bladerenLeavesProtocol) { ++ FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer()); ++ buf.writeUtf(PROTOCOL_VERSION); ++ ++ CompoundTag tag = new CompoundTag(); ++ LeavesFeatureSet.writeNBT(tag); ++ buf.writeNbt(tag); ++ ++ ProtocolUtils.sendPayloadPacket(player, HELLO_ID, buf); ++ } ++ } ++ ++ public static class LeavesFeatureSet { ++ ++ private static final Map features = new HashMap<>(); ++ ++ public static void writeNBT(@NotNull CompoundTag tag) { ++ CompoundTag featureNbt = new CompoundTag(); ++ features.values().forEach(feature -> feature.writeNBT(featureNbt)); ++ tag.put("Features", featureNbt); ++ } ++ ++ public static void register(LeavesFeature feature) { ++ features.put(feature.name, feature); ++ } ++ } ++ ++ public record LeavesFeature(String name, String value) { ++ ++ @NotNull ++ @Contract("_, _ -> new") ++ public static LeavesFeature of(String name, boolean value) { ++ return new LeavesFeature(name, Boolean.toString(value)); ++ } ++ ++ public void writeNBT(@NotNull CompoundTag rules) { ++ CompoundTag rule = new CompoundTag(); ++ rule.putString("Feature", name); ++ rule.putString("Value", value); ++ rules.put(name, rule); ++ } + } +} diff --git a/patches/server/0081-Lava-riptide.patch b/patches/server/0081-Lava-riptide.patch index 690c6b77..5a97741d 100644 --- a/patches/server/0081-Lava-riptide.patch +++ b/patches/server/0081-Lava-riptide.patch @@ -26,3 +26,15 @@ index 8078f127ff4b6e0aafb5804b9c02e237f79445b5..801f066878d6ffe5dabe01d20513db90 return InteractionResultHolder.fail(itemstack); } else { user.startUsingItem(hand); +diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java +index 1ce04475e600d527aaf31fab6cfa6bdb1a5ac2fb..7641ecc09a9795d48049731f1f0f0013981fcae1 100644 +--- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java ++++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java +@@ -849,6 +849,7 @@ public final class LeavesConfig { + + public static void registerLeavesFeatures() { + LeavesFeatureSet.register(LeavesFeature.of("mspt_sync", msptSyncProtocol)); ++ LeavesFeatureSet.register(LeavesFeature.of("lava_riptide", lavaRiptide)); + } + + public static final class WorldConfig { diff --git a/patches/server/0082-No-block-update-command.patch b/patches/server/0082-No-block-update-command.patch index 3de91ce6..c9de2fae 100644 --- a/patches/server/0082-No-block-update-command.patch +++ b/patches/server/0082-No-block-update-command.patch @@ -92,7 +92,7 @@ index 2708251ebc1995e71fb0e5dca9e158a3005f8a8a..e28351b379677fec356b6efec2d882ee } } diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index a099364df3304df8092652e64bdb02d550c84b4f..1e14eefdce8633f196868f2309dd832b00b3373f 100644 +index 7641ecc09a9795d48049731f1f0f0013981fcae1..d23c064a51ac115e7269e80623b4e5bd23a8222f 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java @@ -11,6 +11,7 @@ import org.bukkit.configuration.file.YamlConfiguration; @@ -103,7 +103,7 @@ index a099364df3304df8092652e64bdb02d550c84b4f..1e14eefdce8633f196868f2309dd832b import top.leavesmc.leaves.profile.LeavesMinecraftSessionService; import top.leavesmc.leaves.protocol.syncmatica.SyncmaticaProtocol; import top.leavesmc.leaves.util.MathUtils; -@@ -83,6 +84,10 @@ public final class LeavesConfig { +@@ -86,6 +87,10 @@ public final class LeavesConfig { commands.put("bot", new BotCommand("bot")); Actions.registerAll(); } diff --git a/patches/server/0097-Reduce-array-allocations.patch b/patches/server/0097-Reduce-array-allocations.patch index 03d111bb..8f52d5a0 100644 --- a/patches/server/0097-Reduce-array-allocations.patch +++ b/patches/server/0097-Reduce-array-allocations.patch @@ -266,7 +266,7 @@ index 55ef6d5ffebe04e678dc89ec2740f031af361cb8..4c86d1836c8b4ac9c535cf5bccd71dec return ret; } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 6640cb8c04871bebeadc59f91db097124d06f801..b3e893dde6a39e699f192c139fa1055321ec5809 100644 +index f5e16e9f144824a78ccd4a9fa0a5c0f3364fdf5d..43dc38afc03323ebf4192f58a7703402f9379ade 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -249,6 +249,7 @@ import org.bukkit.inventory.InventoryView; @@ -346,7 +346,7 @@ index 2ff578e4a953ffcf5176815ba8e3f06f73499989..bf082b9c3947d6037328526e5bfafe2b final String s; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 5342cbb955cd6536004ca1c905fd9ab3bd9f7839..5718574a8a258a9a11417667b3373b4631a1211c 100644 +index bf0d945a6faa6346276e7a9bdd16dd1964bf03a4..7c4dc9c1809ed2e4d62ec7b795f7cdf3178a99ca 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -134,6 +134,7 @@ import org.bukkit.event.player.PlayerRespawnEvent.RespawnReason; @@ -357,7 +357,7 @@ index 5342cbb955cd6536004ca1c905fd9ab3bd9f7839..5718574a8a258a9a11417667b3373b46 import top.leavesmc.leaves.util.ReturnPortalManager; // Leaves - return portal fix public abstract class PlayerList { -@@ -737,7 +738,7 @@ public abstract class PlayerList { +@@ -736,7 +737,7 @@ public abstract class PlayerList { while (iterator.hasNext()) { entityplayer = (ServerPlayer) iterator.next(); this.save(entityplayer); // CraftBukkit - Force the player's inventory to be saved diff --git a/patches/server/0110-Avoid-anvil-too-expensive.patch b/patches/server/0110-Avoid-anvil-too-expensive.patch index 22d18a0a..c9430fcc 100644 --- a/patches/server/0110-Avoid-anvil-too-expensive.patch +++ b/patches/server/0110-Avoid-anvil-too-expensive.patch @@ -18,10 +18,10 @@ index e0c3a4ba27e21c3692e601acd0af60873bcbb84c..b9fcf49ed88c62265d9aa8926c1228b9 } diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 1e14eefdce8633f196868f2309dd832b00b3373f..9f95c37eca4f732e8ed15abef206c37b8afa71db 100644 +index d23c064a51ac115e7269e80623b4e5bd23a8222f..bef6f1223e6f3f96435635324ded2b7f23359a62 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -605,6 +605,7 @@ public final class LeavesConfig { +@@ -608,6 +608,7 @@ public final class LeavesConfig { public static void registerCarpetRules() { CarpetRules.register(CarpetRule.of("carpet", "creativeNoClip", creativeNoClip)); diff --git a/patches/server/0115-Add-Leaves-Auto-Update.patch b/patches/server/0115-Add-Leaves-Auto-Update.patch index 9e29dd5b..2b063873 100644 --- a/patches/server/0115-Add-Leaves-Auto-Update.patch +++ b/patches/server/0115-Add-Leaves-Auto-Update.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add Leaves Auto Update diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 9f95c37eca4f732e8ed15abef206c37b8afa71db..9d904fac3fc556b398d5dc53d6597f6c9f8a9dda 100644 +index bef6f1223e6f3f96435635324ded2b7f23359a62..5c1c8b25ac7b37a6392b55ea8c10788084be23dc 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java @@ -14,6 +14,7 @@ import top.leavesmc.leaves.bot.agent.Actions; @@ -16,7 +16,7 @@ index 9f95c37eca4f732e8ed15abef206c37b8afa71db..9d904fac3fc556b398d5dc53d6597f6c import top.leavesmc.leaves.util.MathUtils; import top.leavesmc.leaves.protocol.CarpetServerProtocol.CarpetRule; import top.leavesmc.leaves.protocol.CarpetServerProtocol.CarpetRules; -@@ -820,6 +821,7 @@ public final class LeavesConfig { +@@ -823,6 +824,7 @@ public final class LeavesConfig { private static void autoUpdate() { autoUpdate = getBoolean("settings.misc.auto-update.enable", autoUpdate); autoUpdateTime = getList("settings.misc.auto-update.time", autoUpdateTime); diff --git a/patches/server/0116-Replay-Mod-API.patch b/patches/server/0116-Replay-Mod-API.patch index e6f3e22b..bff048cc 100644 --- a/patches/server/0116-Replay-Mod-API.patch +++ b/patches/server/0116-Replay-Mod-API.patch @@ -115,7 +115,7 @@ index fd9e85dab7c511873824cac56a270ff435792292..257e51570ed08660613895f5a1eccbee } // Leaves end - bot can't get advancement diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 5718574a8a258a9a11417667b3373b4631a1211c..2f1c56de20a77d7ca5f424148cbc63019761438d 100644 +index 7c4dc9c1809ed2e4d62ec7b795f7cdf3178a99ca..f76142b61dc44ebf6312a3027fa9b66ff2a37653 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -136,6 +136,7 @@ import org.bukkit.event.player.PlayerSpawnChangeEvent; @@ -251,7 +251,7 @@ index 5718574a8a258a9a11417667b3373b4631a1211c..2f1c56de20a77d7ca5f424148cbc6301 this.playersByName.put(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT), player); // Spigot this.playersByUUID.put(player.getUUID(), player); // this.broadcastAll(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(entityplayer))); // CraftBukkit - replaced with loop below -@@ -400,6 +505,12 @@ public abstract class PlayerList { +@@ -399,6 +504,12 @@ public abstract class PlayerList { continue; } @@ -264,7 +264,7 @@ index 5718574a8a258a9a11417667b3373b4631a1211c..2f1c56de20a77d7ca5f424148cbc6301 onlinePlayers.add(entityplayer1); // Paper - use single player info update packet } // Paper start - use single player info update packet -@@ -614,6 +725,43 @@ public abstract class PlayerList { +@@ -613,6 +724,43 @@ public abstract class PlayerList { } @@ -308,7 +308,7 @@ index 5718574a8a258a9a11417667b3373b4631a1211c..2f1c56de20a77d7ca5f424148cbc6301 public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer) { // CraftBukkit - return string // Paper - return Component // Paper start return this.remove(entityplayer, net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? entityplayer.getBukkitEntity().displayName() : PaperAdventure.asAdventure(entityplayer.getDisplayName()))); -@@ -684,6 +832,7 @@ public abstract class PlayerList { +@@ -683,6 +831,7 @@ public abstract class PlayerList { entityplayer.retireScheduler(); // Paper - Folia schedulers entityplayer.getAdvancements().stopListening(); this.players.remove(entityplayer); @@ -317,7 +317,7 @@ index 5718574a8a258a9a11417667b3373b4631a1211c..2f1c56de20a77d7ca5f424148cbc6301 this.server.getCustomBossEvents().onPlayerDisconnect(entityplayer); UUID uuid = entityplayer.getUUID(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 47b27712c6ed11fc5c2cd7de04482870207545e7..0644273b83226d5a794e8d9517254b4c1febdfdd 100644 +index 93054a59f14fee933a908944e93b462b5dae2ce6..9f8981989d9f650ccdbd8b2f2a76eeedfa9e0008 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -261,6 +261,7 @@ import org.yaml.snakeyaml.error.MarkedYAMLException; @@ -345,7 +345,7 @@ index 47b27712c6ed11fc5c2cd7de04482870207545e7..0644273b83226d5a794e8d9517254b4c @Override public CraftPlayer apply(ServerPlayer player) { return player.getBukkitEntity(); -@@ -3193,4 +3195,11 @@ public final class CraftServer implements Server { +@@ -3194,4 +3196,11 @@ public final class CraftServer implements Server { return botManager; } // Leaves end - Bot API diff --git a/patches/server/0117-Leaves-tick-command.patch b/patches/server/0117-Leaves-tick-command.patch index 9dd11ec1..0ca8ce2c 100644 --- a/patches/server/0117-Leaves-tick-command.patch +++ b/patches/server/0117-Leaves-tick-command.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Leaves tick command diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 0a486e22e87d6eb717caa1b530877236c9a0f285..2cc285dc1b587ddd03565658cca35b7b58736399 100644 +index d47e29850462356e843591deba7e8a83f59faba0..5f61f4861254fb05f069f8e95a3e84c4109fe5c2 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -194,6 +194,7 @@ import org.bukkit.event.server.ServerLoadEvent; @@ -230,7 +230,7 @@ index 0000000000000000000000000000000000000000..162c3c005130bfa07c7b924015356430 + } +} diff --git a/src/main/java/top/leavesmc/leaves/protocol/bladeren/MsptSyncProtocol.java b/src/main/java/top/leavesmc/leaves/protocol/bladeren/MsptSyncProtocol.java -index f04ea3ad31ac8d9d820599a09c002d4c5db6104d..93478c3163910eb190e4fd0aded51ae0e31d6be3 100644 +index 5c206ecc6aba1ef632467f85ea83f909486ced29..6f53317f392963e5041ce816841141b4c3f08e47 100644 --- a/src/main/java/top/leavesmc/leaves/protocol/bladeren/MsptSyncProtocol.java +++ b/src/main/java/top/leavesmc/leaves/protocol/bladeren/MsptSyncProtocol.java @@ -10,6 +10,7 @@ import org.jetbrains.annotations.Contract; @@ -241,7 +241,7 @@ index f04ea3ad31ac8d9d820599a09c002d4c5db6104d..93478c3163910eb190e4fd0aded51ae0 import java.util.ArrayList; import java.util.Arrays; -@@ -61,6 +62,11 @@ public class MsptSyncProtocol { +@@ -63,6 +64,11 @@ public class MsptSyncProtocol { buf.writeDouble(mspt); buf.writeDouble(tps); players.forEach(player -> ProtocolUtils.sendPayloadPacket(player, MSPT_SYNC, buf)); diff --git a/patches/server/0121-Delete-Timings.patch b/patches/server/0121-Delete-Timings.patch index a1eecd32..04e46c1e 100644 --- a/patches/server/0121-Delete-Timings.patch +++ b/patches/server/0121-Delete-Timings.patch @@ -878,7 +878,7 @@ index 9c7fb1b7c2ff458e72bdcfa80c49252cd78e7d14..e5622ec12fc930f1f17b599c486366cf // Leaves start - update suppression crash fix } catch (top.leavesmc.leaves.util.UpdateSuppressionException exception) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 2cc285dc1b587ddd03565658cca35b7b58736399..f3a6aa97a64b4bf3e83f5c749da8c66d8b3a09ee 100644 +index 5f61f4861254fb05f069f8e95a3e84c4109fe5c2..fba016014ffc628887dc873cfa54f8c76a72c7ef 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -3,9 +3,6 @@ package net.minecraft.server; @@ -1683,7 +1683,7 @@ index 4c86d1836c8b4ac9c535cf5bccd71decf996278b..9c90318d1b0dca4d58ceb705a6a377fd } else if (close) { chunkproviderserver.close(false); } // Paper - rewrite chunk system diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index b3e893dde6a39e699f192c139fa1055321ec5809..a5de3f456e10fc62a8bd196ab21bd51d7de0904e 100644 +index 43dc38afc03323ebf4192f58a7703402f9379ade..e22cf5ed3c905d0536cad7ac23b7d94f755aa518 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2588,7 +2588,6 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -1712,7 +1712,7 @@ index b3e893dde6a39e699f192c139fa1055321ec5809..a5de3f456e10fc62a8bd196ab21bd51d } // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 2f1c56de20a77d7ca5f424148cbc63019761438d..42f197515d8a541da6240b9191b916a9f494ed41 100644 +index f76142b61dc44ebf6312a3027fa9b66ff2a37653..916c159fdd3d9e7300d0a50adbc31ec839b44ad8 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1,6 +1,5 @@ @@ -1722,7 +1722,7 @@ index 2f1c56de20a77d7ca5f424148cbc63019761438d..42f197515d8a541da6240b9191b916a9 import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -@@ -1419,7 +1418,6 @@ public abstract class PlayerList { +@@ -1418,7 +1417,6 @@ public abstract class PlayerList { public void saveAll(int interval) { io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main @@ -1730,7 +1730,7 @@ index 2f1c56de20a77d7ca5f424148cbc63019761438d..42f197515d8a541da6240b9191b916a9 int numSaved = 0; long now = MinecraftServer.currentTick; for (int i = 0; i < this.players.size(); ++i) { -@@ -1430,7 +1428,6 @@ public abstract class PlayerList { +@@ -1429,7 +1427,6 @@ public abstract class PlayerList { } // Paper end }