Anoter go at fixing #389, Part 2
This commit is contained in:
@@ -78,6 +78,16 @@ public abstract class CraftingTask implements ICraftingTask {
|
|||||||
this.satisfied = satisfied;
|
this.satisfied = satisfied;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected boolean hasReceivedInputs() {
|
||||||
|
for (boolean item : satisfied) {
|
||||||
|
if (!item) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean[] getChecked() {
|
public boolean[] getChecked() {
|
||||||
return checked;
|
return checked;
|
||||||
}
|
}
|
||||||
@@ -98,6 +108,11 @@ public abstract class CraftingTask implements ICraftingTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isFinished() {
|
||||||
|
return hasReceivedInputs();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public ICraftingTask getChild() {
|
public ICraftingTask getChild() {
|
||||||
|
|||||||
@@ -32,7 +32,12 @@ public interface ICraftingTask {
|
|||||||
* @param network the network
|
* @param network the network
|
||||||
* @return true if the crafting task is done, false otherwise
|
* @return true if the crafting task is done, false otherwise
|
||||||
*/
|
*/
|
||||||
boolean update(World world, INetworkMaster network);
|
void update(World world, INetworkMaster network);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return whether this crafting task is finished
|
||||||
|
*/
|
||||||
|
boolean isFinished();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets called when the crafting task is cancelled.
|
* Gets called when the crafting task is cancelled.
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class CraftingTaskNormal extends CraftingTask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean update(World world, INetworkMaster network) {
|
public void update(World world, INetworkMaster network) {
|
||||||
for (int i = 0; i < pattern.getInputs().size(); ++i) {
|
for (int i = 0; i < pattern.getInputs().size(); ++i) {
|
||||||
checked[i] = true;
|
checked[i] = true;
|
||||||
|
|
||||||
@@ -34,10 +34,8 @@ public class CraftingTaskNormal extends CraftingTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (boolean item : satisfied) {
|
if (!hasReceivedInputs()) {
|
||||||
if (!item) {
|
return;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ItemStack output : pattern.getOutputs()) {
|
for (ItemStack output : pattern.getOutputs()) {
|
||||||
@@ -49,8 +47,6 @@ public class CraftingTaskNormal extends CraftingTask {
|
|||||||
// @TODO: Handle remainder
|
// @TODO: Handle remainder
|
||||||
network.insertItem(byproduct, byproduct.stackSize, false);
|
network.insertItem(byproduct, byproduct.stackSize, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public class CraftingTaskProcessing extends CraftingTask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean update(World world, INetworkMaster network) {
|
public void update(World world, INetworkMaster network) {
|
||||||
for (int i = 0; i < pattern.getInputs().size(); ++i) {
|
for (int i = 0; i < pattern.getInputs().size(); ++i) {
|
||||||
checked[i] = true;
|
checked[i] = true;
|
||||||
|
|
||||||
@@ -56,8 +56,8 @@ public class CraftingTaskProcessing extends CraftingTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hasTakenInputs()) {
|
if (!hasReceivedInputs()) {
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ICraftingPatternContainer container = pattern.getContainer();
|
ICraftingPatternContainer container = pattern.getContainer();
|
||||||
@@ -77,8 +77,11 @@ public class CraftingTaskProcessing extends CraftingTask {
|
|||||||
} else {
|
} else {
|
||||||
tileInUse = null;
|
tileInUse = null;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return hasReceivedOutputs();
|
@Override
|
||||||
|
public boolean isFinished() {
|
||||||
|
return super.isFinished() && hasReceivedOutputs();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean hasReceivedOutputs() {
|
private boolean hasReceivedOutputs() {
|
||||||
@@ -91,16 +94,6 @@ public class CraftingTaskProcessing extends CraftingTask {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean hasTakenInputs() {
|
|
||||||
for (boolean item : satisfied) {
|
|
||||||
if (!item) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isTileInUse(INetworkMaster network) {
|
private boolean isTileInUse(INetworkMaster network) {
|
||||||
for (ICraftingTask task : network.getCraftingTasks()) {
|
for (ICraftingTask task : network.getCraftingTasks()) {
|
||||||
if (isTileInUse(task)) {
|
if (isTileInUse(task)) {
|
||||||
@@ -132,7 +125,7 @@ public class CraftingTaskProcessing extends CraftingTask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean onInserted(ItemStack stack) {
|
public boolean onInserted(ItemStack stack) {
|
||||||
if (!hasReceivedOutputs() && hasTakenInputs()) {
|
if (!hasReceivedOutputs() && hasReceivedInputs()) {
|
||||||
for (int i = 0; i < pattern.getOutputs().size(); ++i) {
|
for (int i = 0; i < pattern.getOutputs().size(); ++i) {
|
||||||
ItemStack output = pattern.getOutputs().get(i);
|
ItemStack output = pattern.getOutputs().get(i);
|
||||||
|
|
||||||
@@ -198,7 +191,7 @@ public class CraftingTaskProcessing extends CraftingTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasTakenInputs()) {
|
if (hasReceivedInputs()) {
|
||||||
builder.append("I=gui.refinedstorage:crafting_monitor.items_processing\n");
|
builder.append("I=gui.refinedstorage:crafting_monitor.items_processing\n");
|
||||||
|
|
||||||
for (int i = 0; i < pattern.getInputs().size(); ++i) {
|
for (int i = 0; i < pattern.getInputs().size(); ++i) {
|
||||||
|
|||||||
@@ -275,22 +275,12 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
|
|
||||||
craftingTasksToAdd.clear();
|
craftingTasksToAdd.clear();
|
||||||
|
|
||||||
Iterator<ICraftingTask> craftingTaskIterator = craftingTasks.iterator();
|
updateCraftingTasks(CraftingTaskUpdateType.NORMAL);
|
||||||
|
|
||||||
while (craftingTaskIterator.hasNext()) {
|
|
||||||
ICraftingTask task = craftingTaskIterator.next();
|
|
||||||
|
|
||||||
if (updateCraftingTask(task)) {
|
|
||||||
craftingTaskIterator.remove();
|
|
||||||
|
|
||||||
craftingTasksChanged = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!craftingTasks.isEmpty() || craftingTasksChanged) {
|
if (!craftingTasks.isEmpty() || craftingTasksChanged) {
|
||||||
markDirty();
|
markDirty();
|
||||||
|
|
||||||
updateCraftingTasks();
|
updateCraftingMonitors();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -324,9 +314,26 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
super.update();
|
super.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean updateCraftingTask(ICraftingTask task) {
|
enum CraftingTaskUpdateType {
|
||||||
|
NORMAL,
|
||||||
|
DELETION
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateCraftingTasks(CraftingTaskUpdateType type) {
|
||||||
|
Iterator<ICraftingTask> craftingTaskIterator = craftingTasks.iterator();
|
||||||
|
|
||||||
|
while (craftingTaskIterator.hasNext()) {
|
||||||
|
ICraftingTask task = craftingTaskIterator.next();
|
||||||
|
|
||||||
|
if (updateCraftingTask(task, type)) {
|
||||||
|
craftingTaskIterator.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean updateCraftingTask(ICraftingTask task, CraftingTaskUpdateType type) {
|
||||||
if (task.getChild() != null) {
|
if (task.getChild() != null) {
|
||||||
if (updateCraftingTask(task.getChild())) {
|
if (updateCraftingTask(task.getChild(), type)) {
|
||||||
task.setChild(null);
|
task.setChild(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -335,10 +342,18 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
|
|
||||||
ICraftingPatternContainer container = task.getPattern().getContainer();
|
ICraftingPatternContainer container = task.getPattern().getContainer();
|
||||||
|
|
||||||
return container != null && ticks % container.getSpeed() == 0 && task.update(worldObj, this);
|
if (container != null && (ticks % container.getSpeed() == 0 || type == CraftingTaskUpdateType.DELETION)) {
|
||||||
|
if (type == CraftingTaskUpdateType.NORMAL) {
|
||||||
|
task.update(worldObj, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateCraftingTasks() {
|
return task.isFinished();
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateCraftingMonitors() {
|
||||||
for (INetworkNode node : nodeGraph.all()) {
|
for (INetworkNode node : nodeGraph.all()) {
|
||||||
if (node instanceof TileCraftingMonitor) {
|
if (node instanceof TileCraftingMonitor) {
|
||||||
((TileCraftingMonitor) node).dataManager.sendParameterToWatchers(TileCraftingMonitor.TASKS);
|
((TileCraftingMonitor) node).dataManager.sendParameterToWatchers(TileCraftingMonitor.TASKS);
|
||||||
@@ -551,13 +566,17 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
itemStorage.add(ItemHandlerHelper.copyStackWithSize(stack, inserted), false);
|
itemStorage.add(ItemHandlerHelper.copyStackWithSize(stack, inserted), false);
|
||||||
|
|
||||||
for (int i = 0; i < inserted; ++i) {
|
for (int i = 0; i < inserted; ++i) {
|
||||||
for (ICraftingTask task : craftingTasks) {
|
for (int j = 0; j < craftingTasks.size(); ++j) {
|
||||||
|
ICraftingTask task = craftingTasks.get(j);
|
||||||
|
|
||||||
if (inserted == 0) {
|
if (inserted == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (onInserted(stack, task)) {
|
if (onInserted(stack, task)) {
|
||||||
inserted--;
|
inserted--;
|
||||||
|
|
||||||
|
updateCraftingTasks(CraftingTaskUpdateType.DELETION);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user