From 268018673b6783cab31f1ad38907ca433b7230fe Mon Sep 17 00:00:00 2001 From: way2muchnoise Date: Tue, 1 Nov 2016 11:49:30 +0100 Subject: [PATCH 1/2] faster getPatterns lookup, #559 --- .../refinedstorage/tile/TileController.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java index 82d91ec13..fb9edee99 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java @@ -24,6 +24,7 @@ import com.raoulvdberge.refinedstorage.api.storage.fluid.IFluidStorageCache; import com.raoulvdberge.refinedstorage.api.storage.item.IItemStorage; import com.raoulvdberge.refinedstorage.api.storage.item.IItemStorageCache; import com.raoulvdberge.refinedstorage.api.util.IComparer; +import com.raoulvdberge.refinedstorage.api.util.IItemStackList; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeGraph; import com.raoulvdberge.refinedstorage.apiimpl.network.WirelessGridHandler; @@ -407,10 +408,12 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR List patterns = new ArrayList<>(); for (ICraftingPattern craftingPattern : getPatterns()) { - for (ItemStack output : craftingPattern.getOutputs()) { - if (API.instance().getComparer().isEqual(output, pattern, flags)) { - patterns.add(craftingPattern); - } + IItemStackList outputs = API.instance().createItemStackList(); + craftingPattern.getOutputs().stream().filter(Objects::nonNull).forEach(outputs::add); + outputs = outputs.getOredicted(); + ItemStack contains = outputs.get(pattern, flags); + if (contains != null && contains.stackSize > 0) { + patterns.add(craftingPattern); } } From 4d969901163ebbd65d99c1225b42d3b7fab09c47 Mon Sep 17 00:00:00 2001 From: way2muchnoise Date: Tue, 1 Nov 2016 12:02:11 +0100 Subject: [PATCH 2/2] fix the actual issue of #559 --- .../refinedstorage/tile/TileController.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java index fb9edee99..a50c4ca44 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java @@ -408,12 +408,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR List patterns = new ArrayList<>(); for (ICraftingPattern craftingPattern : getPatterns()) { - IItemStackList outputs = API.instance().createItemStackList(); - craftingPattern.getOutputs().stream().filter(Objects::nonNull).forEach(outputs::add); - outputs = outputs.getOredicted(); - ItemStack contains = outputs.get(pattern, flags); - if (contains != null && contains.stackSize > 0) { - patterns.add(craftingPattern); + for (ItemStack output : craftingPattern.getOutputs()) { + if (API.instance().getComparer().isEqual(output, pattern, flags)) { + patterns.add(craftingPattern); + } } } @@ -433,12 +431,14 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR int highestScore = 0; int highestPattern = 0; + IItemStackList itemList = itemStorage.getList().getOredicted(); + for (int i = 0; i < patterns.size(); ++i) { int score = 0; for (ItemStack input : patterns.get(i).getInputs()) { if (input != null) { - ItemStack stored = itemStorage.getList().get(input, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT | (patterns.get(i).isOredict() ? IComparer.COMPARE_OREDICT : 0)); + ItemStack stored = itemList.get(input, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT | (patterns.get(i).isOredict() ? IComparer.COMPARE_OREDICT : 0)); score += stored != null ? stored.stackSize : 0; }