From 0a89d0318f91c3725bc697cb93f68381cbdfcd40 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 25 Sep 2016 11:31:53 +0200 Subject: [PATCH] Added max crafting task depth --- CHANGELOG.md | 1 + .../autocrafting/registry/ICraftingTaskFactory.java | 3 ++- .../api/autocrafting/task/CraftingTask.java | 13 +++++++++---- .../refinedstorage/api/network/NetworkUtils.java | 6 +++--- .../autocrafting/preview/CraftingPreviewData.java | 1 + .../registry/CraftingTaskFactoryNormal.java | 4 ++-- .../registry/CraftingTaskFactoryProcessing.java | 4 ++-- .../autocrafting/task/CraftingTaskNormal.java | 4 ++-- .../autocrafting/task/CraftingTaskProcessing.java | 4 ++-- .../apiimpl/network/grid/ItemGridHandler.java | 2 +- .../java/refinedstorage/gui/GuiCraftingPreview.java | 2 +- .../java/refinedstorage/tile/TileController.java | 6 +++--- 12 files changed, 29 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 151e58f98..217ca0f77 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### 1.0.6 - Added crafting preview screen (way2muchnoise) +- Added max crafting task depth (raoulvdberge) ### 1.0.5 - Fixed crafting a complex item causes the process to flow off the Crafting Monitor's GUI (raoulvdberge) diff --git a/src/main/java/refinedstorage/api/autocrafting/registry/ICraftingTaskFactory.java b/src/main/java/refinedstorage/api/autocrafting/registry/ICraftingTaskFactory.java index 71d713afa..859e8e5e6 100755 --- a/src/main/java/refinedstorage/api/autocrafting/registry/ICraftingTaskFactory.java +++ b/src/main/java/refinedstorage/api/autocrafting/registry/ICraftingTaskFactory.java @@ -17,10 +17,11 @@ public interface ICraftingTaskFactory { * Returns a crafting task for a given NBT tag and pattern. * * @param world the world + * @param depth the depth of the crafting task to create * @param tag the NBT tag, if this is null it isn't reading from disk but is used for making a task on demand * @param pattern the pattern * @return the crafting task */ @Nonnull - ICraftingTask create(World world, @Nullable NBTTagCompound tag, ICraftingPattern pattern); + ICraftingTask create(World world, int depth, @Nullable NBTTagCompound tag, ICraftingPattern pattern); } diff --git a/src/main/java/refinedstorage/api/autocrafting/task/CraftingTask.java b/src/main/java/refinedstorage/api/autocrafting/task/CraftingTask.java index 0f955a4da..c00acb8cb 100755 --- a/src/main/java/refinedstorage/api/autocrafting/task/CraftingTask.java +++ b/src/main/java/refinedstorage/api/autocrafting/task/CraftingTask.java @@ -18,6 +18,8 @@ import java.util.List; * A default implementation for crafting tasks. */ public abstract class CraftingTask implements ICraftingTask { + public static final int MAX_DEPTH = 100; + public static final String NBT_CHILDREN_CREATED = "ChildrenCreated"; public static final String NBT_SATISFIED = "Satisfied"; public static final String NBT_CHECKED = "Checked"; @@ -28,6 +30,8 @@ public abstract class CraftingTask implements ICraftingTask { private static final String NBT_CHILD = "Child"; + protected int depth; + protected ICraftingPattern pattern; protected ICraftingTask child; @@ -37,11 +41,12 @@ public abstract class CraftingTask implements ICraftingTask { protected boolean satisfied[]; protected boolean checked[]; - public CraftingTask(ICraftingPattern pattern) { + public CraftingTask(ICraftingPattern pattern, int depth) { this.pattern = pattern; this.childrenCreated = new boolean[pattern.getInputs().size()]; this.satisfied = new boolean[pattern.getInputs().size()]; this.checked = new boolean[pattern.getInputs().size()]; + this.depth = depth; } @Override @@ -82,11 +87,11 @@ public abstract class CraftingTask implements ICraftingTask { } protected void tryCreateChild(INetworkMaster network, int i) { - if (!childrenCreated[i]) { + if (!childrenCreated[i] && depth + 1 < MAX_DEPTH) { ICraftingPattern pattern = NetworkUtils.getPattern(network, this.pattern.getInputs().get(i)); if (pattern != null) { - child = NetworkUtils.createCraftingTask(network, pattern); + child = NetworkUtils.createCraftingTask(network, depth + 1, pattern); childrenCreated[i] = true; } @@ -143,7 +148,7 @@ public abstract class CraftingTask implements ICraftingTask { public void readChildNBT(World world, NBTTagCompound tag) { if (tag.hasKey(NBT_CHILD)) { - child = TileController.readCraftingTask(world, tag.getCompoundTag(NBT_CHILD)); + child = TileController.readCraftingTask(world, depth + 1, tag.getCompoundTag(NBT_CHILD)); } } diff --git a/src/main/java/refinedstorage/api/network/NetworkUtils.java b/src/main/java/refinedstorage/api/network/NetworkUtils.java index e8fc0ecb9..93e7e99a1 100755 --- a/src/main/java/refinedstorage/api/network/NetworkUtils.java +++ b/src/main/java/refinedstorage/api/network/NetworkUtils.java @@ -27,8 +27,8 @@ public final class NetworkUtils { return network.getPattern(stack, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); } - public static ICraftingTask createCraftingTask(INetworkMaster network, ICraftingPattern pattern) { - return RefinedStorageAPI.instance().getCraftingTaskRegistry().getFactory(pattern.getId()).create(network.getNetworkWorld(), null, pattern); + public static ICraftingTask createCraftingTask(INetworkMaster network, int depth, ICraftingPattern pattern) { + return RefinedStorageAPI.instance().getCraftingTaskRegistry().getFactory(pattern.getId()).create(network.getNetworkWorld(), depth, null, pattern); } public static boolean hasPattern(INetworkMaster network, ItemStack stack) { @@ -62,7 +62,7 @@ public final class NetworkUtils { ICraftingPattern pattern = network.getPattern(stack, compare); if (pattern != null) { - network.addCraftingTask(createCraftingTask(network, pattern)); + network.addCraftingTask(createCraftingTask(network, 0, pattern)); } } } diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewData.java b/src/main/java/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewData.java index e4c262cdf..2541a682e 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewData.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewData.java @@ -23,6 +23,7 @@ public class CraftingPreviewData { private void calculate(ItemStack stack, int quantity, boolean baseStack) { quantity = -add(stack, quantity, baseStack); + if (quantity > 0) { ICraftingPattern pattern = NetworkUtils.getPattern(network, stack); diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactoryNormal.java b/src/main/java/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactoryNormal.java index b352ae452..fd37ef753 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactoryNormal.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactoryNormal.java @@ -21,8 +21,8 @@ public class CraftingTaskFactoryNormal implements ICraftingTaskFactory { @Override @Nonnull - public ICraftingTask create(World world, @Nullable NBTTagCompound tag, ICraftingPattern pattern) { - CraftingTaskNormal task = new CraftingTaskNormal(pattern); + public ICraftingTask create(World world, int depth, @Nullable NBTTagCompound tag, ICraftingPattern pattern) { + CraftingTaskNormal task = new CraftingTaskNormal(pattern, depth); if (tag != null) { task.setChildrenCreated(CraftingTask.readBooleanArray(tag, CraftingTask.NBT_CHILDREN_CREATED)); diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactoryProcessing.java b/src/main/java/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactoryProcessing.java index 37fec4b7a..7aabf879e 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactoryProcessing.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactoryProcessing.java @@ -22,8 +22,8 @@ public class CraftingTaskFactoryProcessing implements ICraftingTaskFactory { @Override @Nonnull - public ICraftingTask create(World world, @Nullable NBTTagCompound tag, ICraftingPattern pattern) { - CraftingTaskProcessing task = new CraftingTaskProcessing(pattern); + public ICraftingTask create(World world, int depth, @Nullable NBTTagCompound tag, ICraftingPattern pattern) { + CraftingTaskProcessing task = new CraftingTaskProcessing(pattern, depth); if (tag != null) { task.setChildrenCreated(CraftingTask.readBooleanArray(tag, CraftingTask.NBT_CHILDREN_CREATED)); diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java index a47a7a728..5692e5b03 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java @@ -8,8 +8,8 @@ import refinedstorage.api.network.INetworkMaster; import refinedstorage.apiimpl.storage.fluid.FluidUtils; public class CraftingTaskNormal extends CraftingTask { - public CraftingTaskNormal(ICraftingPattern pattern) { - super(pattern); + public CraftingTaskNormal(ICraftingPattern pattern, int depth) { + super(pattern, depth); } @Override diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskProcessing.java b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskProcessing.java index 52f9be642..60bf17389 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskProcessing.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskProcessing.java @@ -22,8 +22,8 @@ public class CraftingTaskProcessing extends CraftingTask { private boolean waitingOnTileInUse; - public CraftingTaskProcessing(ICraftingPattern pattern) { - super(pattern); + public CraftingTaskProcessing(ICraftingPattern pattern, int depth) { + super(pattern, depth); this.satisfiedInsertion = new boolean[pattern.getOutputs().size()]; } diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java index 39bded2ac..3a91b919c 100755 --- a/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java @@ -136,7 +136,7 @@ public class ItemGridHandler implements IItemGridHandler { int quantityPerRequest = pattern.getQuantityPerRequest(stack); while (quantity > 0) { - network.addCraftingTask(NetworkUtils.createCraftingTask(network, pattern)); + network.addCraftingTask(NetworkUtils.createCraftingTask(network, 0, pattern)); quantity -= quantityPerRequest; } diff --git a/src/main/java/refinedstorage/gui/GuiCraftingPreview.java b/src/main/java/refinedstorage/gui/GuiCraftingPreview.java index 6be070b5f..de42c0f0d 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingPreview.java +++ b/src/main/java/refinedstorage/gui/GuiCraftingPreview.java @@ -123,7 +123,7 @@ public class GuiCraftingPreview extends GuiBase { String format = stack.cantCraft() ? "gui.refinedstorage:crafting_preview.missing" : "gui.refinedstorage:crafting_preview.to_craft"; drawString(calculateOffsetOnScale(x + 23, scale), calculateOffsetOnScale(yy, scale), t(format, stack.getToCraft())); - yy += 15; + yy += 7; } if (stack.getStock() > 0) { diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 7c92734b5..f2e67b5f4 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -243,7 +243,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR if (!craftingTasksToRead.isEmpty()) { for (NBTTagCompound tag : craftingTasksToRead) { - ICraftingTask task = readCraftingTask(worldObj, tag); + ICraftingTask task = readCraftingTask(worldObj, 0, tag); if (task != null) { addCraftingTask(task); @@ -703,7 +703,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } } - public static ICraftingTask readCraftingTask(World world, NBTTagCompound tag) { + public static ICraftingTask readCraftingTask(World world, int depth, NBTTagCompound tag) { ItemStack stack = ItemStack.loadItemStackFromNBT(tag.getCompoundTag(CraftingTask.NBT_PATTERN_STACK)); if (stack != null && stack.getItem() instanceof ICraftingPatternProvider) { @@ -715,7 +715,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR ICraftingTaskFactory factory = RefinedStorageAPI.instance().getCraftingTaskRegistry().getFactory(tag.getString(CraftingTask.NBT_PATTERN_TYPE)); if (factory != null) { - return factory.create(world, tag, pattern); + return factory.create(world, depth, tag, pattern); } } }