From a0385e2477ebf1e0acfbb6e14bb3b440f2e4380c Mon Sep 17 00:00:00 2001 From: Darkere Date: Sun, 28 Jun 2020 13:07:59 +0200 Subject: [PATCH] =?UTF-8?q?reserve=20items=20used=20by=20CraftingTask=20to?= =?UTF-8?q?=20prevent=20using=20them=20more=20than=20on=E2=80=A6=20(#2557)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * reserve items used by CraftingTask to prevent using them more than once fixes #2155 * Revert "reserve items used by CraftingTask to prevent using them more than once fixes #2155" This reverts commit c0fea5d1 * extractInitial when first adding a CraftingTask * fix formatting * some cleanup * make extractInitial private again check for missing before starting task --- .../api/autocrafting/ICraftingManager.java | 6 +-- .../api/autocrafting/task/ICraftingTask.java | 5 ++ .../apiimpl/autocrafting/CraftingManager.java | 8 ++-- .../apiimpl/autocrafting/task/v6/Craft.java | 4 ++ .../autocrafting/task/v6/CraftingTask.java | 46 ++++++++++--------- .../autocrafting/task/v6/Processing.java | 1 + .../grid/handler/FluidGridHandler.java | 4 +- .../network/grid/handler/ItemGridHandler.java | 4 +- 8 files changed, 47 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/ICraftingManager.java b/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/ICraftingManager.java index a97603ce6..911ec7e14 100644 --- a/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/ICraftingManager.java +++ b/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/ICraftingManager.java @@ -36,11 +36,11 @@ public interface ICraftingManager { Map> getNamedContainers(); /** - * Adds a crafting task. + * Starts a crafting task. * - * @param task the task to add + * @param task the task to start */ - void add(@Nonnull ICraftingTask task); + void start(@Nonnull ICraftingTask task); /** * Cancels a crafting task. diff --git a/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/task/ICraftingTask.java b/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/task/ICraftingTask.java index ddcd8a068..397d23d10 100644 --- a/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/task/ICraftingTask.java +++ b/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/task/ICraftingTask.java @@ -125,4 +125,9 @@ public interface ICraftingTask { * @return the state of this crafting task */ CraftingTaskState getState(); + + /** + * Start the CraftingTask + */ + void start(); } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/CraftingManager.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/CraftingManager.java index c16276e0d..7d559785c 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/CraftingManager.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/CraftingManager.java @@ -13,6 +13,7 @@ import com.refinedmods.refinedstorage.api.network.INetwork; import com.refinedmods.refinedstorage.api.network.node.INetworkNode; import com.refinedmods.refinedstorage.api.util.IComparer; import com.refinedmods.refinedstorage.apiimpl.API; +import com.refinedmods.refinedstorage.apiimpl.autocrafting.task.v6.CraftingTask; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.ListNBT; @@ -74,7 +75,8 @@ public class CraftingManager implements ICraftingManager { } @Override - public void add(@Nonnull ICraftingTask task) { + public void start(@Nonnull ICraftingTask task) { + task.start(); tasksToAdd.add(task); network.markDirty(); @@ -253,7 +255,7 @@ public class CraftingManager implements ICraftingManager { ICraftingTaskError error = task.calculate(); if (error == null && !task.hasMissing()) { - this.add(task); + this.start(task); return task; } else { @@ -289,7 +291,7 @@ public class CraftingManager implements ICraftingManager { ICraftingTaskError error = task.calculate(); if (error == null && !task.hasMissing()) { - this.add(task); + this.start(task); return task; } else { diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/Craft.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/Craft.java index d8380d798..16332c729 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/Craft.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/Craft.java @@ -138,4 +138,8 @@ public abstract class Craft { return tag; } + void finishCalculation() { + //NOOP + } + } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/CraftingTask.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/CraftingTask.java index 290dfad7f..43e6e2ae4 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/CraftingTask.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/CraftingTask.java @@ -264,16 +264,6 @@ public class CraftingTask implements ICraftingTask { this.toCraftFluids.add(req); } - if (missing.isEmpty()) { - crafts.values().forEach(c -> { - totalSteps += c.getQuantity(); - - if (c instanceof Processing) { - ((Processing) c).finishCalculation(); - } - }); - } - this.state = CraftingTaskState.CALCULATED; return null; @@ -545,7 +535,7 @@ public class CraftingTask implements ICraftingTask { fromNetwork = mutatedFluidStorage.get(possibleInput, IComparer.COMPARE_NBT); - toExtractInitialFluids.add(possibleInput,toTake); + toExtractInitialFluids.add(possibleInput, toTake); } if (remaining > 0) { ICraftingPattern subPattern = network.getCraftingManager().getPattern(possibleInput); @@ -596,6 +586,24 @@ public class CraftingTask implements ICraftingTask { return null; } + @Override + public void start() { + if (hasMissing()) { + LOGGER.warn("Crafting task with missing items or fluids cannot execute, cancelling..."); + return; + } + + crafts.values().forEach(craft -> { + totalSteps += craft.getQuantity(); + craft.finishCalculation(); + }); + + executionStarted = System.currentTimeMillis(); + + extractInitial(); + } + + private void extractInitial() { if (!toExtractInitial.isEmpty()) { List toRemove = new ArrayList<>(); @@ -930,10 +938,6 @@ public class CraftingTask implements ICraftingTask { return true; } - if (executionStarted == -1) { - executionStarted = System.currentTimeMillis(); - } - ++ticks; if (this.crafts.isEmpty()) { @@ -1155,7 +1159,7 @@ public class CraftingTask implements ICraftingTask { } for (StackListEntry put : p.getItemsToDisplay().getStacks()) { - if (p.getProcessing() > 0|| p.getState() !=ProcessingState.READY) { + if (p.getProcessing() > 0 || p.getState() != ProcessingState.READY) { ICraftingMonitorElement element = new ItemCraftingMonitorElement(put.getStack(), 0, 0, put.getStack().getCount() * p.getProcessing(), 0, 0); if (p.getState() == ProcessingState.MACHINE_DOES_NOT_ACCEPT) { @@ -1165,17 +1169,17 @@ public class CraftingTask implements ICraftingTask { } else if (p.getState() == ProcessingState.LOCKED) { element = new ErrorCraftingMonitorElement(element, "gui.refinedstorage.crafting_monitor.crafter_is_locked"); } - elements.add(element,true); + elements.add(element, true); } } for (StackListEntry receive : p.getItemsToReceive().getStacks()) { int count = p.getNeeded(receive.getStack()); if (count > 0) { - elements.add(new ItemCraftingMonitorElement(receive.getStack(), 0, 0, 0, count, 0),true); + elements.add(new ItemCraftingMonitorElement(receive.getStack(), 0, 0, 0, count, 0), true); } } for (StackListEntry put : p.getFluidsToUse().getStacks()) { - if (p.getProcessing() > 0|| p.getState() !=ProcessingState.READY) { + if (p.getProcessing() > 0 || p.getState() != ProcessingState.READY) { ICraftingMonitorElement element = new FluidCraftingMonitorElement(put.getStack(), 0, 0, put.getStack().getAmount() * p.getProcessing(), 0, 0); if (p.getState() == ProcessingState.MACHINE_DOES_NOT_ACCEPT) { element = new ErrorCraftingMonitorElement(element, "gui.refinedstorage.crafting_monitor.machine_does_not_accept_fluid"); @@ -1184,14 +1188,14 @@ public class CraftingTask implements ICraftingTask { } else if (p.getState() == ProcessingState.LOCKED) { element = new ErrorCraftingMonitorElement(element, "gui.refinedstorage.crafting_monitor.crafter_is_locked"); } - elements.add(element,true); + elements.add(element, true); } } for (StackListEntry receive : p.getFluidsToReceive().getStacks()) { int count = p.getNeeded(receive.getStack()); if (count > 0) { - elements.add(new FluidCraftingMonitorElement(receive.getStack(), 0, 0, 0, count, 0),true); + elements.add(new FluidCraftingMonitorElement(receive.getStack(), 0, 0, 0, count, 0), true); } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/Processing.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/Processing.java index d0eac21b5..6f8c78e55 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/Processing.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/Processing.java @@ -48,6 +48,7 @@ class Processing extends Craft { this.itemsToDisplay = CraftingTask.readItemStackList(tag.getList(NBT_ITEMS_TO_DISPLAY, Constants.NBT.TAG_COMPOUND)); } + @Override void finishCalculation() { this.totalQuantity = quantity; updateItemsToDisplay(); diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java index 85d6d5404..71daf9d3a 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java @@ -122,7 +122,7 @@ public class FluidGridHandler implements IFluidGridHandler { ) ); } else if (noPreview && !task.hasMissing()) { - network.getCraftingManager().add(task); + network.getCraftingManager().start(task); RS.NETWORK_HANDLER.sendTo(player, new GridCraftingStartResponseMessage()); } else { @@ -159,7 +159,7 @@ public class FluidGridHandler implements IFluidGridHandler { ICraftingTaskError error = task.calculate(); if (error == null && !task.hasMissing()) { - network.getCraftingManager().add(task); + network.getCraftingManager().start(task); } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java index 9c1c256e9..67ddb5d5f 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java @@ -180,7 +180,7 @@ public class ItemGridHandler implements IItemGridHandler { ) ); } else if (noPreview && !task.hasMissing()) { - network.getCraftingManager().add(task); + network.getCraftingManager().start(task); RS.NETWORK_HANDLER.sendTo(player, new GridCraftingStartResponseMessage()); } else { @@ -217,7 +217,7 @@ public class ItemGridHandler implements IItemGridHandler { ICraftingTaskError error = task.calculate(); if (error == null && !task.hasMissing()) { - network.getCraftingManager().add(task); + network.getCraftingManager().start(task); } } }