Skip to content

Commit

Permalink
Merge pull request #2 from BumbleSoftware/testing
Browse files Browse the repository at this point in the history
Added some new features and bugfixes for force close loading screen.
  • Loading branch information
StockiesLad authored Jun 12, 2022
2 parents 757fcf5 + 4ff7f8f commit 720a4c3
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 11 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
}

0 comments on commit 720a4c3

Please sign in to comment.