Change ICraftingStep to abstract class.

This commit is contained in:
raoulvdberge
2018-05-28 20:46:11 +02:00
parent 6ea6489cfd
commit fb41beda6f
5 changed files with 47 additions and 80 deletions

View File

@@ -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;
}
}

View File

@@ -6,21 +6,22 @@ import com.raoulvdberge.refinedstorage.api.util.IStackList;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList; import net.minecraft.util.NonNullList;
public class CraftingStepCraft implements ICraftingStep { public class CraftingStepCraft extends CraftingStep {
private INetwork network; private INetwork network;
private IStackList<ItemStack> toExtract; private IStackList<ItemStack> toExtract;
private NonNullList<ItemStack> took; private NonNullList<ItemStack> took;
private ICraftingPattern pattern;
public CraftingStepCraft(INetwork network, IStackList<ItemStack> toExtract, NonNullList<ItemStack> took, ICraftingPattern pattern) { public CraftingStepCraft(ICraftingPattern pattern, INetwork network, IStackList<ItemStack> toExtract, NonNullList<ItemStack> took) {
super(pattern);
this.network = network; this.network = network;
this.toExtract = toExtract; this.toExtract = toExtract;
this.took = took; this.took = took;
this.pattern = pattern;
} }
@Override @Override
public boolean execute() { public void execute() {
for (ItemStack toExtractItem : toExtract.getStacks()) { for (ItemStack toExtractItem : toExtract.getStacks()) {
ItemStack extracted = network.extractItem(toExtractItem, toExtractItem.getCount(), false); ItemStack extracted = network.extractItem(toExtractItem, toExtractItem.getCount(), false);
@@ -36,8 +37,6 @@ public class CraftingStepCraft implements ICraftingStep {
for (ItemStack byproduct : pattern.getByproducts(took)) { for (ItemStack byproduct : pattern.getByproducts(took)) {
network.insertItem(byproduct, byproduct.getCount(), false); network.insertItem(byproduct, byproduct.getCount(), false);
} }
return true;
} }
@Override @Override
@@ -56,9 +55,4 @@ public class CraftingStepCraft implements ICraftingStep {
public IStackList<ItemStack> getToExtract() { public IStackList<ItemStack> getToExtract() {
return toExtract; return toExtract;
} }
@Override
public ICraftingPattern getPattern() {
return pattern;
}
} }

View File

@@ -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;
}
}

View File

@@ -25,7 +25,7 @@ public class CraftingTask implements ICraftingTask {
private ItemStack requested; private ItemStack requested;
private int quantity; private int quantity;
private ICraftingPattern pattern; private ICraftingPattern pattern;
private List<CraftingStepWrapper> steps = new LinkedList<>(); private List<CraftingStep> steps = new LinkedList<>();
private IStackList<ItemStack> toTake = API.instance().createItemStackList(); private IStackList<ItemStack> toTake = API.instance().createItemStackList();
private IStackList<ItemStack> missing = API.instance().createItemStackList(); private IStackList<ItemStack> missing = API.instance().createItemStackList();
@@ -46,13 +46,13 @@ public class CraftingTask implements ICraftingTask {
IStackList<ItemStack> storage = network.getItemStorageCache().getList().copy(); IStackList<ItemStack> storage = network.getItemStorageCache().getList().copy();
while (qty > 0) { while (qty > 0) {
this.steps.add(new CraftingStepWrapper(calculateInternal(storage, results, pattern))); this.steps.add(calculateInternal(storage, results, pattern));
qty -= getQuantityPerCraft(pattern, requested); qty -= getQuantityPerCraft(pattern, requested);
} }
} }
private ICraftingStep calculateInternal(IStackList<ItemStack> mutatedStorage, IStackList<ItemStack> results, ICraftingPattern pattern) { private CraftingStep calculateInternal(IStackList<ItemStack> mutatedStorage, IStackList<ItemStack> results, ICraftingPattern pattern) {
IStackList<ItemStack> itemsToExtract = API.instance().createItemStackList(); IStackList<ItemStack> itemsToExtract = API.instance().createItemStackList();
NonNullList<ItemStack> took = NonNullList.create(); NonNullList<ItemStack> took = NonNullList.create();
@@ -103,7 +103,7 @@ public class CraftingTask implements ICraftingTask {
this.toCraft.add(possibleInput, missing); this.toCraft.add(possibleInput, missing);
while (missing > 0) { while (missing > 0) {
this.steps.add(new CraftingStepWrapper(calculateInternal(mutatedStorage, results, subPattern))); this.steps.add(calculateInternal(mutatedStorage, results, subPattern));
missing -= getQuantityPerCraft(subPattern, possibleInput); 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) { private int getQuantityPerCraft(ICraftingPattern pattern, ItemStack requested) {
@@ -151,11 +151,12 @@ public class CraftingTask implements ICraftingTask {
public boolean update() { public boolean update() {
boolean allCompleted = true; boolean allCompleted = true;
for (CraftingStepWrapper step : steps) { for (CraftingStep step : steps) {
if (!step.isCompleted()) { if (!step.isCompleted()) {
allCompleted = false; allCompleted = false;
if (step.canExecute() && step.getStep().execute()) { if (step.canExecute()) {
step.execute();
step.setCompleted(); step.setCompleted();
network.getCraftingManager().sendCraftingMonitorUpdate(); network.getCraftingManager().sendCraftingMonitorUpdate();
@@ -210,12 +211,12 @@ public class CraftingTask implements ICraftingTask {
elements.commit(); 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)); elements.directAdd(new CraftingMonitorElementText("gui.refinedstorage:crafting_monitor.items_crafting", 16));
for (CraftingStepWrapper step : steps) { for (CraftingStep step : steps) {
if (step.getStep() instanceof CraftingStepCraft && !step.isCompleted()) { if (step instanceof CraftingStepCraft && !step.isCompleted()) {
for (ItemStack stack : ((CraftingStepCraft) step.getStep()).getToExtract().getStacks()) { for (ItemStack stack : ((CraftingStepCraft) step).getToExtract().getStacks()) {
ICraftingMonitorElement element = new CraftingMonitorElementItemRender( ICraftingMonitorElement element = new CraftingMonitorElementItemRender(
-1, -1,
stack, stack,
@@ -224,7 +225,7 @@ public class CraftingTask implements ICraftingTask {
); );
// TODO: cache this // TODO: cache this
if (!step.getStep().canExecute()) { if (!step.canExecute()) {
element = new CraftingMonitorElementInfo(element, "gui.refinedstorage:crafting_monitor.waiting_for_items"); element = new CraftingMonitorElementInfo(element, "gui.refinedstorage:crafting_monitor.waiting_for_items");
} }

View File

@@ -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();
}