From f503f742241f09ca9d9e323e9dbb4ff0bbaf08f1 Mon Sep 17 00:00:00 2001 From: Frank Spijkerman Date: Tue, 1 May 2018 16:04:05 +0200 Subject: [PATCH] Only return the outputs to limit the return value size (#1770) * Only return the outputs to limit the return value size, This fixes #1768, Added getPattern() * Updated CHANGELOG.md --- CHANGELOG.md | 2 ++ .../integration/oc/EnvironmentNetwork.java | 21 +++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eaaa0d130..2bb3a98b8 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ - Allow crafters to be daisy-chained (tomKPZ) - Empty patterns can no longer be inserted in the pattern result slot in the Pattern Grid with hoppers (raoulvdberge) - Added OR search operator to the Grid with "|" (raoulvdberge) +- getPatterns() now only returns all the outputs, this to limit memory usage in OpenComputers (only affects OC integration). (fspijkerman) +- Added new getPattern(stack:table) function for OpenComputers integration (fspijkerman) ### 1.5.33 - Added Crafter Manager (raoulvdberge) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/EnvironmentNetwork.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/EnvironmentNetwork.java index 40682b367..c121d8931 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/EnvironmentNetwork.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/EnvironmentNetwork.java @@ -23,6 +23,8 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import java.util.Map; +import java.util.List; +import java.util.LinkedList; import static com.raoulvdberge.refinedstorage.api.util.IComparer.COMPARE_DAMAGE; import static com.raoulvdberge.refinedstorage.api.util.IComparer.COMPARE_NBT; @@ -59,13 +61,28 @@ public class EnvironmentNetwork extends AbstractManagedEnvironment { return new Object[]{node.getNetwork().getCraftingManager().getTasks()}; } + @Callback(doc = "function(stack:table):table -- Get one pattern of this network.") + public Object[] getPattern(final Context context, final Arguments args) { + if (node.getNetwork() == null) { + return new Object[]{null, "not connected"}; + } + + ItemStack stack = args.checkItemStack(0); + return new Object[]{node.getNetwork().getCraftingManager().getPattern(stack)}; + } + @Callback(doc = "function():table -- Gets the patterns of this network.") public Object[] getPatterns(final Context context, final Arguments args) { if (node.getNetwork() == null) { return new Object[]{null, "not connected"}; } - - return new Object[]{node.getNetwork().getCraftingManager().getPatterns()}; + List patterns = new LinkedList(); + for (ICraftingPattern pattern : node.getNetwork().getCraftingManager().getPatterns()) { + for (ItemStack output : pattern.getOutputs()) { + patterns.add(output); + } + } + return new Object[]{patterns}; } @Callback(doc = "function(stack:table):boolean -- Whether a crafting pattern exists for this item.")