From 543cadc548f81d62d83079f23343ac0b3eac10cd Mon Sep 17 00:00:00 2001 From: MC_XiaoHei Date: Sun, 12 Oct 2025 14:18:08 +0800 Subject: [PATCH] feat: bot resume autosave --- .../features/0007-Leaves-Fakeplayer.patch | 20 +++++++++++++------ .../features/0015-No-chat-sign.patch | 6 +++--- .../features/0072-Replay-Mod-API.patch | 4 ++-- .../features/0073-Leaves-I18n-support.patch | 4 ++-- .../features/0108-Xaero-Map-Protocol.patch | 4 ++-- 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/leaves-server/minecraft-patches/features/0007-Leaves-Fakeplayer.patch b/leaves-server/minecraft-patches/features/0007-Leaves-Fakeplayer.patch index b2edda23..3309ab42 100644 --- a/leaves-server/minecraft-patches/features/0007-Leaves-Fakeplayer.patch +++ b/leaves-server/minecraft-patches/features/0007-Leaves-Fakeplayer.patch @@ -203,7 +203,7 @@ index 72e593966e66e27064030f5486f68a905885da1f..2682f6debf14ed3040a78b02d820e949 playerList.op(nameAndId); i++; diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index ecdb937f08a437a1d2398e49ca835071015844f2..fdda4acec6186c5a0290f3d9895cbcec782b8629 100644 +index ecdb937f08a437a1d2398e49ca835071015844f2..813ce64907b57f8452027ca65e44d9cecd2e0130 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java @@ -255,6 +255,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -218,7 +218,7 @@ index ecdb937f08a437a1d2398e49ca835071015844f2..fdda4acec6186c5a0290f3d9895cbcec com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now org.leavesmc.leaves.LeavesConfig.init((java.io.File) options.valueOf("leaves-settings")); // Leaves - Server Config -+ this.getBotList().loadBotInfo(); // Leaves - load resident bot info ++ this.getBotList().loadResumeBotInfo(); // Leaves - load resident bot info com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics // Leaves - down @@ -397,7 +397,7 @@ index 4888e84144c76edddee1a51dab3b05bc0f484c83..bba9101149c1b582fe261280fe4f6613 // Paper start - utility method for common conversion back to the game profile diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 03ae88e05414a2e46d096e52039faabaf14d2b7f..cf362c3c8b3018378173c7bf25e29fcb398a517a 100644 +index 03ae88e05414a2e46d096e52039faabaf14d2b7f..8ee83a9f17ce729ea6144d9227cc2c45b1270139 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -240,6 +240,19 @@ public abstract class PlayerList { @@ -408,7 +408,7 @@ index 03ae88e05414a2e46d096e52039faabaf14d2b7f..cf362c3c8b3018378173c7bf25e29fcb + if (org.leavesmc.leaves.LeavesConfig.modify.fakeplayer.enable) { + org.leavesmc.leaves.bot.ServerBot bot = this.server.getBotList().getBotByName(player.getScoreboardName()); + if (bot != null) { -+ this.server.getBotList().removeBot(bot, org.leavesmc.leaves.event.bot.BotRemoveEvent.RemoveReason.INTERNAL, player.getBukkitEntity(), false); ++ this.server.getBotList().removeBot(bot, org.leavesmc.leaves.event.bot.BotRemoveEvent.RemoveReason.INTERNAL, player.getBukkitEntity(), false, false); + } + this.server.getBotList().bots.forEach(bot1 -> { + bot1.sendPlayerInfo(player); @@ -467,7 +467,15 @@ index 03ae88e05414a2e46d096e52039faabaf14d2b7f..cf362c3c8b3018378173c7bf25e29fcb } public void broadcast(@Nullable Player except, double x, double y, double z, double radius, ResourceKey dimension, Packet packet) { -@@ -1278,7 +1309,13 @@ public abstract class PlayerList { +@@ -1008,6 +1039,7 @@ public abstract class PlayerList { + } + // Paper end - Incremental chunk and player saving + } ++ org.leavesmc.leaves.bot.BotList.INSTANCE.saveAllResumeBots(); // Leaves - resident fakeplayer + return null; }); // Paper - ensure main + } + +@@ -1278,7 +1310,13 @@ public abstract class PlayerList { @Nullable public ServerPlayer getPlayer(UUID playerUUID) { @@ -775,4 +783,4 @@ index bef794c3f58c41d910aa0bcc63fbdeea7225fddf..a601da588e6973cc5b87d3e3eeba49b5 + public LevelResource(String id) { // Leaves - private -> public this.id = id; } - + diff --git a/leaves-server/minecraft-patches/features/0015-No-chat-sign.patch b/leaves-server/minecraft-patches/features/0015-No-chat-sign.patch index ae021061..5a4955cd 100644 --- a/leaves-server/minecraft-patches/features/0015-No-chat-sign.patch +++ b/leaves-server/minecraft-patches/features/0015-No-chat-sign.patch @@ -106,7 +106,7 @@ index 88447fc2108126ccfad2fb7eb79ac94537f132d3..1bca4150c63da064bd2d1ee8f504f2eb private static final String PREFIX = "data:image/png;base64,"; public static final Codec CODEC = Codec.STRING.comapFlatMap(string -> { diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index fdda4acec6186c5a0290f3d9895cbcec782b8629..d49f84c17e624c4023b678df07ec812124278db3 100644 +index 813ce64907b57f8452027ca65e44d9cecd2e0130..677ad1a39e76efc98fc3b953ad66b329184612e0 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java @@ -782,7 +782,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -148,10 +148,10 @@ index adb26ae4dfd5dc111cc55000b71c15f95239b090..20b9dfe68dfbcd5bb999ee4ec0500bdf if (packet == null || this.processedDisconnect) { // Spigot return; diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index cf362c3c8b3018378173c7bf25e29fcb398a517a..f951ea1c6c2b63cc6b7f330cd3100adb507f8e54 100644 +index 8ee83a9f17ce729ea6144d9227cc2c45b1270139..23e58f03b04a85611d1b4bb0e5f009a94f2fa57d 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -1237,7 +1237,7 @@ public abstract class PlayerList { +@@ -1238,7 +1238,7 @@ public abstract class PlayerList { } public boolean verifyChatTrusted(PlayerChatMessage message) { diff --git a/leaves-server/minecraft-patches/features/0072-Replay-Mod-API.patch b/leaves-server/minecraft-patches/features/0072-Replay-Mod-API.patch index 043094a2..04daae11 100644 --- a/leaves-server/minecraft-patches/features/0072-Replay-Mod-API.patch +++ b/leaves-server/minecraft-patches/features/0072-Replay-Mod-API.patch @@ -315,7 +315,7 @@ index 93dc94ec1e4e93af7ceea21fb01d35ae65b40b92..c72d272c6d48d12bda8ee99fafee5d27 if (new org.bukkit.event.player.PlayerGameModeChangeEvent(this.getBukkitEntity(), org.bukkit.GameMode.getByValue(this.server.getDefaultGameType().getId()), org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.DEFAULT_GAMEMODE, null).callEvent()) { this.gameMode.setGameModeForPlayer(this.server.getForcedGameType(), GameType.DEFAULT_MODE); diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 248c08b4f1dc6cf47ac311d5872ae56485e3b425..19c8b1a728c28ed6e325b0b5e3d4aec764b74f0b 100644 +index 39098ec97660f5b7f951efcfd90d3a355e27b945..b4fe935660bf4c0456412926a9c892498282859a 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -125,6 +125,7 @@ public abstract class PlayerList { @@ -391,7 +391,7 @@ index 248c08b4f1dc6cf47ac311d5872ae56485e3b425..19c8b1a728c28ed6e325b0b5e3d4aec7 + if (org.leavesmc.leaves.LeavesConfig.modify.fakeplayer.enable) { + org.leavesmc.leaves.bot.ServerBot bot = this.server.getBotList().getBotByName(player.getScoreboardName()); + if (bot != null) { -+ this.server.getBotList().removeBot(bot, org.leavesmc.leaves.event.bot.BotRemoveEvent.RemoveReason.INTERNAL, player.getBukkitEntity(), false); ++ this.server.getBotList().removeBot(bot, org.leavesmc.leaves.event.bot.BotRemoveEvent.RemoveReason.INTERNAL, player.getBukkitEntity(), false, false); + } + this.server.getBotList().bots.forEach(bot1 -> { + bot1.sendPlayerInfo(player); diff --git a/leaves-server/minecraft-patches/features/0073-Leaves-I18n-support.patch b/leaves-server/minecraft-patches/features/0073-Leaves-I18n-support.patch index 4d355bf7..ddee8d39 100644 --- a/leaves-server/minecraft-patches/features/0073-Leaves-I18n-support.patch +++ b/leaves-server/minecraft-patches/features/0073-Leaves-I18n-support.patch @@ -39,13 +39,13 @@ index 30b681bc234eac8dc44ce3bf6e228171f5a71a7a..e7a4a977cd1dcdbdeb163016ff30346b String awtException = io.papermc.paper.util.ServerEnvironment.awtDependencyCheck(); if (awtException != null) { diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index 97b95b07d378c2159d123f918f80d7f86bcaed7a..132a0d9e6a1e4792f87ba92731d1e53b6b01b548 100644 +index 677ad1a39e76efc98fc3b953ad66b329184612e0..51400ef2db6e93bfa032108f72687cddfc60c88e 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java @@ -280,6 +280,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface org.leavesmc.leaves.LeavesConfig.init((java.io.File) options.valueOf("leaves-settings")); // Leaves - Server Config - this.getBotList().loadBotInfo(); // Leaves - load resident bot info + this.getBotList().loadResumeBotInfo(); // Leaves - load resident bot info + org.leavesmc.leaves.util.ServerI18nUtil.init(); // Leaves I18n com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics // Leaves - down diff --git a/leaves-server/minecraft-patches/features/0108-Xaero-Map-Protocol.patch b/leaves-server/minecraft-patches/features/0108-Xaero-Map-Protocol.patch index a17c150f..1eaffb0a 100644 --- a/leaves-server/minecraft-patches/features/0108-Xaero-Map-Protocol.patch +++ b/leaves-server/minecraft-patches/features/0108-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 6fb2170c777ca0ac333f9663beb43644120cc9d6..65005673cbda87e6d581ae61586c03eaa4d20164 100644 +index 5775b4bf6377d2e39707cb259b4228f03b19cafc..f89bf5b325a1077e42321e117be445b8a11f9ecb 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -1247,6 +1247,7 @@ public abstract class PlayerList { +@@ -1248,6 +1248,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.getRespawnData()));