SetScreen mixin
This commit is contained in:
@@ -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 Screen replaceTitleScreen(Screen screen) {
|
||||||
|
if (SaturnClientConfig.saturnTitleScreen.value) {
|
||||||
|
if (screen instanceof TitleScreen)
|
||||||
|
return new TitleMenu();
|
||||||
|
if (screen == null && ((MinecraftClient) (Object) this).world == null)
|
||||||
|
return new TitleMenu();
|
||||||
|
}
|
||||||
|
|
||||||
private boolean replacingScreen = false;
|
return screen;
|
||||||
|
|
||||||
@Inject(method = "setScreen", at = @At("HEAD"), cancellable = true)
|
|
||||||
private void onSetScreen(Screen screen, CallbackInfo ci) {
|
|
||||||
if (replacingScreen)
|
|
||||||
return;
|
|
||||||
|
|
||||||
@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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user