Change ICraftingStep to abstract class.
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user