diff --git a/gradle.properties b/gradle.properties index a5841add..89a17e0a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,6 @@ org.gradle.jvmargs=-Xmx1G loader_version=0.14.7 # Mod Properties - mod_version = 1.0.4+1.19 + mod_version = 1.0.5+1.19 maven_group = io.github.bumblesoftware.fastload archives_base_name = Fastload diff --git a/src/main/java/io/github/bumblesoftware/fastload/mixin/DownloadingTerrainScreenMixin.java b/src/main/java/io/github/bumblesoftware/fastload/mixin/DownloadingTerrainScreenMixin.java index a6081ff2..b9b5ef72 100644 --- a/src/main/java/io/github/bumblesoftware/fastload/mixin/DownloadingTerrainScreenMixin.java +++ b/src/main/java/io/github/bumblesoftware/fastload/mixin/DownloadingTerrainScreenMixin.java @@ -17,8 +17,7 @@ public class DownloadingTerrainScreenMixin { @Shadow private boolean closeOnNextTick; @Inject(at = @At("HEAD"), method = "setReady") - public void tick(final CallbackInfo ci) throws InterruptedException { - Thread.sleep(100); + public void tick(final CallbackInfo ci) { this.closeOnNextTick = true; } } diff --git a/src/main/java/io/github/bumblesoftware/fastload/mixin/MinecraftClientMixin.java b/src/main/java/io/github/bumblesoftware/fastload/mixin/MinecraftClientMixin.java index 93baa42e..017502ce 100644 --- a/src/main/java/io/github/bumblesoftware/fastload/mixin/MinecraftClientMixin.java +++ b/src/main/java/io/github/bumblesoftware/fastload/mixin/MinecraftClientMixin.java @@ -4,28 +4,54 @@ import net.minecraft.client.gui.screen.DownloadingTerrainScreen; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.resource.ResourcePackManager; +import net.minecraft.server.SaveLoader; +import net.minecraft.world.level.storage.LevelStorage; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(MinecraftClient.class) public abstract class MinecraftClientMixin { - @ModifyVariable(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;tick()V"), argsOnly = true) - public final boolean render(boolean tick) {return true;} - + //Original code is from 'kennytv, forceloadingscreen'. Code is modified to our needs. @Shadow public void setScreen(@Nullable Screen screen) {} - - @Inject(at = @At("HEAD"), method = "setScreen", cancellable = true) - public void setScreen(final Screen screen, final CallbackInfo ci) throws InterruptedException { + @Inject(method = "setScreen", at = @At("HEAD"), cancellable = true) + private void setScreen(final Screen screen, final CallbackInfo ci) { if (screen instanceof DownloadingTerrainScreen) { - Thread.sleep(400); + render(true); ci.cancel(); setScreen(null); + justLoaded = true; + } + } + @Shadow + private void render(boolean tick) {} + @Inject(method = "startIntegratedServer", at = @At("HEAD")) + private void renderOnStartServer(String levelName, LevelStorage.Session session, ResourcePackManager dataPackManager, SaveLoader saveLoader, CallbackInfo ci) { + render(true); + } + @Shadow + public boolean skipGameRender; + @Shadow private boolean windowFocused; + + @Inject(method = "render", at = @At("HEAD")) + private void setSkipGameRender(boolean tick, CallbackInfo ci) { + skipGameRender = false; + } + private boolean justLoaded; + @Shadow private volatile boolean running; + @Inject(method = "openPauseMenu", at = @At("HEAD"), cancellable = true) + private void cancelOpenPauseMenu(boolean pause, CallbackInfo ci) { + if (windowFocused && justLoaded) { + justLoaded = false; + } + else if (!windowFocused && running && justLoaded) { + ci.cancel(); + justLoaded = false; } } }