diff --git a/gradle.properties b/gradle.properties index 4f2e1e9121..ebe6b57595 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ author = masa mod_file_name = malilib-fabric # Current mod version -mod_version = 0.19.999-sakura.1 +mod_version = 0.19.999-sakura.2 # Minecraft, Fabric Loader and API and mappings versions minecraft_version_out = 1.21 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d64cd49177..e6441136f3 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 48c0a02ca4..b82aa23a4f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/fi/dy/masa/malilib/event/WorldLoadHandler.java b/src/main/java/fi/dy/masa/malilib/event/WorldLoadHandler.java index e22171f88a..2529549ade 100644 --- a/src/main/java/fi/dy/masa/malilib/event/WorldLoadHandler.java +++ b/src/main/java/fi/dy/masa/malilib/event/WorldLoadHandler.java @@ -5,6 +5,8 @@ import javax.annotation.Nullable; import net.minecraft.client.MinecraftClient; import net.minecraft.client.world.ClientWorld; +import net.minecraft.registry.DynamicRegistryManager; +import fi.dy.masa.malilib.MaLiLib; import fi.dy.masa.malilib.config.ConfigManager; import fi.dy.masa.malilib.interfaces.IWorldLoadListener; @@ -50,6 +52,22 @@ public void unregisterWorldLoadPostHandler(IWorldLoadListener listener) this.worldLoadPostHandlers.remove(listener); } + /** + * NOT PUBLIC API - DO NOT CALL + */ + public void onWorldLoadImmutable(DynamicRegistryManager.Immutable immutable) + { + MaLiLib.printDebug("WorldLoadHandler#onWorldLoadImmutable(): Captured Immutable DynamicRegistryManager from SaveLoader"); + + if (this.worldLoadPreHandlers.isEmpty() == false) + { + for (IWorldLoadListener listener : this.worldLoadPreHandlers) + { + listener.onWorldLoadImmutable(immutable); + } + } + } + /** * NOT PUBLIC API - DO NOT CALL */ diff --git a/src/main/java/fi/dy/masa/malilib/interfaces/IWorldLoadListener.java b/src/main/java/fi/dy/masa/malilib/interfaces/IWorldLoadListener.java index 3c4cb6365e..ba504a022f 100644 --- a/src/main/java/fi/dy/masa/malilib/interfaces/IWorldLoadListener.java +++ b/src/main/java/fi/dy/masa/malilib/interfaces/IWorldLoadListener.java @@ -3,9 +3,16 @@ import javax.annotation.Nullable; import net.minecraft.client.MinecraftClient; import net.minecraft.client.world.ClientWorld; +import net.minecraft.registry.DynamicRegistryManager; public interface IWorldLoadListener { + /** + * Called before the IntegratedServer is launched just after the inital reading of the World Save Loader + * @param immutable (Immutable Combined Dynamic Registry Manager) + */ + default void onWorldLoadImmutable(DynamicRegistryManager.Immutable immutable) {} + /** * Called when the client world is going to be changed, * before the reference has been changed diff --git a/src/main/java/fi/dy/masa/malilib/mixin/MixinMinecraftClient.java b/src/main/java/fi/dy/masa/malilib/mixin/MixinMinecraftClient.java index 4691aa962d..c41a2f8416 100644 --- a/src/main/java/fi/dy/masa/malilib/mixin/MixinMinecraftClient.java +++ b/src/main/java/fi/dy/masa/malilib/mixin/MixinMinecraftClient.java @@ -10,6 +10,9 @@ import net.minecraft.client.gui.screen.DownloadingTerrainScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.world.ClientWorld; +import net.minecraft.resource.ResourcePackManager; +import net.minecraft.server.SaveLoader; +import net.minecraft.world.level.storage.LevelStorage; import fi.dy.masa.malilib.event.InitializationHandler; import fi.dy.masa.malilib.event.TickHandler; import fi.dy.masa.malilib.event.WorldLoadHandler; @@ -30,6 +33,14 @@ private void onInitComplete(RunArgs args, CallbackInfo ci) ((InitializationHandler) InitializationHandler.getInstance()).onGameInitDone(); } + @Inject(method = "startIntegratedServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/UserCache;setUseRemote(Z)V", + shift = At.Shift.BEFORE)) + private void onStartIntegratedServer(LevelStorage.Session session, ResourcePackManager dataPackManager, SaveLoader saveLoader, boolean newWorld, CallbackInfo ci) + { + // Capture CombinedDynamicRegistry + ((WorldLoadHandler) WorldLoadHandler.getInstance()).onWorldLoadImmutable(saveLoader.combinedDynamicRegistries().getCombinedRegistryManager()); + } + @Inject(method = "tick()V", at = @At("RETURN")) private void onPostKeyboardInput(CallbackInfo ci) {