More autocrafting behavior fixes
This commit is contained in:
@@ -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<>();
|
||||||
|
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user