diff --git a/common/src/main/java/dev/architectury/event/events/client/ClientLifecycleEvent.java b/common/src/main/java/dev/architectury/event/events/client/ClientLifecycleEvent.java index 742589fa..34378d04 100644 --- a/common/src/main/java/dev/architectury/event/events/client/ClientLifecycleEvent.java +++ b/common/src/main/java/dev/architectury/event/events/client/ClientLifecycleEvent.java @@ -48,6 +48,10 @@ public interface ClientLifecycleEvent { * Invoked once client setup has begun. *

This happens during {@code FMLClientSetupEvent} on Forge, * or when Architectury API's client entrypoint initialises on Fabric. + *

+ * Registries should have been initialised by this point, but there + * are no such guarantees, as you can modify the registry beyond this point + * on non-Forge environments. */ Event CLIENT_SETUP = EventFactory.createLoop(); diff --git a/common/src/main/java/dev/architectury/event/events/common/LifecycleEvent.java b/common/src/main/java/dev/architectury/event/events/common/LifecycleEvent.java index 8a7ed49a..1bdf461e 100644 --- a/common/src/main/java/dev/architectury/event/events/common/LifecycleEvent.java +++ b/common/src/main/java/dev/architectury/event/events/common/LifecycleEvent.java @@ -88,6 +88,16 @@ public interface LifecycleEvent { * @see ServerLevelState#act(Level) */ Event SERVER_LEVEL_SAVE = EventFactory.createLoop(); + /** + * Invoked once common setup has begun. + *

This happens during {@code FMLCommonSetupEvent} on Forge, + * or when Architectury API's client/server entrypoint initialises on Fabric. + *

+ * Registries should have been initialised by this point, but there + * are no such guarantees, as you can modify the registry beyond this point + * on non-Forge environments. + */ + Event SETUP = EventFactory.createLoop(); interface InstanceState { /** diff --git a/fabric/src/main/java/dev/architectury/init/fabric/ArchitecturyClient.java b/fabric/src/main/java/dev/architectury/init/fabric/ArchitecturyClient.java index b7ad19a8..5024fc02 100644 --- a/fabric/src/main/java/dev/architectury/init/fabric/ArchitecturyClient.java +++ b/fabric/src/main/java/dev/architectury/init/fabric/ArchitecturyClient.java @@ -20,11 +20,13 @@ package dev.architectury.init.fabric; import dev.architectury.event.events.client.ClientLifecycleEvent; +import dev.architectury.event.events.common.LifecycleEvent; import dev.architectury.networking.fabric.SpawnEntityPacket; import net.minecraft.client.Minecraft; public class ArchitecturyClient { public static void init() { + LifecycleEvent.SETUP.invoker().run(); ClientLifecycleEvent.CLIENT_SETUP.invoker().stateChanged(Minecraft.getInstance()); SpawnEntityPacket.Client.register(); diff --git a/fabric/src/main/java/dev/architectury/init/fabric/ArchitecturyServer.java b/fabric/src/main/java/dev/architectury/init/fabric/ArchitecturyServer.java new file mode 100644 index 00000000..7f932d12 --- /dev/null +++ b/fabric/src/main/java/dev/architectury/init/fabric/ArchitecturyServer.java @@ -0,0 +1,28 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021 architectury + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package dev.architectury.init.fabric; + +import dev.architectury.event.events.common.LifecycleEvent; + +public class ArchitecturyServer { + public static void init() { + LifecycleEvent.SETUP.invoker().run(); + } +} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index acf3dc41..80d7fd9e 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -22,6 +22,9 @@ "main": [ "dev.architectury.utils.fabric.GameInstanceImpl::init" ], + "server": [ + "dev.architectury.init.fabric.ArchitecturyServer::init" + ], "client": [ "dev.architectury.init.fabric.ArchitecturyClient::init" ], diff --git a/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplCommon.java b/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplCommon.java index f331469e..1a307c10 100644 --- a/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplCommon.java +++ b/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplCommon.java @@ -59,6 +59,7 @@ import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.LogicalSide; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.server.ServerLifecycleHooks; public class EventHandlerImplCommon { @@ -423,6 +424,9 @@ public class EventHandlerImplCommon { } public static class ModBasedEventHandler { - + @SubscribeEvent(priority = EventPriority.HIGH) + public static void event(FMLCommonSetupEvent event) { + LifecycleEvent.SETUP.invoker().run(); + } } }