From 97defd7cb180df068f861de183d9b8ba752f0e37 Mon Sep 17 00:00:00 2001 From: Meegoo Date: Fri, 18 Oct 2024 21:36:23 +0300 Subject: [PATCH] Attempt to convert counts between crafting mode and regular mode --- .../java/codechicken/nei/BookmarkPanel.java | 69 +++++++++++++++++-- 1 file changed, 62 insertions(+), 7 deletions(-) diff --git a/src/main/java/codechicken/nei/BookmarkPanel.java b/src/main/java/codechicken/nei/BookmarkPanel.java index f518789fd..e08430d92 100644 --- a/src/main/java/codechicken/nei/BookmarkPanel.java +++ b/src/main/java/codechicken/nei/BookmarkPanel.java @@ -392,10 +392,26 @@ public void setCraftingMode(int groupId, boolean on) { } public void toggleCraftingMode(int groupId) { - this.groups.get(groupId).toggleCraftingMode(); + BookmarkGroup group = this.groups.get(groupId); + if (group.crafting != null) { + copyStackSizesFromCrafting(groupId, group.crafting); + } + group.toggleCraftingMode(); onItemsChanged(); } + public void copyStackSizesFromCrafting(int groupId, BookmarkCraftingChain craftingChain) { + for (int i = 0; i < metadata.size(); i++) { + ItemStackMetadata metadata = getMetadata(i); + if (metadata.groupId == groupId) { + ItemStack calculatedStack = craftingChain.getCalculatedItems().get(i); + if (calculatedStack != null) { + realItems.set(i, calculatedStack); + } + } + } + } + @Override public int getNumPages() { @@ -880,6 +896,26 @@ protected void createGroup(GroupingItem groupingItem) { } } + if (groupIdA == DEFAULT_GROUP_ID) { + int start = Math.min(groupingItem.startItemIndexTop, groupingItem.endItemIndexTop); + int end = Math.min(groupingItem.startItemIndexBottom, groupingItem.endItemIndexBottom); + boolean skip = false; + for (int i = start; i <= bottomItemIndex; i++) { + if (this.metadata.get(i).requestedAmount != 0) { + skip = true; + break; + } + } + if (!skip) { + for (int i = start; i <= end; i++) { + ItemStackMetadata meta = this.metadata.get(i); + if (!meta.ingredient) { + meta.requestedAmount = StackInfo.itemStackToNBT(getItem(i)).getInteger("Count"); + } + } + } + } + final HashSet usedSetIds = new HashSet<>(); for (ItemStackMetadata meta : this.metadata) { usedSetIds.add(meta.groupId); @@ -1624,11 +1660,22 @@ public void addRecipe(BookmarkRecipe recipe, boolean saveSize, int groupId) { Map uniqueResults = getUniqueItems(recipe.result); + boolean isGroupEmpty = true; + for (int rowGroupId : BGrid.gridGroupMask) { + if (rowGroupId == groupId) { + isGroupEmpty = false; + break; + } + } + for (String GUID : uniqueResults.keySet()) { final NBTTagCompound nbTag = uniqueResults.get(GUID); final ItemStack normalized = StackInfo.loadFromNBT(nbTag, saveSize ? nbTag.getInteger("Count") : 0); final ItemStackMetadata metadata = new ItemStackMetadata(recipeId, nbTag, false, groupId); metadata.fullRecipe = recipe; + if (isGroupEmpty && saveSize) { + metadata.requestedAmount = nbTag.getInteger("Count"); + } BGrid.addItem(normalized, metadata); } @@ -2279,7 +2326,7 @@ public void mouseDragged(int mousex, int mousey, int button, long heldTime) { } } else if (mouseOverSlot != null - && this.sortableItem.items.indexOf(BGrid.realItems.get(mouseOverSlot.slotIndex)) == -1) { + && !this.sortableItem.items.contains(BGrid.realItems.get(mouseOverSlot.slotIndex))) { final ItemStackMetadata meta = BGrid.getMetadata(mouseOverSlot.slotIndex); if (meta.groupId == sortMeta.groupId) { @@ -2786,7 +2833,10 @@ public boolean onMouseWheel(int shift, int mousex, int mousey) { if (group.crafting != null && !meta.ingredient) { shiftRequestedAmount(meta, shift, shiftMultiplier * meta.factor); } else if (group.crafting == null) { - shiftStackSize(BGrid, i, shift, shiftMultiplier * meta.factor); + int newSize = shiftStackSize(BGrid, i, shift, shiftMultiplier * meta.factor); + if (!meta.ingredient && overMeta.requestedAmount != 0) { + meta.requestedAmount = newSize; + } } } } else { @@ -2797,7 +2847,10 @@ public boolean onMouseWheel(int shift, int mousex, int mousey) { if (group.crafting != null && !overMeta.ingredient) { shiftRequestedAmount(overMeta, shift, shiftMultiplier); } else if (group.crafting == null) { - shiftStackSize(BGrid, slot.slotIndex, shift, shiftMultiplier); + int newSize = shiftStackSize(BGrid, slot.slotIndex, shift, shiftMultiplier); + if (!overMeta.ingredient && overMeta.requestedAmount != 0) { + overMeta.requestedAmount = newSize; + } } } @@ -2825,16 +2878,18 @@ public boolean onMouseWheel(int shift, int mousex, int mousey) { return false; } - private void shiftStackSize(BookmarkGrid BGrid, int slotIndex, int shift, int shiftMultiplier) { + private int shiftStackSize(BookmarkGrid BGrid, int slotIndex, int shift, int shiftMultiplier) { final NBTTagCompound nbTag = StackInfo.itemStackToNBT(BGrid.getItem(slotIndex)); final ItemStackMetadata meta = BGrid.getMetadata(slotIndex); if (meta.factor > 0) { final int originalCount = nbTag.getInteger("Count"); - final long count = calculateShiftedValue(originalCount, shift, shiftMultiplier); - ItemStack newStack = StackInfo.loadFromNBT(nbTag, Math.max(count, 0)); + final int count = Math.max(calculateShiftedValue(originalCount, shift, shiftMultiplier), 0); + ItemStack newStack = StackInfo.loadFromNBT(nbTag, count); BGrid.realItems.set(slotIndex, newStack); + return count; } + return 0; } private int calculateShiftedValue(int originalCount, int shift, int shiftMultiplier) {