From 2e42d6872548241691e28d913681ff6950a4aba9 Mon Sep 17 00:00:00 2001 From: Unknown Date: Fri, 8 Mar 2019 17:49:29 +0800 Subject: Catch StackOverflow --- .../java/me/shedaniel/rei/client/ScreenHelper.java | 76 ++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/main/java/me/shedaniel/rei/client/ScreenHelper.java (limited to 'src/main/java/me/shedaniel/rei/client/ScreenHelper.java') diff --git a/src/main/java/me/shedaniel/rei/client/ScreenHelper.java b/src/main/java/me/shedaniel/rei/client/ScreenHelper.java new file mode 100644 index 000000000..057f3a4e4 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/client/ScreenHelper.java @@ -0,0 +1,76 @@ +package me.shedaniel.rei.client; + +import com.google.common.collect.Lists; +import me.shedaniel.rei.RoughlyEnoughItemsCore; +import me.shedaniel.rei.gui.ContainerScreenOverlay; +import me.shedaniel.rei.gui.widget.TextFieldWidget; +import me.shedaniel.rei.listeners.ContainerScreenHooks; +import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.event.client.ClientTickCallback; +import net.minecraft.client.gui.ContainerScreen; +import net.minecraft.client.gui.InputListener; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.widget.RecipeBookButtonWidget; +import net.minecraft.item.ItemStack; + +import java.util.List; + +public class ScreenHelper implements ClientModInitializer { + + public static TextFieldWidget searchField; + public static List inventoryStacks = Lists.newArrayList(); + private static boolean overlayVisible = true; + private static ContainerScreenOverlay overlay; + private static ContainerScreen lastContainerScreen; + + public static boolean isOverlayVisible() { + return overlayVisible; + } + + public static void toggleOverlayVisible() { + overlayVisible = !overlayVisible; + } + + public static ContainerScreenOverlay getLastOverlay(boolean reset) { + if (overlay == null || reset) { + overlay = new ContainerScreenOverlay(); + overlay.onInitialized(); + } + return overlay; + } + + public static ContainerScreenOverlay getLastOverlay() { + return getLastOverlay(false); + } + + public static void disableRecipeBook(ContainerScreen lastContainerScreen, List listeners, List buttonWidgets) { + RoughlyEnoughItemsCore.LOGGER.info("%d %d", listeners.size(), buttonWidgets.size()); + for(InputListener listener : listeners) + if (listener instanceof RecipeBookButtonWidget) + listeners.remove(listener); + for(ButtonWidget buttonWidget : buttonWidgets) + if (buttonWidget instanceof RecipeBookButtonWidget) + buttonWidgets.remove(buttonWidget); + } + + public static ContainerScreen getLastContainerScreen() { + return lastContainerScreen; + } + + public static void setLastContainerScreen(ContainerScreen lastContainerScreen) { + ScreenHelper.lastContainerScreen = lastContainerScreen; + } + + public static ContainerScreenHooks getLastContainerScreenHooks() { + return (ContainerScreenHooks) lastContainerScreen; + } + + @Override + public void onInitializeClient() { + ClientTickCallback.EVENT.register(client -> { + if (lastContainerScreen != client.currentScreen && client.currentScreen instanceof ContainerScreen) + lastContainerScreen = (ContainerScreen) client.currentScreen; + }); + } + +} -- cgit