SetScreen mixin

This commit is contained in:
2026-02-20 18:11:58 +01:00
parent 039d2cd032
commit eb40903372
@@ -4,8 +4,7 @@ import org.saturnclient.saturnclient.SaturnClientConfig;
import org.saturnclient.ui2.screens.TitleMenu; import org.saturnclient.ui2.screens.TitleMenu;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; 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;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
@@ -13,23 +12,15 @@ import net.minecraft.client.gui.screen.TitleScreen;
@Mixin(MinecraftClient.class) @Mixin(MinecraftClient.class)
public class SetScreenMixin { public class SetScreenMixin {
@ModifyVariable(method = "setScreen", at = @At("HEAD"), argsOnly = true)
private boolean replacingScreen = false; private Screen replaceTitleScreen(Screen screen) {
if (SaturnClientConfig.saturnTitleScreen.value) {
@Inject(method = "setScreen", at = @At("HEAD"), cancellable = true) if (screen instanceof TitleScreen)
private void onSetScreen(Screen screen, CallbackInfo ci) { return new TitleMenu();
if (replacingScreen) if (screen == null && ((MinecraftClient) (Object) this).world == null)
return; return new TitleMenu();
@SuppressWarnings("resource") // False positive bc MinecraftClient has close()
MinecraftClient client = ((MinecraftClient) (Object) this);
if (SaturnClientConfig.saturnTitleScreen.value
&& ((screen == null && client.world == null) || screen instanceof TitleScreen)) {
replacingScreen = true;
client.setScreen(new TitleMenu());
ci.cancel();
replacingScreen = false;
} }
return screen;
} }
} }