From f5648c87994db478080c46ff4fb39d360283693b Mon Sep 17 00:00:00 2001 From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com> Date: Sun, 16 Mar 2025 19:08:55 +0300 Subject: [PATCH] add configurable option to prevent server ping responses before startup (rewritten purpur patch) --- .../ServerStatusPacketListenerImpl.java.patch | 14 ++++++++++++++ .../java/org/bxteam/divinemc/DivineConfig.java | 3 +++ 2 files changed, 17 insertions(+) create mode 100644 divinemc-server/minecraft-patches/sources/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch new file mode 100644 index 0000000..0f3dd33 --- /dev/null +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch @@ -0,0 +1,14 @@ +--- a/net/minecraft/server/network/ServerStatusPacketListenerImpl.java ++++ b/net/minecraft/server/network/ServerStatusPacketListenerImpl.java +@@ -37,7 +_,10 @@ + } else { + this.hasRequestedStatus = true; + // this.connection.send(new ClientboundStatusResponsePacket(this.status)); // Paper +- if (net.minecraft.server.MinecraftServer.getServer().getStatus().version().isEmpty()) return; // Purpur - Fix 'outdated server' showing in ping before server fully boots - do not respond to pings before we know the protocol version ++ // DivineMC start - Don't respond ping before start fully - rewritten Purpur patch (configurable) ++ var status = net.minecraft.server.MinecraftServer.getServer().getStatus(); ++ if (org.bxteam.divinemc.DivineConfig.dontRespondPingBeforeStart && (status == null || status.version().isEmpty())) return; ++ // DivineMC end - Don't respond ping before start fully - rewritten Purpur patch (configurable) + com.destroystokyo.paper.network.StandardPaperServerListPingEventImpl.processRequest(net.minecraft.server.MinecraftServer.getServer(), this.connection); // Paper - handle status request + } + } diff --git a/divinemc-server/src/main/java/org/bxteam/divinemc/DivineConfig.java b/divinemc-server/src/main/java/org/bxteam/divinemc/DivineConfig.java index 229becf..66ab199 100644 --- a/divinemc-server/src/main/java/org/bxteam/divinemc/DivineConfig.java +++ b/divinemc-server/src/main/java/org/bxteam/divinemc/DivineConfig.java @@ -309,6 +309,7 @@ public class DivineConfig { public static boolean disableDisconnectSpam = false; public static boolean connectionFlushQueueRewrite = false; public static boolean gracefulTeleportHandling = false; + public static boolean dontRespondPingBeforeStart = true; private static void networkSettings() { disableDisconnectSpam = getBoolean("settings.network.disable-disconnect-spam", disableDisconnectSpam, "Prevents players being disconnected by 'disconnect.spam' when sending too many chat packets"); @@ -319,6 +320,8 @@ public class DivineConfig { "Note: May increase the Netty thread usage"); gracefulTeleportHandling = getBoolean("settings.network.graceful-teleport-handling", gracefulTeleportHandling , "Disables being disconnected from 'multiplayer.disconnect.invalid_player_movement' (also declines the packet handling)."); + dontRespondPingBeforeStart = getBoolean("settings.network.dont-respond-ping-before-start", dontRespondPingBeforeStart, + "Prevents the server from responding to pings before the server is fully booted."); } public static boolean enableFasterTntOptimization = true;