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

View File

@@ -149,7 +149,7 @@ public class ItemGridHandler implements IItemGridHandler {
if (depth == 0) { if (depth == 0) {
network.cancelCraftingTask(task); network.cancelCraftingTask(task);
} else { } else {
for (int i = 0; i < depth; ++i) { for (int i = 0; i < depth - 1; ++i) {
if (task == null) { if (task == null) {
break; break;
} }
@@ -158,26 +158,16 @@ public class ItemGridHandler implements IItemGridHandler {
} }
if (task != null) { if (task != null) {
cancelCraftingTask(task); task.getChild().onCancelled(network);
} task.setChild(null);
network.updateCraftingTasks(); network.updateCraftingTasks();
} }
}
} else if (id == -1) { } else if (id == -1) {
for (ICraftingTask task : network.getCraftingTasks()) { for (ICraftingTask task : network.getCraftingTasks()) {
network.cancelCraftingTask(task); network.cancelCraftingTask(task);
} }
} }
} }
// @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(); craftingTasksToAdd.clear();
if (!craftingTasks.isEmpty()) {
markDirty();
}
Iterator<ICraftingTask> craftingTaskIterator = craftingTasks.iterator(); Iterator<ICraftingTask> craftingTaskIterator = craftingTasks.iterator();
while (craftingTaskIterator.hasNext()) { while (craftingTaskIterator.hasNext()) {