aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java6
-rw-r--r--src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java6
-rw-r--r--src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java11
-rw-r--r--src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java1
-rw-r--r--src/main/java/me/shedaniel/rei/impl/ScreenHelper.java25
5 files changed, 46 insertions, 3 deletions
diff --git a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java
index 664c08a33..f2fb9755f 100644
--- a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java
+++ b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java
@@ -100,6 +100,12 @@ public class RecipeViewingScreen extends Screen {
for (Element element : children())
if (element.keyPressed(int_1, int_2, int_3))
return true;
+ if (int_1 == 259) {
+ if (ScreenHelper.hasLastRecipeScreen())
+ minecraft.openScreen(ScreenHelper.getLastRecipeScreen());
+ else minecraft.openScreen(ScreenHelper.getLastContainerScreen());
+ return true;
+ }
return super.keyPressed(int_1, int_2, int_3);
}
diff --git a/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java
index a2b0e86d8..2489baf0f 100644
--- a/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java
+++ b/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java
@@ -431,6 +431,12 @@ public class VillagerRecipeViewingScreen extends Screen {
for (Element element : children())
if (element.keyPressed(int_1, int_2, int_3))
return true;
+ if (int_1 == 259) {
+ if (ScreenHelper.hasLastRecipeScreen())
+ minecraft.openScreen(ScreenHelper.getLastRecipeScreen());
+ else minecraft.openScreen(ScreenHelper.getLastContainerScreen());
+ return true;
+ }
return super.keyPressed(int_1, int_2, int_3);
}
diff --git a/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java b/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
index 730bcd5b9..952608a66 100644
--- a/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
+++ b/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
@@ -27,6 +27,7 @@ import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.ModContainer;
import net.fabricmc.loader.api.metadata.ModMetadata;
import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen;
import net.minecraft.client.util.InputUtil;
import net.minecraft.item.Item;
@@ -235,12 +236,16 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
@Override
public void openRecipeViewingScreen(Map<RecipeCategory<?>, List<RecipeDisplay>> map) {
+ Screen screen = null;
if (RoughlyEnoughItemsCore.getConfigManager().getConfig().getRecipeScreenType() == RecipeScreenType.VILLAGER)
- MinecraftClient.getInstance().openScreen(new VillagerRecipeViewingScreen(map));
+ screen = new VillagerRecipeViewingScreen(map);
else if (RoughlyEnoughItemsCore.getConfigManager().getConfig().getRecipeScreenType() == RecipeScreenType.UNSET)
- MinecraftClient.getInstance().openScreen(new PreRecipeViewingScreen(map));
+ screen = new PreRecipeViewingScreen(map);
else
- MinecraftClient.getInstance().openScreen(new RecipeViewingScreen(map));
+ screen = new RecipeViewingScreen(map);
+ if (MinecraftClient.getInstance().currentScreen instanceof VillagerRecipeViewingScreen || MinecraftClient.getInstance().currentScreen instanceof RecipeViewingScreen)
+ ScreenHelper.storeRecipeScreen(MinecraftClient.getInstance().currentScreen);
+ MinecraftClient.getInstance().openScreen(screen);
}
@Override
diff --git a/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java b/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java
index 9bbdf1ed1..1501d1355 100644
--- a/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java
+++ b/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java
@@ -218,6 +218,7 @@ public class RecipeHelperImpl implements RecipeHelper {
@SuppressWarnings("deprecation")
public void recipesLoaded(RecipeManager recipeManager) {
+ ScreenHelper.clearRecipeScreens();
this.recipeCount.set(0);
this.recipeManager = recipeManager;
this.recipeCategoryListMap.clear();
diff --git a/src/main/java/me/shedaniel/rei/impl/ScreenHelper.java b/src/main/java/me/shedaniel/rei/impl/ScreenHelper.java
index 9a1feba0d..915dbb604 100644
--- a/src/main/java/me/shedaniel/rei/impl/ScreenHelper.java
+++ b/src/main/java/me/shedaniel/rei/impl/ScreenHelper.java
@@ -5,7 +5,9 @@
package me.shedaniel.rei.impl;
+import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
import me.shedaniel.cloth.hooks.ClothClientHooks;
import me.shedaniel.rei.RoughlyEnoughItemsCore;
import me.shedaniel.rei.gui.ContainerScreenOverlay;
@@ -14,12 +16,14 @@ import me.shedaniel.rei.listeners.ContainerScreenHooks;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.event.client.ClientTickCallback;
import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ingame.AbstractContainerScreen;
import net.minecraft.client.util.Window;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ActionResult;
import org.apache.logging.log4j.util.TriConsumer;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Optional;
@@ -30,6 +34,27 @@ public class ScreenHelper implements ClientModInitializer {
private static boolean overlayVisible = true;
private static ContainerScreenOverlay overlay;
private static AbstractContainerScreen<?> lastContainerScreen = null;
+ private static LinkedHashSet<Screen> lastRecipeScreen = Sets.newLinkedHashSetWithExpectedSize(5);
+
+ public static void storeRecipeScreen(Screen screen) {
+ while (lastRecipeScreen.size() >= 5)
+ lastRecipeScreen.remove(0);
+ lastRecipeScreen.add(screen);
+ }
+
+ public static boolean hasLastRecipeScreen() {
+ return !lastRecipeScreen.isEmpty();
+ }
+
+ public static Screen getLastRecipeScreen() {
+ Screen screen = Iterables.getLast(lastRecipeScreen);
+ lastRecipeScreen.remove(screen);
+ return screen;
+ }
+
+ public static void clearRecipeScreens() {
+ lastRecipeScreen.clear();
+ }
public static boolean isOverlayVisible() {
return overlayVisible;