More autocrafting behavior fixes

This commit is contained in:
Raoul Van den Berge
2016-08-30 00:10:25 +02:00
parent d2f2ea7396
commit 73eacfe8ca
4 changed files with 24 additions and 19 deletions

View File

@@ -25,6 +25,7 @@ public class CraftingTaskFactoryNormal implements ICraftingTaskFactory {
if (tag != null) {
task.setChildrenCreated(CraftingTaskNormal.readBooleanArray(tag, CraftingTaskNormal.NBT_CHILDREN));
task.setSatisfied(CraftingTaskNormal.readBooleanArray(tag, CraftingTaskNormal.NBT_SATISFIED));
task.setChecked(CraftingTaskNormal.readBooleanArray(tag, CraftingTaskNormal.NBT_CHECKED));
List<ItemStack> took = new ArrayList<>();

View File

@@ -16,16 +16,19 @@ public class CraftingTaskNormal extends CraftingTask {
public static final String NBT_TOOK = "Took";
public static final String NBT_SATISFIED = "Satisfied";
public static final String NBT_CHILDREN = "Children";
public static final String NBT_CHECKED = "Checked";
private ICraftingPattern pattern;
private List<ItemStack> took = new ArrayList<>();
private boolean satisfied[];
private boolean childrenCreated[];
private boolean checked[];
public CraftingTaskNormal(ICraftingPattern pattern) {
this.pattern = pattern;
this.satisfied = new boolean[pattern.getInputs().length];
this.childrenCreated = new boolean[pattern.getInputs().length];
this.checked = new boolean[pattern.getInputs().length];
}
public void setTook(List<ItemStack> took) {
@@ -40,6 +43,10 @@ public class CraftingTaskNormal extends CraftingTask {
this.childrenCreated = childrenCreated;
}
public void setChecked(boolean[] checked) {
this.checked = checked;
}
@Override
public ICraftingPattern getPattern() {
return pattern;
@@ -48,6 +55,8 @@ public class CraftingTaskNormal extends CraftingTask {
@Override
public boolean update(World world, INetworkMaster network) {
for (int i = 0; i < pattern.getInputs().length; ++i) {
checked[i] = true;
ItemStack input = pattern.getInputs()[i];
if (!satisfied[i]) {
@@ -68,10 +77,10 @@ public class CraftingTaskNormal extends CraftingTask {
childrenCreated[i] = true;
network.updateCraftingTasks();
break;
}
}
break;
}
}
@@ -112,6 +121,7 @@ public class CraftingTaskNormal extends CraftingTask {
writeBooleanArray(tag, NBT_SATISFIED, satisfied);
writeBooleanArray(tag, NBT_CHILDREN, childrenCreated);
writeBooleanArray(tag, NBT_CHECKED, checked);
NBTTagList took = new NBTTagList();
@@ -133,7 +143,7 @@ public class CraftingTaskNormal extends CraftingTask {
for (int i = 0; i < pattern.getInputs().length; ++i) {
ItemStack input = pattern.getInputs()[i];
if (!satisfied[i] && !childrenCreated[i]) {
if (!satisfied[i] && !childrenCreated[i] && checked[i]) {
if (!missingItems) {
builder.append("I=gui.refinedstorage:crafting_monitor.missing_items\n");
@@ -149,7 +159,7 @@ public class CraftingTaskNormal extends CraftingTask {
for (int i = 0; i < pattern.getInputs().length; ++i) {
ItemStack input = pattern.getInputs()[i];
if (!satisfied[i] && childrenCreated[i]) {
if (!satisfied[i] && childrenCreated[i] && checked[i]) {
if (!itemsCrafting) {
builder.append("I=gui.refinedstorage:crafting_monitor.items_crafting\n");

View File

@@ -149,7 +149,7 @@ public class ItemGridHandler implements IItemGridHandler {
if (depth == 0) {
network.cancelCraftingTask(task);
} else {
for (int i = 0; i < depth; ++i) {
for (int i = 0; i < depth - 1; ++i) {
if (task == null) {
break;
}
@@ -158,10 +158,11 @@ public class ItemGridHandler implements IItemGridHandler {
}
if (task != null) {
cancelCraftingTask(task);
}
task.getChild().onCancelled(network);
task.setChild(null);
network.updateCraftingTasks();
network.updateCraftingTasks();
}
}
} else if (id == -1) {
for (ICraftingTask task : network.getCraftingTasks()) {
@@ -169,15 +170,4 @@ public class ItemGridHandler implements IItemGridHandler {
}
}
}
// @TODO: Broken!
private void cancelCraftingTask(ICraftingTask task) {
task.onCancelled(network);
if (task.getChild() != null) {
cancelCraftingTask(task.getChild());
task.setChild(null);
}
}
}

View File

@@ -258,6 +258,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
craftingTasksToAdd.clear();
if (!craftingTasks.isEmpty()) {
markDirty();
}
Iterator<ICraftingTask> craftingTaskIterator = craftingTasks.iterator();
while (craftingTaskIterator.hasNext()) {