diff --git a/patches/minecraft/net/minecraft/server/Main.java.patch b/patches/minecraft/net/minecraft/server/Main.java.patch index 3ca20da94..5ac67d951 100644 --- a/patches/minecraft/net/minecraft/server/Main.java.patch +++ b/patches/minecraft/net/minecraft/server/Main.java.patch @@ -8,16 +8,40 @@ try { OptionSet optionset = optionparser.parse(p_main_0_); -@@ -86,7 +87,7 @@ +@@ -79,32 +80,36 @@ + optionparser.printHelpOn(System.err); + return; + } ++ Path path1 = Paths.get("eula.txt"); ++ ServerEula servereula = new ServerEula(path1); ++ if (!optionset.has(optionspec1) && !servereula.func_154346_a()) { ++ field_240759_a_.info("You need to agree to the EULA in order to run the server. Go to eula.txt for more info."); ++ return; ++ } + + CrashReport.func_230188_h_(); + Bootstrap.func_151354_b(); + Bootstrap.func_218821_c(); Util.func_240994_l_(); ++ if (!optionset.has(optionspec1)) net.minecraftforge.fml.server.ServerModLoader.load(); // Load mods before we load almost anything else anymore. Single spot now. Only loads if they haven't passed the initserver param Path path = Paths.get("server.properties"); ServerPropertiesProvider serverpropertiesprovider = new ServerPropertiesProvider(path); -- serverpropertiesprovider.func_219035_b(); -+ if (optionset.has(optionspec1) || !java.nio.file.Files.exists(path)) serverpropertiesprovider.func_219035_b(); - Path path1 = Paths.get("eula.txt"); - ServerEula servereula = new ServerEula(path1); + serverpropertiesprovider.func_219035_b(); +- Path path1 = Paths.get("eula.txt"); +- ServerEula servereula = new ServerEula(path1); if (optionset.has(optionspec1)) { -@@ -105,6 +106,11 @@ + field_240759_a_.info("Initialized '{}' and '{}'", path.toAbsolutePath(), path1.toAbsolutePath()); + return; + } + +- if (!servereula.func_154346_a()) { +- field_240759_a_.info("You need to agree to the EULA in order to run the server. Go to eula.txt for more info."); +- return; +- } +- + File file1 = new File(optionset.valueOf(optionspec9)); + YggdrasilAuthenticationService yggdrasilauthenticationservice = new YggdrasilAuthenticationService(Proxy.NO_PROXY, UUID.randomUUID().toString()); + MinecraftSessionService minecraftsessionservice = yggdrasilauthenticationservice.createMinecraftSessionService(); GameProfileRepository gameprofilerepository = yggdrasilauthenticationservice.createProfileRepository(); PlayerProfileCache playerprofilecache = new PlayerProfileCache(gameprofilerepository, new File(file1, MinecraftServer.field_152367_a.getName())); String s = Optional.ofNullable(optionset.valueOf(optionspec10)).orElse(serverpropertiesprovider.func_219034_a().field_219021_o); @@ -25,11 +49,10 @@ + field_240759_a_.error("Invalid world directory specified, must not be null, empty or the same directory as your universe! " + s); + return; + } -+ net.minecraftforge.fml.server.ServerModLoader.gatherAndInit(); // Gather and construct mods before resource loading and before world conversions. SaveFormat saveformat = SaveFormat.func_237269_a_(file1.toPath()); SaveFormat.LevelSave saveformat$levelsave = saveformat.func_237274_c_(s); MinecraftServer.func_240777_a_(saveformat$levelsave); -@@ -170,6 +176,7 @@ +@@ -170,6 +175,7 @@ Thread thread = new Thread("Server Shutdown Thread") { public void run() { dedicatedserver.func_71263_m(true); diff --git a/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch b/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch index 17671a390..0b8a99c47 100644 --- a/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch +++ b/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch @@ -8,24 +8,7 @@ BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)); String s1; -@@ -98,7 +99,9 @@ - field_155771_h.warn("To start the server with more ram, launch it as \"java -Xmx1024M -Xms1024M -jar minecraft_server.jar\""); - } - -+ net.minecraftforge.fml.server.ServerModLoader.begin(this); - field_155771_h.info("Loading properties"); -+ this.field_71340_o.func_219033_a(properties -> ServerProperties.func_218985_a(java.nio.file.Paths.get("server.properties"))); - ServerProperties serverproperties = this.field_71340_o.func_219034_a(); - if (this.func_71264_H()) { - this.func_71189_e("127.0.0.1"); -@@ -153,17 +156,20 @@ - if (!PreYggdrasilConverter.func_219587_e(this)) { - return false; - } else { -+ net.minecraftforge.fml.server.ServerModLoader.end(); - this.func_184105_a(new DedicatedPlayerList(this, this.field_240767_f_, this.field_240766_e_)); - long i = Util.func_211178_c(); - this.func_71191_d(serverproperties.field_219026_t); +@@ -159,11 +160,13 @@ SkullTileEntity.func_184293_a(this.func_152358_ax()); SkullTileEntity.func_184294_a(this.func_147130_as()); PlayerProfileCache.func_187320_a(this.func_71266_T()); @@ -39,7 +22,7 @@ if (serverproperties.field_219027_u != null) { this.func_200252_aR().func_223585_a(GameRules.field_223620_w).func_223570_a(serverproperties.field_219027_u, this); } -@@ -189,11 +195,12 @@ +@@ -189,11 +192,12 @@ } Items.field_190931_a.func_150895_a(ItemGroup.field_78027_g, NonNullList.func_191196_a()); @@ -53,7 +36,7 @@ } } -@@ -506,6 +513,11 @@ +@@ -506,6 +510,11 @@ return false; } diff --git a/src/main/java/net/minecraftforge/fml/SidedProvider.java b/src/main/java/net/minecraftforge/fml/SidedProvider.java index ae744f307..ecc16c7b9 100644 --- a/src/main/java/net/minecraftforge/fml/SidedProvider.java +++ b/src/main/java/net/minecraftforge/fml/SidedProvider.java @@ -40,7 +40,7 @@ public enum SidedProvider ()-> { throw new UnsupportedOperationException(); }), SIDED_SETUP_EVENT( (Function, Function>)c-> mc->new FMLClientSetupEvent(c, mc), - s-> mc->new FMLDedicatedServerSetupEvent(s, mc), + s-> mc->new FMLDedicatedServerSetupEvent(mc), ()-> { throw new UnsupportedOperationException(); }), STRIPCHARS( (Function, Function>)c-> ClientHooks::stripSpecialChars, diff --git a/src/main/java/net/minecraftforge/fml/event/lifecycle/FMLDedicatedServerSetupEvent.java b/src/main/java/net/minecraftforge/fml/event/lifecycle/FMLDedicatedServerSetupEvent.java index d0039db1f..dbc2801fa 100644 --- a/src/main/java/net/minecraftforge/fml/event/lifecycle/FMLDedicatedServerSetupEvent.java +++ b/src/main/java/net/minecraftforge/fml/event/lifecycle/FMLDedicatedServerSetupEvent.java @@ -36,20 +36,16 @@ import java.util.function.Supplier; * * Do dedicated server specific activities with this event. * + * This event is fired before construction of the dedicated server. Use {@link net.minecraftforge.fml.event.server.FMLServerAboutToStartEvent} + * or {@link net.minecraftforge.fml.event.server.FMLServerStartingEvent} to do stuff with the server, in both dedicated + * and integrated server contexts + * * This is a parallel dispatch event. */ public class FMLDedicatedServerSetupEvent extends ModLifecycleEvent { - private final Supplier serverSupplier; - - public FMLDedicatedServerSetupEvent(Supplier server, ModContainer container) + public FMLDedicatedServerSetupEvent(ModContainer container) { super(container); - this.serverSupplier = server; - } - - public Supplier getServerSupplier() - { - return serverSupplier; } } diff --git a/src/main/java/net/minecraftforge/fml/server/ServerLifecycleHooks.java b/src/main/java/net/minecraftforge/fml/server/ServerLifecycleHooks.java index c4125fcec..3406a7361 100644 --- a/src/main/java/net/minecraftforge/fml/server/ServerLifecycleHooks.java +++ b/src/main/java/net/minecraftforge/fml/server/ServerLifecycleHooks.java @@ -31,7 +31,19 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; import net.minecraft.resources.IPackNameDecorator; +import net.minecraft.server.dedicated.DedicatedServer; import net.minecraft.world.storage.FolderName; +import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.fml.LogicalSidedProvider; +import net.minecraftforge.fml.ModLoader; +import net.minecraftforge.fml.ModLoadingStage; +import net.minecraftforge.fml.ModLoadingWarning; +import net.minecraftforge.fml.SidedProvider; +import net.minecraftforge.fml.network.ConnectionType; +import net.minecraftforge.fml.network.FMLNetworkConstants; +import net.minecraftforge.fml.network.FMLStatusPing; +import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraftforge.fml.network.NetworkRegistry; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Marker; @@ -46,11 +58,6 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.util.text.StringTextComponent; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.LogicalSidedProvider; -import net.minecraftforge.fml.ModLoader; -import net.minecraftforge.fml.ModLoadingStage; -import net.minecraftforge.fml.ModLoadingWarning; import net.minecraftforge.fml.config.ConfigTracker; import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.server.FMLServerAboutToStartEvent; @@ -60,10 +67,6 @@ import net.minecraftforge.fml.event.server.FMLServerStoppedEvent; import net.minecraftforge.fml.event.server.FMLServerStoppingEvent; import net.minecraftforge.fml.loading.FileUtils; import net.minecraftforge.fml.loading.moddiscovery.ModFile; -import net.minecraftforge.fml.network.ConnectionType; -import net.minecraftforge.fml.network.FMLNetworkConstants; -import net.minecraftforge.fml.network.NetworkHooks; -import net.minecraftforge.fml.network.NetworkRegistry; import net.minecraftforge.fml.packs.ModFileResourcePack; import net.minecraftforge.fml.packs.ResourcePackLoader; import net.minecraftforge.forgespi.language.IModInfo; @@ -87,6 +90,9 @@ public class ServerLifecycleHooks public static boolean handleServerAboutToStart(final MinecraftServer server) { currentServer = server; + currentServer.getServerStatusResponse().setForgeData(new FMLStatusPing()); //gathers NetworkRegistry data + // on the dedi server we need to force the stuff to setup properly + DistExecutor.unsafeRunWhenOn(Dist.DEDICATED_SERVER, ()->()->SidedProvider.setServer(()->(DedicatedServer)server)); LogicalSidedProvider.setServer(()->server); ConfigTracker.INSTANCE.loadConfigs(ModConfig.Type.SERVER, getServerConfigPath(server)); return !MinecraftForge.EVENT_BUS.post(new FMLServerAboutToStartEvent(server)); diff --git a/src/main/java/net/minecraftforge/fml/server/ServerModLoader.java b/src/main/java/net/minecraftforge/fml/server/ServerModLoader.java index 07d773d4b..a763da971 100644 --- a/src/main/java/net/minecraftforge/fml/server/ServerModLoader.java +++ b/src/main/java/net/minecraftforge/fml/server/ServerModLoader.java @@ -19,10 +19,12 @@ package net.minecraftforge.fml.server; -import net.minecraft.server.dedicated.DedicatedServer; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fml.*; -import net.minecraftforge.fml.network.FMLStatusPing; +import net.minecraftforge.fml.LoadingFailedException; +import net.minecraftforge.fml.LogicalSidedProvider; +import net.minecraftforge.fml.ModLoader; +import net.minecraftforge.fml.ModLoadingWarning; +import net.minecraftforge.fml.SidedProvider; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -33,40 +35,19 @@ import static net.minecraftforge.fml.loading.LogMarkers.LOADING; public class ServerModLoader { private static final Logger LOGGER = LogManager.getLogger(); - private static DedicatedServer server; private static boolean hasErrors = false; - public static void gatherAndInit() { - LanguageHook.loadForgeAndMCLangs(); + public static void load() { SidedProvider.setServer(()-> { throw new IllegalStateException("Unable to access server yet"); }); LogicalSidedProvider.setServer(()-> { throw new IllegalStateException("Unable to access server yet"); }); + LanguageHook.loadForgeAndMCLangs(); try { ModLoader.get().gatherAndInitializeMods(() -> {}); - } catch (LoadingFailedException e) { - ServerModLoader.hasErrors = true; - throw e; - } - } - - public static void begin(DedicatedServer dedicatedServer) { - ServerModLoader.server = dedicatedServer; - SidedProvider.setServer(()->ServerModLoader.server); - LogicalSidedProvider.setServer(()->ServerModLoader.server); - try { ModLoader.get().loadMods(Runnable::run, (a)->{}, (a)->{}); - } catch (LoadingFailedException e) { - ServerModLoader.hasErrors = true; - throw e; - } - } - - - public static void end() { - try { ModLoader.get().finishMods(Runnable::run); } catch (LoadingFailedException e) { ServerModLoader.hasErrors = true; @@ -78,7 +59,6 @@ public class ServerModLoader warnings.forEach(warning -> LOGGER.warn(LOADING, warning.formatToString())); } MinecraftForge.EVENT_BUS.start(); - server.getServerStatusResponse().setForgeData(new FMLStatusPing()); //gathers NetworkRegistry data } public static boolean hasErrors() {