diff --git a/src/main/java/com/minecolonies/core/client/gui/containers/WindowCrafting.java b/src/main/java/com/minecolonies/core/client/gui/containers/WindowCrafting.java index b31c381b2f3..dab8dbe6fce 100755 --- a/src/main/java/com/minecolonies/core/client/gui/containers/WindowCrafting.java +++ b/src/main/java/com/minecolonies/core/client/gui/containers/WindowCrafting.java @@ -25,15 +25,13 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Consumer; import static com.minecolonies.api.util.constant.Constants.MOD_ID; import static com.minecolonies.api.util.constant.TranslationConstants.WARNING_MAXIMUM_NUMBER_RECIPES; -import static com.minecolonies.api.util.constant.WindowConstants.*; +import static com.minecolonies.api.util.constant.WindowConstants.CRAFTING_SWITCH_SIZE; +import static com.minecolonies.api.util.constant.WindowConstants.CRAFTING_SWITCH_TEXTURE; import static com.minecolonies.api.util.constant.translation.BaseGameTranslationConstants.BASE_GUI_DONE; /** @@ -126,8 +124,8 @@ public class WindowCrafting extends AbstractContainerScreen */ private ImageButton switchButton; - @Nullable public static Consumer JEI_REQUEST_HOOK; - private final Map, ItemStack> requestables = new HashMap<>(); + @Nullable public static Consumer> JEI_REQUEST_HOOK; + private final Map, List> requestables = new HashMap<>(); /** * Create a crafting gui window. @@ -204,12 +202,9 @@ private boolean matchingRequest(@NotNull final IRequest request) if (request.getRequest() instanceof IConcreteDeliverable deliverable) { - for (final ItemStack stack : deliverable.getRequestedItems()) - { - // todo filter? - requestables.put(request, stack); - return true; - } + // todo filter? + requestables.put(request, deliverable.getRequestedItems()); + return true; } return false; } @@ -218,10 +213,10 @@ private void reopenWithRequest(@Nullable final IRequest request) { minecraft.setScreen(this); - final ItemStack stack = requestables.getOrDefault(request, ItemStack.EMPTY); - if (!stack.isEmpty() && JEI_REQUEST_HOOK != null) + final List stacks = requestables.getOrDefault(request, new ArrayList<>()); + if (!stacks.isEmpty() && JEI_REQUEST_HOOK != null) { - JEI_REQUEST_HOOK.accept(stack); + JEI_REQUEST_HOOK.accept(stacks); } } diff --git a/src/main/java/com/minecolonies/core/client/gui/containers/WindowFurnaceCrafting.java b/src/main/java/com/minecolonies/core/client/gui/containers/WindowFurnaceCrafting.java index 49f4cb5a0a4..cfea104ae5d 100755 --- a/src/main/java/com/minecolonies/core/client/gui/containers/WindowFurnaceCrafting.java +++ b/src/main/java/com/minecolonies/core/client/gui/containers/WindowFurnaceCrafting.java @@ -84,7 +84,7 @@ public class WindowFurnaceCrafting extends AbstractContainerScreen, ItemStack> requestables = new HashMap<>(); + private final Map, List> requestables = new HashMap<>(); /** * Create a crafting gui window. @@ -156,12 +156,9 @@ private boolean matchingRequest(@NotNull final IRequest request) if (request.getRequest() instanceof IConcreteDeliverable deliverable) { - for (final ItemStack stack : deliverable.getRequestedItems()) - { - // todo filter? - requestables.put(request, stack); - return true; - } + // todo filter? + requestables.put(request, deliverable.getRequestedItems()); + return true; } return false; } @@ -170,10 +167,10 @@ private void reopenWithRequest(@Nullable final IRequest request) { minecraft.setScreen(this); - final ItemStack stack = requestables.getOrDefault(request, ItemStack.EMPTY); - if (!stack.isEmpty() && WindowCrafting.JEI_REQUEST_HOOK != null) + final List stacks = requestables.getOrDefault(request, new ArrayList<>()); + if (!stacks.isEmpty() && WindowCrafting.JEI_REQUEST_HOOK != null) { - WindowCrafting.JEI_REQUEST_HOOK.accept(stack); + WindowCrafting.JEI_REQUEST_HOOK.accept(stacks); } } diff --git a/src/main/java/com/minecolonies/core/compatibility/jei/JEIPlugin.java b/src/main/java/com/minecolonies/core/compatibility/jei/JEIPlugin.java index 20ea35d5c68..20a4ed01ed6 100644 --- a/src/main/java/com/minecolonies/core/compatibility/jei/JEIPlugin.java +++ b/src/main/java/com/minecolonies/core/compatibility/jei/JEIPlugin.java @@ -23,6 +23,7 @@ import mezz.jei.api.helpers.IJeiHelpers; import mezz.jei.api.helpers.IModIdHelper; import mezz.jei.api.recipe.IFocus; +import mezz.jei.api.recipe.IFocusFactory; import mezz.jei.api.recipe.RecipeIngredientRole; import mezz.jei.api.recipe.RecipeType; import mezz.jei.api.registration.*; @@ -45,7 +46,7 @@ public class JEIPlugin implements IModPlugin { public JEIPlugin() { - WindowCrafting.JEI_REQUEST_HOOK = this::showOutputStack; + WindowCrafting.JEI_REQUEST_HOOK = this::showOutputStacks; } @NotNull @@ -212,12 +213,15 @@ public void onRuntimeUnavailable() this.jei = null; } - private void showOutputStack(@NotNull final ItemStack stack) + private void showOutputStacks(@NotNull final List stacks) { - if (this.jei != null) + if (this.jei != null && !stacks.isEmpty()) { - final IFocus focus = this.jei.getJeiHelpers().getFocusFactory().createFocus(RecipeIngredientRole.OUTPUT, VanillaTypes.ITEM_STACK, stack); - this.jei.getRecipesGui().show(focus); + final IFocusFactory focusFactory = this.jei.getJeiHelpers().getFocusFactory(); + final List> focuses = stacks.stream() + .>map(stack -> focusFactory.createFocus(RecipeIngredientRole.OUTPUT, VanillaTypes.ITEM_STACK, stack)) + .toList(); + this.jei.getRecipesGui().show(focuses); } } }