diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fdcc12e3..b58bec78e 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### 1.5.26 - Added Funky Locomotion integration (raoulvdberge) +- Minor fixes to autocrafting (raoulvdberge) ### 1.5.25 - Fixed not being able to autocraft different Storage Drawers' wood drawers (raoulvdberge) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java index d8ae9909e..df1f98dab 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java @@ -106,7 +106,7 @@ public abstract class CraftingStep implements ICraftingStep { @Override public List getInputs() { - return pattern.getInputs().stream().filter(Objects::nonNull).collect(Collectors.toList()); + return pattern.getInputs().stream().filter(Objects::nonNull).filter(s -> !s.isEmpty()).collect(Collectors.toList()); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java index 1ea613ec2..7f62f2eab 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java @@ -38,7 +38,7 @@ public class CraftingStepCraft extends CraftingStep { @Override public List getInputs() { - return inputs == null ? super.getInputs() : inputs.stream().filter(Objects::nonNull).collect(Collectors.toList()); + return inputs == null ? super.getInputs() : inputs.stream().filter(Objects::nonNull).filter(s -> !s.isEmpty()).collect(Collectors.toList()); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/StackListItem.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/StackListItem.java index 98720935b..ec4f3eb1e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/StackListItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/StackListItem.java @@ -22,6 +22,10 @@ public class StackListItem implements IStackList { @Override public void add(@Nonnull ItemStack stack, int size) { + if (stack.isEmpty() || size <= 0) { + return; + } + for (ItemStack otherStack : stacks.get(stack.getItem())) { if (API.instance().getComparer().isEqualNoQuantity(otherStack, stack)) { if ((long) otherStack.getCount() + (long) size > Integer.MAX_VALUE) { @@ -34,7 +38,7 @@ public class StackListItem implements IStackList { } } - stacks.put(stack.getItem(), size == 0 ? stack.copy() : ItemHandlerHelper.copyStackWithSize(stack, size)); + stacks.put(stack.getItem(), ItemHandlerHelper.copyStackWithSize(stack, size)); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/StackListItemOredicted.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/StackListItemOredicted.java index 65197150e..d3e5360d0 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/StackListItemOredicted.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/StackListItemOredicted.java @@ -38,7 +38,9 @@ public class StackListItemOredicted implements IStackList { @Override public void add(@Nonnull ItemStack stack, int size) { underlyingList.add(stack, size); + ItemStack internalStack = underlyingList.get(stack); + if (internalStack != null && internalStack.getCount() == stack.getCount()) { for (int id : OreDictionary.getOreIDs(internalStack)) { stacks.put(id, internalStack); @@ -49,10 +51,13 @@ public class StackListItemOredicted implements IStackList { @Override public boolean remove(@Nonnull ItemStack stack, int size) { boolean rvalue = underlyingList.remove(stack, size); + if (underlyingList.needsCleanup) { touchedIds.addAll(Arrays.stream(OreDictionary.getOreIDs(stack)).boxed().collect(Collectors.toList())); + clean(); } + return rvalue; } @@ -62,10 +67,12 @@ public class StackListItemOredicted implements IStackList { // When the underlying list empties the stack the reference will become empty, thus we need to copy before hand ItemStack original = stack.copy(); boolean rvalue = underlyingList.trackedRemove(stack, size); + if (underlyingList.needsCleanup) { touchedIds.addAll(Arrays.stream(OreDictionary.getOreIDs(original)).boxed().collect(Collectors.toList())); clean(); } + return rvalue; } @@ -85,17 +92,23 @@ public class StackListItemOredicted implements IStackList { public ItemStack get(@Nonnull ItemStack stack, int flags) { // Check the underlying list but don't do oredict things for exact match ItemStack exact = underlyingList.get(stack, flags & ~IComparer.COMPARE_OREDICT); + if (exact == null) { if ((flags & IComparer.COMPARE_OREDICT) == IComparer.COMPARE_OREDICT) { int[] ids = OreDictionary.getOreIDs(stack); + for (int id : ids) { List stacks = this.stacks.get(id); + if (stacks != null && !stacks.isEmpty()) { int i = 0; + ItemStack returnStack = stacks.get(i++); + while (returnStack.isEmpty() && i < stacks.size()) { returnStack = stacks.get(i++); } + if (!returnStack.isEmpty()) { return returnStack; } @@ -103,6 +116,7 @@ public class StackListItemOredicted implements IStackList { } } } + return exact; } @@ -112,6 +126,7 @@ public class StackListItemOredicted implements IStackList { if (underlyingList.needsCleanup) { clean(); } + return underlyingList.get(hash); } @@ -158,9 +173,11 @@ public class StackListItemOredicted implements IStackList { public IStackList copy() { StackListItemOredicted newList = new StackListItemOredicted(); newList.underlyingList = (StackListItem) this.underlyingList.copy(); + for (Map.Entry entry : this.stacks.entries()) { newList.stacks.put(entry.getKey(), entry.getValue()); } + return newList; }