Fixed crafting tasks stealing from each other and causing stalls.
This commit is contained in:
@@ -52,6 +52,9 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
private static final String NBT_MISSING = "Missing";
|
private static final String NBT_MISSING = "Missing";
|
||||||
private static final String NBT_EXECUTION_STARTED = "ExecutionStarted";
|
private static final String NBT_EXECUTION_STARTED = "ExecutionStarted";
|
||||||
|
|
||||||
|
private static final String NBT_PATTERN_STACK = "Stack";
|
||||||
|
private static final String NBT_PATTERN_CONTAINER_POS = "ContainerPos";
|
||||||
|
|
||||||
private INetwork network;
|
private INetwork network;
|
||||||
private ItemStack requested;
|
private ItemStack requested;
|
||||||
private int quantity;
|
private int quantity;
|
||||||
@@ -60,7 +63,7 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
private CraftingInserter inserter;
|
private CraftingInserter inserter;
|
||||||
private Set<ICraftingPattern> patternsUsed = new HashSet<>();
|
private Set<ICraftingPattern> patternsUsed = new HashSet<>();
|
||||||
private int ticks = 0;
|
private int ticks = 0;
|
||||||
private long calculationStarted;
|
private long calculationStarted = -1;
|
||||||
private long executionStarted = -1;
|
private long executionStarted = -1;
|
||||||
private UUID id = UUID.randomUUID();
|
private UUID id = UUID.randomUUID();
|
||||||
|
|
||||||
@@ -116,6 +119,14 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public ICraftingTaskError calculate() {
|
public ICraftingTaskError calculate() {
|
||||||
|
if (calculationStarted != -1) {
|
||||||
|
throw new IllegalStateException("Task already calculated!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (executionStarted != -1) {
|
||||||
|
throw new IllegalStateException("Task already started!");
|
||||||
|
}
|
||||||
|
|
||||||
this.calculationStarted = System.currentTimeMillis();
|
this.calculationStarted = System.currentTimeMillis();
|
||||||
|
|
||||||
int qty = this.quantity;
|
int qty = this.quantity;
|
||||||
@@ -125,6 +136,27 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
IStackList<ItemStack> results = API.instance().createItemStackList();
|
IStackList<ItemStack> results = API.instance().createItemStackList();
|
||||||
IStackList<ItemStack> storage = network.getItemStorageCache().getList().copy();
|
IStackList<ItemStack> storage = network.getItemStorageCache().getList().copy();
|
||||||
|
|
||||||
|
// Items that are being handled in other tasks aren't available to us.
|
||||||
|
for (ICraftingTask task : network.getCraftingManager().getTasks()) {
|
||||||
|
if (task instanceof CraftingTask) {
|
||||||
|
for (CraftingStep step : ((CraftingTask) task).steps) {
|
||||||
|
CraftingExtractor extractor = null;
|
||||||
|
|
||||||
|
if (step instanceof CraftingStepCraft) {
|
||||||
|
extractor = ((CraftingStepCraft) step).getExtractor();
|
||||||
|
} else if (step instanceof CraftingStepProcess) {
|
||||||
|
extractor = ((CraftingStepProcess) step).getExtractor();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (extractor != null) {
|
||||||
|
for (ItemStack inUse : extractor.getItems()) {
|
||||||
|
storage.remove(inUse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ICraftingPatternChainList patternChainList = network.getCraftingManager().createPatternChainList();
|
ICraftingPatternChainList patternChainList = network.getCraftingManager().createPatternChainList();
|
||||||
|
|
||||||
ICraftingPatternChain patternChain = patternChainList.getChain(pattern);
|
ICraftingPatternChain patternChain = patternChainList.getChain(pattern);
|
||||||
@@ -371,7 +403,7 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
elements.directAdd(new CraftingMonitorElementText("gui.refinedstorage:crafting_monitor.items_missing", 5));
|
elements.directAdd(new CraftingMonitorElementText("gui.refinedstorage:crafting_monitor.items_missing", 5));
|
||||||
|
|
||||||
for (ItemStack missing : this.missing.getStacks()) {
|
for (ItemStack missing : this.missing.getStacks()) {
|
||||||
elements.add(new CraftingMonitorElementColor(new CraftingMonitorElementItemRender(missing, missing.getCount(), 16), "", CraftingMonitorElementColor.COLOR_ERROR));
|
elements.add(new CraftingMonitorElementColor(new CraftingMonitorElementItemRender(missing, missing.getCount(), 0), "", CraftingMonitorElementColor.COLOR_ERROR));
|
||||||
}
|
}
|
||||||
|
|
||||||
elements.commit();
|
elements.commit();
|
||||||
@@ -381,11 +413,7 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
elements.directAdd(new CraftingMonitorElementText("gui.refinedstorage:crafting_monitor.items_inserting", 5));
|
elements.directAdd(new CraftingMonitorElementText("gui.refinedstorage:crafting_monitor.items_inserting", 5));
|
||||||
|
|
||||||
for (CraftingInserterItem item : inserter.getItems()) {
|
for (CraftingInserterItem item : inserter.getItems()) {
|
||||||
ICraftingMonitorElement element = new CraftingMonitorElementItemRender(
|
ICraftingMonitorElement element = new CraftingMonitorElementItemRender(item.getStack(), item.getStack().getCount(), 0);
|
||||||
item.getStack(),
|
|
||||||
item.getStack().getCount(),
|
|
||||||
16
|
|
||||||
);
|
|
||||||
|
|
||||||
if (item.getStatus() == CraftingInserterItemStatus.FULL) {
|
if (item.getStatus() == CraftingInserterItemStatus.FULL) {
|
||||||
element = new CraftingMonitorElementColor(element, "gui.refinedstorage:crafting_monitor.network_full", CraftingMonitorElementColor.COLOR_ERROR);
|
element = new CraftingMonitorElementColor(element, "gui.refinedstorage:crafting_monitor.network_full", CraftingMonitorElementColor.COLOR_ERROR);
|
||||||
@@ -408,11 +436,7 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
ItemStack item = extractor.getItems().get(i);
|
ItemStack item = extractor.getItems().get(i);
|
||||||
CraftingExtractorItemStatus status = extractor.getStatus().get(i);
|
CraftingExtractorItemStatus status = extractor.getStatus().get(i);
|
||||||
|
|
||||||
ICraftingMonitorElement element = new CraftingMonitorElementItemRender(
|
ICraftingMonitorElement element = new CraftingMonitorElementItemRender(item, item.getCount(), 0);
|
||||||
item,
|
|
||||||
item.getCount(),
|
|
||||||
16
|
|
||||||
);
|
|
||||||
|
|
||||||
if (status == CraftingExtractorItemStatus.MISSING) {
|
if (status == CraftingExtractorItemStatus.MISSING) {
|
||||||
element = new CraftingMonitorElementColor(element, "gui.refinedstorage:crafting_monitor.waiting_for_items", CraftingMonitorElementColor.COLOR_INFO);
|
element = new CraftingMonitorElementColor(element, "gui.refinedstorage:crafting_monitor.waiting_for_items", CraftingMonitorElementColor.COLOR_INFO);
|
||||||
@@ -437,11 +461,7 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
ItemStack item = extractor.getItems().get(i);
|
ItemStack item = extractor.getItems().get(i);
|
||||||
CraftingExtractorItemStatus status = extractor.getStatus().get(i);
|
CraftingExtractorItemStatus status = extractor.getStatus().get(i);
|
||||||
|
|
||||||
ICraftingMonitorElement element = new CraftingMonitorElementItemRender(
|
ICraftingMonitorElement element = new CraftingMonitorElementItemRender(item, item.getCount(), 0);
|
||||||
item,
|
|
||||||
item.getCount(),
|
|
||||||
16
|
|
||||||
);
|
|
||||||
|
|
||||||
if (status == CraftingExtractorItemStatus.MISSING) {
|
if (status == CraftingExtractorItemStatus.MISSING) {
|
||||||
element = new CraftingMonitorElementColor(element, "gui.refinedstorage:crafting_monitor.waiting_for_items", CraftingMonitorElementColor.COLOR_INFO);
|
element = new CraftingMonitorElementColor(element, "gui.refinedstorage:crafting_monitor.waiting_for_items", CraftingMonitorElementColor.COLOR_INFO);
|
||||||
@@ -582,9 +602,6 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final String NBT_PATTERN_STACK = "Stack";
|
|
||||||
private static final String NBT_PATTERN_CONTAINER_POS = "ContainerPos";
|
|
||||||
|
|
||||||
public static NBTTagCompound writePatternToNbt(ICraftingPattern pattern) {
|
public static NBTTagCompound writePatternToNbt(ICraftingPattern pattern) {
|
||||||
NBTTagCompound tag = new NBTTagCompound();
|
NBTTagCompound tag = new NBTTagCompound();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user