mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-13 16:54:22 +00:00
Reorganize modloading on the dediserver. This removes the DedicatedServer parameter from the FMLDedicatedServerSetupEvent.
Code for customizing the server instance should be moved to the ServerAboutToStartEvent or similar, where the server instance is available. This reorganization means that mods will load fully before the server is even constructed, or the server properties loaded. We also move the EULA right to the front so we don't have to wait for bootstrap. This should fix the problems with mods which customize world data and other things. Signed-off-by: cpw <cpw+github@weeksfamily.ca>
This commit is contained in:
6 files changed
+62
-74
No files matched your search
@@ -40,7 +40,7 @@ public enum SidedProvider
|
||||
()-> { throw new UnsupportedOperationException(); }),
|
||||
SIDED_SETUP_EVENT(
|
||||
(Function<Supplier<Minecraft>, Function<ModContainer, Event>>)c-> mc->new FMLClientSetupEvent(c, mc),
|
||||
s-> mc->new FMLDedicatedServerSetupEvent(s, mc),
|
||||
s-> mc->new FMLDedicatedServerSetupEvent(mc),
|
||||
()-> { throw new UnsupportedOperationException(); }),
|
||||
STRIPCHARS(
|
||||
(Function<Supplier<Minecraft>, Function<String, String>>)c-> ClientHooks::stripSpecialChars,
|
||||
|
||||
+5
-9
@@ -36,20 +36,16 @@ import java.util.function.Supplier;
|
||||
*
|
||||
* Do dedicated server specific activities with this event.
|
||||
*
|
||||
* <em>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</em>
|
||||
*
|
||||
* This is a parallel dispatch event.
|
||||
*/
|
||||
public class FMLDedicatedServerSetupEvent extends ModLifecycleEvent
|
||||
{
|
||||
private final Supplier<DedicatedServer> serverSupplier;
|
||||
|
||||
public FMLDedicatedServerSetupEvent(Supplier<DedicatedServer> server, ModContainer container)
|
||||
public FMLDedicatedServerSetupEvent(ModContainer container)
|
||||
{
|
||||
super(container);
|
||||
this.serverSupplier = server;
|
||||
}
|
||||
|
||||
public Supplier<DedicatedServer> getServerSupplier()
|
||||
{
|
||||
return serverSupplier;
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in new issue
Block a user