From be7d7ed46e41bed757b020c49f29cce5a67df3d7 Mon Sep 17 00:00:00 2001 From: gnembon Date: Sat, 20 Jun 2020 23:29:50 -0300 Subject: [PATCH] moving loading of scripts to after worlds are loaded, fixes #331 --- src/main/java/carpet/CarpetExtension.java | 11 ++++++++++- src/main/java/carpet/CarpetServer.java | 7 ++++++- .../java/carpet/mixins/MinecraftServer_coreMixin.java | 7 ++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/java/carpet/CarpetExtension.java b/src/main/java/carpet/CarpetExtension.java index 499c6c9e..6e630738 100644 --- a/src/main/java/carpet/CarpetExtension.java +++ b/src/main/java/carpet/CarpetExtension.java @@ -16,11 +16,18 @@ public interface CarpetExtension default void onGameStarted() {} /** - * Runs once per loaded world once the World files / gamerules etc are fully loaded + * Runs once per loaded world once the server / gamerules etc are fully loaded + * but before worlds are loaded * Can be loaded multiple times in SinglePlayer */ default void onServerLoaded(MinecraftServer server) {} + /** + * Runs once per loaded world once the World files are fully loaded + * Can be loaded multiple times in SinglePlayer + */ + default void onServerLoadedWorlds(MinecraftServer server) {} + /** * Runs once per game tick, as a first thing in the tick */ @@ -55,4 +62,6 @@ public interface CarpetExtension default void registerLoggers() {} default Map canHasTranslations(String lang) { return null;} + + } diff --git a/src/main/java/carpet/CarpetServer.java b/src/main/java/carpet/CarpetServer.java index 85b6d31e..57afe91e 100644 --- a/src/main/java/carpet/CarpetServer.java +++ b/src/main/java/carpet/CarpetServer.java @@ -58,12 +58,17 @@ public class CarpetServer // static for now - easier to handle all around the co e.onServerLoaded(server); }); scriptServer = new CarpetScriptServer(server); - scriptServer.loadAllWorldScripts(); MobAI.resetTrackers(); LoggerRegistry.initLoggers(); //TickSpeed.reset(); } + public static void onServerLoadedWorlds(MinecraftServer minecraftServer) + { + extensions.forEach(e -> e.onServerLoadedWorlds(minecraftServer)); + scriptServer.loadAllWorldScripts(); + } + public static void tick(MinecraftServer server) { TickSpeed.tick(server); diff --git a/src/main/java/carpet/mixins/MinecraftServer_coreMixin.java b/src/main/java/carpet/mixins/MinecraftServer_coreMixin.java index b11f9d8c..d1927c4e 100644 --- a/src/main/java/carpet/mixins/MinecraftServer_coreMixin.java +++ b/src/main/java/carpet/mixins/MinecraftServer_coreMixin.java @@ -31,13 +31,18 @@ public abstract class MinecraftServer_coreMixin CarpetServer.tick((MinecraftServer) (Object) this); } - // Dedicated server only @Inject(method = "loadWorld", at = @At("HEAD")) private void serverLoaded(String string_1, String string_2, long long_1, LevelGeneratorType levelGeneratorType_1, JsonElement jsonElement_1, CallbackInfo ci) { CarpetServer.onServerLoaded((MinecraftServer) (Object) this); } + @Inject(method = "loadWorld", at = @At("RETURN")) + private void serverLoadedWorlds(String string_1, String string_2, long long_1, LevelGeneratorType levelGeneratorType_1, JsonElement jsonElement_1, CallbackInfo ci) + { + CarpetServer.onServerLoadedWorlds((MinecraftServer) (Object) this); + } + @Inject(method = "shutdown", at = @At("HEAD")) private void serverClosed(CallbackInfo ci) {