From b12bf996dd2b786b9166bd4534bdd3182a078d2f Mon Sep 17 00:00:00 2001 From: shedaniel Date: Mon, 20 Apr 2020 01:29:05 +0800 Subject: Fix endless recursion with item and fluid Signed-off-by: shedaniel --- src/main/java/me/shedaniel/rei/impl/ScreenHelper.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/main/java/me/shedaniel/rei/impl/ScreenHelper.java') diff --git a/src/main/java/me/shedaniel/rei/impl/ScreenHelper.java b/src/main/java/me/shedaniel/rei/impl/ScreenHelper.java index 0b21f6175..f5f836552 100644 --- a/src/main/java/me/shedaniel/rei/impl/ScreenHelper.java +++ b/src/main/java/me/shedaniel/rei/impl/ScreenHelper.java @@ -34,9 +34,9 @@ import me.shedaniel.rei.api.ConfigObject; import me.shedaniel.rei.api.REIHelper; import me.shedaniel.rei.api.widgets.Tooltip; import me.shedaniel.rei.gui.ContainerScreenOverlay; -import me.shedaniel.rei.gui.FailedToLoadScreen; import me.shedaniel.rei.gui.OverlaySearchField; import me.shedaniel.rei.gui.RecipeScreen; +import me.shedaniel.rei.gui.WarningAndErrorScreen; import me.shedaniel.rei.gui.widget.TextFieldWidget; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.event.client.ClientTickCallback; @@ -204,10 +204,15 @@ public class ScreenHelper implements ClientModInitializer, REIHelper { @Override public void onInitializeClient() { ClothClientHooks.SCREEN_INIT_PRE.register((client, screen, screenHooks) -> { - if ((!RoughlyEnoughItemsState.getErrors().isEmpty() || !RoughlyEnoughItemsState.getWarnings().isEmpty()) && !(screen instanceof FailedToLoadScreen)) { - FailedToLoadScreen failedToLoadScreen = FailedToLoadScreen.INSTANCE.get(); - failedToLoadScreen.setParent(screen); - client.openScreen(failedToLoadScreen); + if ((!RoughlyEnoughItemsState.getErrors().isEmpty() || !RoughlyEnoughItemsState.getWarnings().isEmpty()) && !(screen instanceof WarningAndErrorScreen)) { + WarningAndErrorScreen warningAndErrorScreen = WarningAndErrorScreen.INSTANCE.get(); + warningAndErrorScreen.setParent(screen); + try { + if (client.currentScreen != null) client.currentScreen.removed(); + } catch (Throwable ignored) { + } + client.currentScreen = null; + client.openScreen(warningAndErrorScreen); } else if (lastHandledScreen != screen && screen instanceof HandledScreen) lastHandledScreen = (HandledScreen) screen; return ActionResult.PASS; -- cgit