diff --git a/src/main/java/codechicken/nei/BookmarkPanel.java b/src/main/java/codechicken/nei/BookmarkPanel.java index a58a61db..9b787716 100644 --- a/src/main/java/codechicken/nei/BookmarkPanel.java +++ b/src/main/java/codechicken/nei/BookmarkPanel.java @@ -207,11 +207,11 @@ public class BookmarkPanel extends PanelWidget { return false; } - public boolean addRecipe(Recipe recipe, int groupId) { + public boolean addRecipe(Recipe recipe, int multiplier, int groupId) { final RecipeId recipeId = recipe.getRecipeId(); if (recipe != null && this.grid.getGroup(groupId) != null && !this.grid.existsRecipe(recipeId, groupId)) { - this.grid.addRecipe(recipe, groupId); + this.grid.addRecipe(recipe, multiplier, groupId); return true; } @@ -234,7 +234,7 @@ public class BookmarkPanel extends PanelWidget { if (item instanceof Recipe recipe) { if (uniqueRecipe.add(recipe.getRecipeId())) { - this.grid.addRecipe(recipe, groupId); + this.grid.addRecipe(recipe, 1, groupId); } } else if (item instanceof RecipeId recipeId) { @@ -1202,7 +1202,10 @@ public class BookmarkPanel extends PanelWidget { && !handlerName.isEmpty() && ingredients != null && !ingredients.isEmpty()) { - addRecipe(Recipe.of(Arrays.asList(stack), handlerName, ingredients), BookmarkGrid.DEFAULT_GROUP_ID); + addRecipe( + Recipe.of(Arrays.asList(stack), handlerName, ingredients), + saveSize ? 1 : 0, + BookmarkGrid.DEFAULT_GROUP_ID); } else { addItem(stack, saveSize); } @@ -1216,7 +1219,7 @@ public class BookmarkPanel extends PanelWidget { @Deprecated public void addRecipe(BookmarkRecipe recipe, boolean saveSize, int groupId) { - addRecipe(recipe.getRecipe(), groupId); + addRecipe(recipe.getRecipe(), saveSize ? 1 : 0, groupId); } @Deprecated diff --git a/src/main/java/codechicken/nei/api/ShortcutInputHandler.java b/src/main/java/codechicken/nei/api/ShortcutInputHandler.java index aa36b4fa..daab54d6 100644 --- a/src/main/java/codechicken/nei/api/ShortcutInputHandler.java +++ b/src/main/java/codechicken/nei/api/ShortcutInputHandler.java @@ -263,7 +263,8 @@ public abstract class ShortcutInputHandler { recipe.getIngredients()); singleRecipe.setCustomRecipeId(recipe.getRecipeId()); - ItemPanels.bookmarkPanel.addRecipe(singleRecipe, BookmarkGrid.DEFAULT_GROUP_ID); + ItemPanels.bookmarkPanel + .addRecipe(singleRecipe, saveStackSize ? 1 : 0, BookmarkGrid.DEFAULT_GROUP_ID); } } else { @@ -421,6 +422,10 @@ public abstract class ShortcutInputHandler { } if (recipeId != null) { + hotkeys.put( + NEIClientConfig + .getKeyName("gui.bookmark", NEIClientUtils.SHIFT_HASH + NEIClientUtils.CTRL_HASH), + NEIClientUtils.translate("bookmark.add_item_with_recipe_and_count")); hotkeys.put( NEIClientConfig.getKeyName("gui.bookmark", NEIClientUtils.SHIFT_HASH), NEIClientUtils.translate("bookmark.add_item_with_recipe")); diff --git a/src/main/java/codechicken/nei/bookmark/BookmarkGrid.java b/src/main/java/codechicken/nei/bookmark/BookmarkGrid.java index dee644b5..31228d0a 100644 --- a/src/main/java/codechicken/nei/bookmark/BookmarkGrid.java +++ b/src/main/java/codechicken/nei/bookmark/BookmarkGrid.java @@ -866,7 +866,7 @@ public class BookmarkGrid extends ItemsGrid results = recipe.getResults().stream().map(res -> res.getItemStack()) .collect(Collectors.toList()); @@ -874,15 +874,19 @@ public class BookmarkGrid extends ItemsGrid 0 && outputRecipes.stream().anyMatch(recipeId -> item.equalsRecipe(recipeId, targetGroupId))) { final long multiplier = recipeMultipliers.getOrDefault(item.recipeId, (long) Integer.MAX_VALUE); - final boolean isOutputRecipe = group.crafting != null - && !group.crafting.recipeInMiddle.contains(item.recipeId); + final boolean recipeInMiddle = group.crafting != null + && group.crafting.recipeInMiddle.contains(item.recipeId); recipeMultipliers.put( item.recipeId, Math.min( shiftMultiplier( - Math.max(isOutputRecipe ? 1 : 0, item.getMultiplier()), + Math.max(recipeInMiddle ? 1 : 0, item.getMultiplier()), shift, - isOutputRecipe ? 1 : 0), + recipeInMiddle ? 1 : 0), multiplier)); items.add(item); } @@ -1148,16 +1152,16 @@ public class BookmarkGrid extends ItemsGrid 0) { multiplier = Math.min( shiftMultiplier( - Math.max(isOutputRecipe ? 1 : 0, item.getMultiplier()), + Math.max(recipeInMiddle ? 1 : 0, item.getMultiplier()), shift, - isOutputRecipe ? 1 : 0), + recipeInMiddle ? 1 : 0), multiplier); } } diff --git a/src/main/java/codechicken/nei/bookmark/RecipeChainDetails.java b/src/main/java/codechicken/nei/bookmark/RecipeChainDetails.java index 445ff145..c24e497a 100644 --- a/src/main/java/codechicken/nei/bookmark/RecipeChainDetails.java +++ b/src/main/java/codechicken/nei/bookmark/RecipeChainDetails.java @@ -179,9 +179,10 @@ public class RecipeChainDetails { if (itemIndex >= 0 && this.calculatedItems.containsKey(itemIndex)) { final BookmarkItem item = entry.getValue(); if (this.recipeInMiddle.contains(item.recipeId)) { - this.calculatedItems.get(itemIndex).setRealAmount(item.amount); + this.calculatedItems.get(itemIndex) + .setRealAmount(Math.max(0, item.factor * (item.getMultiplier() - 1))); } else { - this.calculatedItems.get(itemIndex).setRealAmount(Math.max(item.factor, item.amount)); + this.calculatedItems.get(itemIndex).setRealAmount(item.amount); } } } diff --git a/src/main/java/codechicken/nei/recipe/GuiOverlayButton.java b/src/main/java/codechicken/nei/recipe/GuiOverlayButton.java index cce62496..31fdbc9b 100644 --- a/src/main/java/codechicken/nei/recipe/GuiOverlayButton.java +++ b/src/main/java/codechicken/nei/recipe/GuiOverlayButton.java @@ -155,6 +155,10 @@ public class GuiOverlayButton extends GuiRecipeButton { NEIClientConfig.getKeyName("gui.bookmark", NEIClientUtils.SHIFT_HASH), NEIClientUtils.translate("recipe.overlay.bookmarkRecipe")); + hotkeys.put( + NEIClientConfig.getKeyName("gui.bookmark", NEIClientUtils.SHIFT_HASH + NEIClientUtils.CTRL_HASH), + NEIClientUtils.translate("recipe.overlay.bookmarkRecipeAndCount")); + return hotkeys; } @@ -309,7 +313,8 @@ public class GuiOverlayButton extends GuiRecipeButton { final Recipe recipe = getRecipe(); if (!ItemPanels.bookmarkPanel.removeRecipe(recipe.getRecipeId(), BookmarkGrid.DEFAULT_GROUP_ID)) { - ItemPanels.bookmarkPanel.addRecipe(recipe, BookmarkGrid.DEFAULT_GROUP_ID); + ItemPanels.bookmarkPanel + .addRecipe(recipe, NEIClientUtils.controlKey() ? 1 : 0, BookmarkGrid.DEFAULT_GROUP_ID); } } diff --git a/src/main/java/codechicken/nei/recipe/chain/RecipeChainMath.java b/src/main/java/codechicken/nei/recipe/chain/RecipeChainMath.java index 2c672db3..cb3bbec9 100644 --- a/src/main/java/codechicken/nei/recipe/chain/RecipeChainMath.java +++ b/src/main/java/codechicken/nei/recipe/chain/RecipeChainMath.java @@ -116,18 +116,18 @@ public class RecipeChainMath { } for (Map.Entry entry : multipliers.entrySet()) { - if (!this.outputRecipes.containsKey(entry.getKey()) && this.preferredItems.values().stream() - .noneMatch(resItem -> resItem.recipeId.equals(entry.getKey()))) { - this.outputRecipes.put(entry.getKey(), entry.getValue()); + final RecipeId recipeId = entry.getKey(); + final boolean isOutputRecipe = this.outputRecipes.containsKey(recipeId); + final boolean recipeInMiddle = this.preferredItems.values().stream() + .anyMatch(resItem -> resItem.recipeId.equals(recipeId)); + + if (!isOutputRecipe && !recipeInMiddle) { + this.outputRecipes.put(recipeId, entry.getValue()); + } else if (isOutputRecipe && recipeInMiddle) { + this.outputRecipes.put(recipeId, Math.max(0, entry.getValue() - 1)); } } - for (Map.Entry entry : this.outputRecipes.entrySet()) { - if (entry.getValue() == 0 && this.preferredItems.values().stream() - .noneMatch(prefItem -> prefItem.recipeId.equals(entry.getKey()))) { - entry.setValue(1L); - } - } } private void collectPreferredItems(RecipeId recipeId, Map preferredItems, diff --git a/src/main/resources/assets/nei/lang/en_US.lang b/src/main/resources/assets/nei/lang/en_US.lang index 2c0c9750..59e4caa0 100644 --- a/src/main/resources/assets/nei/lang/en_US.lang +++ b/src/main/resources/assets/nei/lang/en_US.lang @@ -37,6 +37,7 @@ nei.bookmark.remove_recipe=Remove Recipe nei.bookmark.remove_item=Remove Item nei.bookmark.add_item=Add Bookmark nei.bookmark.add_item_with_recipe=Add Bookmark with Recipe +nei.bookmark.add_item_with_recipe_and_count=Add Bookmark with Recipe & Count nei.bookmark.add_item_with_count=Add Bookmark with Count nei.bookmark.change_quantity=Change Quantity nei.bookmark.change_quantity_step=Change Quantity with Multiplier @@ -174,8 +175,6 @@ nei.options.keys.gui.prev_machine=Prev Machine nei.options.keys.gui.search=Focus Search Bar nei.options.keys.gui.bookmark=Add Bookmark nei.options.keys.gui.remove_recipe=Remove Group from Bookmarks -nei.options.keys.gui.bookmark_recipe=Add Bookmark with Recipe -nei.options.keys.gui.bookmark_count=Add Bookmark with Count nei.options.keys.gui.bookmark_pull_items=Pull all Bookmarked Items nei.options.keys.gui.hide_bookmarks=Toggle Bookmark Panel Visibility nei.options.keys.gui.overlay=Fill/Overlay Crafting Grid @@ -519,6 +518,7 @@ nei.recipe.overlay.mismatch=Mismatch Crafting Grid nei.recipe.overlay.overlayRecipe=Overlay Recipe nei.recipe.overlay.fillCraftingGrid=Fill Crafting Grid nei.recipe.overlay.bookmarkRecipe=Save with Recipe +nei.recipe.overlay.bookmarkRecipeAndCount=Save with Recipe & Count nei.recipe.favorite=Favorite nei.recipe.favorite.bookmark_recipe=Save Recipe Tree