diff --git a/fabric/src/main/java/com/vaporvee/loadsupport/mixin/MinecraftPauseMixin.java b/fabric/src/main/java/com/vaporvee/loadsupport/mixin/MinecraftPauseMixin.java new file mode 100644 index 0000000..93e7083 --- /dev/null +++ b/fabric/src/main/java/com/vaporvee/loadsupport/mixin/MinecraftPauseMixin.java @@ -0,0 +1,24 @@ +package com.vaporvee.loadsupport.mixin; + +import com.vaporvee.loadsupport.Allocated; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.Minecraft; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Environment(EnvType.CLIENT) +@Mixin(Minecraft.class) +public class MinecraftPauseMixin { + @Inject(method = "run", at = @At("HEAD"), cancellable = true) + private void onRunHead(CallbackInfo ci) { + if (!Allocated.enoughMemory) { + while (Allocated.isWindowOpen()) { + try { Thread.sleep(100); } catch (InterruptedException ignored) {} + } + ci.cancel(); + } + } +} diff --git a/fabric/src/main/java/com/vaporvee/loadsupport/mixin/MixinTitleScreen.java b/fabric/src/main/java/com/vaporvee/loadsupport/mixin/MixinTitleScreen.java deleted file mode 100644 index ec73678..0000000 --- a/fabric/src/main/java/com/vaporvee/loadsupport/mixin/MixinTitleScreen.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.vaporvee.loadsupport.mixin; - -import com.vaporvee.loadsupport.Constants; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.TitleScreen; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(TitleScreen.class) -public class MixinTitleScreen { - - @Inject(at = @At("HEAD"), method = "init()V") - private void init(CallbackInfo info) { - - } -} \ No newline at end of file diff --git a/fabric/src/main/java/com/vaporvee/loadsupport/mixin/WindowHideMixin.java b/fabric/src/main/java/com/vaporvee/loadsupport/mixin/WindowHideMixin.java new file mode 100644 index 0000000..e075b7c --- /dev/null +++ b/fabric/src/main/java/com/vaporvee/loadsupport/mixin/WindowHideMixin.java @@ -0,0 +1,26 @@ +package com.vaporvee.loadsupport.mixin; + +import com.mojang.blaze3d.platform.DisplayData; +import com.mojang.blaze3d.platform.ScreenManager; +import com.mojang.blaze3d.platform.Window; +import com.mojang.blaze3d.platform.WindowEventHandler; +import com.vaporvee.loadsupport.Allocated; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import org.lwjgl.glfw.GLFW; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Environment(EnvType.CLIENT) +@Mixin(Window.class) +public class WindowHideMixin { + @Inject(method = "", at = @At("RETURN")) + private void onWindowInit(WindowEventHandler eventHandler, ScreenManager screenManager, DisplayData displayData, String preferredFullscreenVideoMode, String title, CallbackInfo ci) { + if (!Allocated.enoughMemory) { + long w = ((Window)(Object)this).getWindow(); + GLFW.glfwHideWindow(w); + } + } +} diff --git a/fabric/src/main/resources/loadsupport.fabric.mixins.json b/fabric/src/main/resources/loadsupport.fabric.mixins.json index 619a6f7..e3e5de3 100644 --- a/fabric/src/main/resources/loadsupport.fabric.mixins.json +++ b/fabric/src/main/resources/loadsupport.fabric.mixins.json @@ -6,7 +6,8 @@ "compatibilityLevel": "JAVA_21", "mixins": [], "client": [ - "MixinTitleScreen" + "MinecraftPauseMixin", + "WindowHideMixin" ], "server": [], "injectors": {