From 594fbe6f7901f39239e362b14d0d3c8aae46b75f Mon Sep 17 00:00:00 2001 From: slprime <31038811+slprime@users.noreply.github.com> Date: Wed, 6 Aug 2025 20:40:52 +0300 Subject: [PATCH] Allowed fill crafting grid without all ingredients (#693) --- .../nei/recipe/DefaultOverlayHandler.java | 18 ++++++++++-------- .../nei/recipe/GuiOverlayButton.java | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/java/codechicken/nei/recipe/DefaultOverlayHandler.java b/src/main/java/codechicken/nei/recipe/DefaultOverlayHandler.java index 10753dc5..5d1041db 100644 --- a/src/main/java/codechicken/nei/recipe/DefaultOverlayHandler.java +++ b/src/main/java/codechicken/nei/recipe/DefaultOverlayHandler.java @@ -82,21 +82,20 @@ public class DefaultOverlayHandler implements IOverlayHandler { assignIngredSlots(gui, ingredients, assignedIngredients); multiplier = Math.min(multiplier == 0 ? 64 : multiplier, calculateRecipeQuantity(assignedIngredients)); - if (multiplier != 0) { - moveIngredients(gui, assignedIngredients, (int) multiplier); - } + moveIngredients(gui, assignedIngredients, Math.max(1, multiplier)); - return multiplier; + return assignedIngredients.stream().anyMatch(distrib -> distrib.distrib.distributed == 0) ? 0 : multiplier; } @Override public boolean canFillCraftingGrid(GuiContainer firstGui, IRecipeHandler handler, int recipeIndex) { - return presenceOverlay(firstGui, handler, recipeIndex).stream().allMatch(state -> state.isPresent()); + return true; } @Override public boolean canCraft(GuiContainer firstGui, IRecipeHandler handler, int recipeIndex) { - return canFillCraftingGrid(firstGui, handler, recipeIndex); + return canFillCraftingGrid(firstGui, handler, recipeIndex) + && presenceOverlay(firstGui, handler, recipeIndex).stream().allMatch(state -> state.isPresent()); } @Override @@ -227,6 +226,7 @@ public class DefaultOverlayHandler implements IOverlayHandler { for (IngredientDistribution distrib : assignedIngredients) { final DistributedIngred istack = distrib.distrib; + if (istack.distributed == 0) continue; if (istack.numSlots == 0) return 0; final int maxStackSize = istack.stack.getMaxStackSize(); @@ -318,8 +318,10 @@ public class DefaultOverlayHandler implements IOverlayHandler { } } - if (biggestIngred == null) // not enough ingreds - return null; + if (biggestIngred == null) { + biggestIngred = new DistributedIngred(posstack.item); + permutation = InventoryUtils.copyStack(posstack.item, 0); + } biggestIngred.distributed += permutation.stackSize; assignedIngredients.add(new IngredientDistribution(biggestIngred, permutation)); diff --git a/src/main/java/codechicken/nei/recipe/GuiOverlayButton.java b/src/main/java/codechicken/nei/recipe/GuiOverlayButton.java index 96797041..cce62496 100644 --- a/src/main/java/codechicken/nei/recipe/GuiOverlayButton.java +++ b/src/main/java/codechicken/nei/recipe/GuiOverlayButton.java @@ -171,7 +171,7 @@ public class GuiOverlayButton extends GuiRecipeButton { DrawableResource icon = ICON_OVERLAY; if (this.hasOverlay && (!this.requireShiftForOverlayRecipe || NEIClientUtils.shiftKey())) { - icon = canFillCraftingGrid() ? ICON_FILL : ICON_FILL_ERROR; + icon = this.missedMaterialsTooltipLineHandler == null ? ICON_FILL : ICON_FILL_ERROR; } final int iconX = this.xPosition + (this.width - icon.width - 1) / 2;