From fd1b206cf21d022c44cfefe3114df80b4e9dd700 Mon Sep 17 00:00:00 2001 From: Jonathing Date: Tue, 18 Feb 2025 17:16:07 -0500 Subject: [PATCH] Ensure NetworkConstants is loaded before mod construction (#10448) --- .../minecraft/net/minecraft/server/Bootstrap.java.patch | 7 ++++++- src/main/java/net/minecraftforge/common/ForgeMod.java | 1 - src/main/java/net/minecraftforge/network/NetworkHooks.java | 5 +++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/patches/minecraft/net/minecraft/server/Bootstrap.java.patch b/patches/minecraft/net/minecraft/server/Bootstrap.java.patch index d68e4c4f5d..cf945325e9 100644 --- a/patches/minecraft/net/minecraft/server/Bootstrap.java.patch +++ b/patches/minecraft/net/minecraft/server/Bootstrap.java.patch @@ -1,10 +1,15 @@ --- a/net/minecraft/server/Bootstrap.java +++ b/net/minecraft/server/Bootstrap.java -@@ -53,6 +_,8 @@ +@@ -53,6 +_,13 @@ DispenseItemBehavior.m_123402_(); CauldronInteraction.m_175649_(); Registry.m_206101_(); + net.minecraftforge.registries.GameData.vanillaSnapshot(); ++ // Forge: Hacky fix to ensure that NetworkConstants is loaded before mods are constructed. ++ // Many older mods use network internals that shouldn't be used, yet are exposed so they get used anyways. ++ // This can cause class-loading issues with ForgeMod loading NetworkConstants and HandshakeResolver. ++ // To ensure that doesn't happen, we load it here and now. This is not an issue in 1.20.2 and newer. ++ net.minecraftforge.network.NetworkHooks.init(); + if (false) // skip redirectOutputToLog, Forge already redirects stdout and stderr output to log so that they print with more context m_135890_(); } diff --git a/src/main/java/net/minecraftforge/common/ForgeMod.java b/src/main/java/net/minecraftforge/common/ForgeMod.java index fb97745134..a9be84423f 100644 --- a/src/main/java/net/minecraftforge/common/ForgeMod.java +++ b/src/main/java/net/minecraftforge/common/ForgeMod.java @@ -433,7 +433,6 @@ public class ForgeMod return uuid.toString(); }); - LOGGER.debug(FORGEMOD, "Loading Network data for FML net version: {}", NetworkConstants.init()); CrashReportCallables.registerCrashCallable("FML", ForgeVersion::getSpec); CrashReportCallables.registerCrashCallable("Forge", ()->ForgeVersion.getGroup()+":"+ForgeVersion.getVersion()); diff --git a/src/main/java/net/minecraftforge/network/NetworkHooks.java b/src/main/java/net/minecraftforge/network/NetworkHooks.java index 328ec4c636..a2c5859f2e 100644 --- a/src/main/java/net/minecraftforge/network/NetworkHooks.java +++ b/src/main/java/net/minecraftforge/network/NetworkHooks.java @@ -46,6 +46,11 @@ public class NetworkHooks { private static final Logger LOGGER = LogManager.getLogger(); + public static void init() + { + LOGGER.debug("Loading Network data for FML net version: {}", NetworkConstants.init()); + } + public static String getFMLVersion(final String ip) { return ip.contains("\0") ? Objects.equals(ip.split("\0")[1], NetworkConstants.NETVERSION) ? NetworkConstants.NETVERSION : ip.split("\0")[1] : NetworkConstants.NOVERSION;