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 new file mode 100644 index 000000000..5067a06d3 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java @@ -0,0 +1,28 @@ +package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task; + +import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; + +public abstract class CraftingStep { + protected ICraftingPattern pattern; + private boolean completed; + + public CraftingStep(ICraftingPattern pattern) { + this.pattern = pattern; + } + + public abstract boolean canExecute(); + + public abstract void execute(); + + public ICraftingPattern getPattern() { + return pattern; + } + + public boolean isCompleted() { + return completed; + } + + public void setCompleted() { + this.completed = true; + } +} 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 31371c832..e8985fd44 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java @@ -6,21 +6,22 @@ import com.raoulvdberge.refinedstorage.api.util.IStackList; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; -public class CraftingStepCraft implements ICraftingStep { +public class CraftingStepCraft extends CraftingStep { private INetwork network; + private IStackList toExtract; private NonNullList took; - private ICraftingPattern pattern; - public CraftingStepCraft(INetwork network, IStackList toExtract, NonNullList took, ICraftingPattern pattern) { + public CraftingStepCraft(ICraftingPattern pattern, INetwork network, IStackList toExtract, NonNullList took) { + super(pattern); + this.network = network; this.toExtract = toExtract; this.took = took; - this.pattern = pattern; } @Override - public boolean execute() { + public void execute() { for (ItemStack toExtractItem : toExtract.getStacks()) { ItemStack extracted = network.extractItem(toExtractItem, toExtractItem.getCount(), false); @@ -36,8 +37,6 @@ public class CraftingStepCraft implements ICraftingStep { for (ItemStack byproduct : pattern.getByproducts(took)) { network.insertItem(byproduct, byproduct.getCount(), false); } - - return true; } @Override @@ -56,9 +55,4 @@ public class CraftingStepCraft implements ICraftingStep { public IStackList getToExtract() { return toExtract; } - - @Override - public ICraftingPattern getPattern() { - return pattern; - } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepWrapper.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepWrapper.java deleted file mode 100644 index 8fbaa9e3b..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepWrapper.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task; - -class CraftingStepWrapper { - private ICraftingStep step; - private boolean completed; - private int ticks = -1; - - CraftingStepWrapper(ICraftingStep step) { - this.step = step; - } - - boolean canExecute() { - if (!step.canExecute()) { - return false; - } - - ticks++; - - switch (step.getPattern().getContainer().getSpeedUpdateCount()) { - case 1: - return ticks % 5 == 0; - case 2: - return ticks % 4 == 0; - case 3: - return ticks % 3 == 0; - case 4: - return ticks % 2 == 0; - default: - case 0: - return ticks % 10 == 0; - } - } - - ICraftingStep getStep() { - return step; - } - - boolean isCompleted() { - return completed; - } - - void setCompleted() { - this.completed = true; - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java index 51cea4aad..7220bf27e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java @@ -25,7 +25,7 @@ public class CraftingTask implements ICraftingTask { private ItemStack requested; private int quantity; private ICraftingPattern pattern; - private List steps = new LinkedList<>(); + private List steps = new LinkedList<>(); private IStackList toTake = API.instance().createItemStackList(); private IStackList missing = API.instance().createItemStackList(); @@ -46,13 +46,13 @@ public class CraftingTask implements ICraftingTask { IStackList storage = network.getItemStorageCache().getList().copy(); while (qty > 0) { - this.steps.add(new CraftingStepWrapper(calculateInternal(storage, results, pattern))); + this.steps.add(calculateInternal(storage, results, pattern)); qty -= getQuantityPerCraft(pattern, requested); } } - private ICraftingStep calculateInternal(IStackList mutatedStorage, IStackList results, ICraftingPattern pattern) { + private CraftingStep calculateInternal(IStackList mutatedStorage, IStackList results, ICraftingPattern pattern) { IStackList itemsToExtract = API.instance().createItemStackList(); NonNullList took = NonNullList.create(); @@ -103,7 +103,7 @@ public class CraftingTask implements ICraftingTask { this.toCraft.add(possibleInput, missing); while (missing > 0) { - this.steps.add(new CraftingStepWrapper(calculateInternal(mutatedStorage, results, subPattern))); + this.steps.add(calculateInternal(mutatedStorage, results, subPattern)); missing -= getQuantityPerCraft(subPattern, possibleInput); } @@ -128,7 +128,7 @@ public class CraftingTask implements ICraftingTask { } } - return new CraftingStepCraft(network, itemsToExtract, took, pattern); + return new CraftingStepCraft(pattern, network, itemsToExtract, took); } private int getQuantityPerCraft(ICraftingPattern pattern, ItemStack requested) { @@ -151,11 +151,12 @@ public class CraftingTask implements ICraftingTask { public boolean update() { boolean allCompleted = true; - for (CraftingStepWrapper step : steps) { + for (CraftingStep step : steps) { if (!step.isCompleted()) { allCompleted = false; - if (step.canExecute() && step.getStep().execute()) { + if (step.canExecute()) { + step.execute(); step.setCompleted(); network.getCraftingManager().sendCraftingMonitorUpdate(); @@ -210,12 +211,12 @@ public class CraftingTask implements ICraftingTask { elements.commit(); } - if (steps.stream().anyMatch(s -> s.getStep() instanceof CraftingStepCraft && !s.isCompleted())) { + if (steps.stream().anyMatch(s -> s instanceof CraftingStepCraft && !s.isCompleted())) { elements.directAdd(new CraftingMonitorElementText("gui.refinedstorage:crafting_monitor.items_crafting", 16)); - for (CraftingStepWrapper step : steps) { - if (step.getStep() instanceof CraftingStepCraft && !step.isCompleted()) { - for (ItemStack stack : ((CraftingStepCraft) step.getStep()).getToExtract().getStacks()) { + for (CraftingStep step : steps) { + if (step instanceof CraftingStepCraft && !step.isCompleted()) { + for (ItemStack stack : ((CraftingStepCraft) step).getToExtract().getStacks()) { ICraftingMonitorElement element = new CraftingMonitorElementItemRender( -1, stack, @@ -224,7 +225,7 @@ public class CraftingTask implements ICraftingTask { ); // TODO: cache this - if (!step.getStep().canExecute()) { + if (!step.canExecute()) { element = new CraftingMonitorElementInfo(element, "gui.refinedstorage:crafting_monitor.waiting_for_items"); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/ICraftingStep.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/ICraftingStep.java deleted file mode 100644 index 81194935a..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/ICraftingStep.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task; - -import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; - -public interface ICraftingStep { - boolean execute(); - - boolean canExecute(); - - ICraftingPattern getPattern(); -}