Cancelling of crafting tasks, also some fixes
This commit is contained in:
@@ -91,7 +91,6 @@ public class GuiCraftingMonitor extends GuiBase {
|
|||||||
.replace("{missing_items}", t("gui.refinedstorage:crafting_monitor.missing_items"))
|
.replace("{missing_items}", t("gui.refinedstorage:crafting_monitor.missing_items"))
|
||||||
.replace("{items_crafting}", t("gui.refinedstorage:crafting_monitor.items_crafting"))
|
.replace("{items_crafting}", t("gui.refinedstorage:crafting_monitor.items_crafting"))
|
||||||
.replace("{items_processing}", t("gui.refinedstorage:crafting_monitor.items_processing"))
|
.replace("{items_processing}", t("gui.refinedstorage:crafting_monitor.items_processing"))
|
||||||
.replace("{missing_machine}", t("gui.refinedstorage:crafting_monitor.missing_machine"))
|
|
||||||
.replace("{none}", t("misc.refinedstorage:none")));
|
.replace("{none}", t("misc.refinedstorage:none")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -65,6 +65,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
|
|||||||
private List<CraftingPattern> patterns = new ArrayList<CraftingPattern>();
|
private List<CraftingPattern> patterns = new ArrayList<CraftingPattern>();
|
||||||
private List<ICraftingTask> craftingTasks = new ArrayList<ICraftingTask>();
|
private List<ICraftingTask> craftingTasks = new ArrayList<ICraftingTask>();
|
||||||
private List<ICraftingTask> craftingTasksToAdd = new ArrayList<ICraftingTask>();
|
private List<ICraftingTask> craftingTasksToAdd = new ArrayList<ICraftingTask>();
|
||||||
|
private List<ICraftingTask> craftingTasksToCancel = new ArrayList<ICraftingTask>();
|
||||||
|
|
||||||
private Set<String> visited = new HashSet<String>();
|
private Set<String> visited = new HashSet<String>();
|
||||||
|
|
||||||
@@ -174,6 +175,13 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (ICraftingTask taskToCancel : craftingTasksToCancel) {
|
||||||
|
taskToCancel.onCancelled(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
craftingTasks.removeAll(craftingTasksToCancel);
|
||||||
|
craftingTasksToCancel.clear();
|
||||||
|
|
||||||
craftingTasks.addAll(craftingTasksToAdd);
|
craftingTasks.addAll(craftingTasksToAdd);
|
||||||
craftingTasksToAdd.clear();
|
craftingTasksToAdd.clear();
|
||||||
|
|
||||||
@@ -269,6 +277,10 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void cancelCraftingTask(ICraftingTask task) {
|
||||||
|
craftingTasksToCancel.add(task);
|
||||||
|
}
|
||||||
|
|
||||||
public int getCraftingTaskCount(CraftingPattern pattern, int flags) {
|
public int getCraftingTaskCount(CraftingPattern pattern, int flags) {
|
||||||
int amount = 0;
|
int amount = 0;
|
||||||
|
|
||||||
|
@@ -9,6 +9,7 @@ import net.minecraft.util.text.ITextComponent;
|
|||||||
import refinedstorage.container.ContainerCrafter;
|
import refinedstorage.container.ContainerCrafter;
|
||||||
import refinedstorage.inventory.InventorySimple;
|
import refinedstorage.inventory.InventorySimple;
|
||||||
import refinedstorage.tile.TileMachine;
|
import refinedstorage.tile.TileMachine;
|
||||||
|
import refinedstorage.tile.autocrafting.task.ICraftingTask;
|
||||||
import refinedstorage.util.InventoryUtils;
|
import refinedstorage.util.InventoryUtils;
|
||||||
|
|
||||||
public class TileCrafter extends TileMachine implements IInventory {
|
public class TileCrafter extends TileMachine implements IInventory {
|
||||||
@@ -30,6 +31,17 @@ public class TileCrafter extends TileMachine implements IInventory {
|
|||||||
return ContainerCrafter.class;
|
return ContainerCrafter.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDisconnected() {
|
||||||
|
for (ICraftingTask task : controller.getCraftingTasks()) {
|
||||||
|
if (task.getPattern().getCrafter() == this) {
|
||||||
|
controller.cancelCraftingTask(task);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
super.onDisconnected();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readFromNBT(NBTTagCompound nbt) {
|
public void readFromNBT(NBTTagCompound nbt) {
|
||||||
super.readFromNBT(nbt);
|
super.readFromNBT(nbt);
|
||||||
|
@@ -5,14 +5,20 @@ import net.minecraft.util.text.TextFormatting;
|
|||||||
import refinedstorage.tile.TileController;
|
import refinedstorage.tile.TileController;
|
||||||
import refinedstorage.tile.autocrafting.CraftingPattern;
|
import refinedstorage.tile.autocrafting.CraftingPattern;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class BasicCraftingTask implements ICraftingTask {
|
public class BasicCraftingTask implements ICraftingTask {
|
||||||
private CraftingPattern pattern;
|
private CraftingPattern pattern;
|
||||||
private boolean satisfied[];
|
private boolean satisfied[];
|
||||||
|
private boolean checked[];
|
||||||
private boolean childTasks[];
|
private boolean childTasks[];
|
||||||
|
private List<ItemStack> itemsTook = new ArrayList<ItemStack>();
|
||||||
|
|
||||||
public BasicCraftingTask(CraftingPattern pattern) {
|
public BasicCraftingTask(CraftingPattern pattern) {
|
||||||
this.pattern = pattern;
|
this.pattern = pattern;
|
||||||
this.satisfied = new boolean[pattern.getInputs().length];
|
this.satisfied = new boolean[pattern.getInputs().length];
|
||||||
|
this.checked = new boolean[pattern.getInputs().length];
|
||||||
this.childTasks = new boolean[pattern.getInputs().length];
|
this.childTasks = new boolean[pattern.getInputs().length];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,6 +30,8 @@ public class BasicCraftingTask implements ICraftingTask {
|
|||||||
boolean done = true;
|
boolean done = true;
|
||||||
|
|
||||||
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]) {
|
||||||
@@ -32,6 +40,8 @@ public class BasicCraftingTask implements ICraftingTask {
|
|||||||
ItemStack took = controller.take(input.copy());
|
ItemStack took = controller.take(input.copy());
|
||||||
|
|
||||||
if (took != null) {
|
if (took != null) {
|
||||||
|
itemsTook.add(took);
|
||||||
|
|
||||||
satisfied[i] = true;
|
satisfied[i] = true;
|
||||||
} else if (!childTasks[i]) {
|
} else if (!childTasks[i]) {
|
||||||
CraftingPattern pattern = controller.getPattern(input);
|
CraftingPattern pattern = controller.getPattern(input);
|
||||||
@@ -59,6 +69,13 @@ public class BasicCraftingTask implements ICraftingTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCancelled(TileController controller) {
|
||||||
|
for (ItemStack took : itemsTook) {
|
||||||
|
controller.push(took);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getInfo() {
|
public String getInfo() {
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
@@ -70,7 +87,7 @@ public class BasicCraftingTask implements ICraftingTask {
|
|||||||
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] && !childTasks[i]) {
|
if (checked[i] && !satisfied[i] && !childTasks[i]) {
|
||||||
builder.append("- ").append(input.getDisplayName()).append("\n");
|
builder.append("- ").append(input.getDisplayName()).append("\n");
|
||||||
|
|
||||||
missingItems++;
|
missingItems++;
|
||||||
@@ -88,7 +105,7 @@ public class BasicCraftingTask implements ICraftingTask {
|
|||||||
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 (childTasks[i]) {
|
if (!satisfied[i] && childTasks[i]) {
|
||||||
builder.append("- ").append(input.getDisplayName()).append("\n");
|
builder.append("- ").append(input.getDisplayName()).append("\n");
|
||||||
|
|
||||||
itemsCrafting++;
|
itemsCrafting++;
|
||||||
|
@@ -10,5 +10,7 @@ public interface ICraftingTask {
|
|||||||
|
|
||||||
void onDone(TileController controller);
|
void onDone(TileController controller);
|
||||||
|
|
||||||
|
void onCancelled(TileController controller);
|
||||||
|
|
||||||
String getInfo();
|
String getInfo();
|
||||||
}
|
}
|
||||||
|
@@ -15,7 +15,6 @@ public class ProcessingCraftingTask implements ICraftingTask {
|
|||||||
private boolean inserted[];
|
private boolean inserted[];
|
||||||
private boolean missing[];
|
private boolean missing[];
|
||||||
private boolean satisfied[];
|
private boolean satisfied[];
|
||||||
private boolean missingMachine;
|
|
||||||
|
|
||||||
public ProcessingCraftingTask(CraftingPattern pattern) {
|
public ProcessingCraftingTask(CraftingPattern pattern) {
|
||||||
this.pattern = pattern;
|
this.pattern = pattern;
|
||||||
@@ -35,8 +34,6 @@ public class ProcessingCraftingTask implements ICraftingTask {
|
|||||||
TileEntity crafterFacing = crafter.getWorld().getTileEntity(crafter.getPos().offset(crafter.getDirection()));
|
TileEntity crafterFacing = crafter.getWorld().getTileEntity(crafter.getPos().offset(crafter.getDirection()));
|
||||||
|
|
||||||
if (crafterFacing instanceof IInventory) {
|
if (crafterFacing instanceof IInventory) {
|
||||||
missingMachine = false;
|
|
||||||
|
|
||||||
for (int i = 0; i < inserted.length; ++i) {
|
for (int i = 0; i < inserted.length; ++i) {
|
||||||
if (!inserted[i]) {
|
if (!inserted[i]) {
|
||||||
ItemStack input = pattern.getInputs()[i];
|
ItemStack input = pattern.getInputs()[i];
|
||||||
@@ -50,7 +47,7 @@ public class ProcessingCraftingTask implements ICraftingTask {
|
|||||||
if (remaining == null) {
|
if (remaining == null) {
|
||||||
inserted[i] = true;
|
inserted[i] = true;
|
||||||
} else {
|
} else {
|
||||||
controller.push(input);
|
controller.push(took);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
missing[i] = true;
|
missing[i] = true;
|
||||||
@@ -58,7 +55,7 @@ public class ProcessingCraftingTask implements ICraftingTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
missingMachine = true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < satisfied.length; ++i) {
|
for (int i = 0; i < satisfied.length; ++i) {
|
||||||
@@ -78,6 +75,7 @@ public class ProcessingCraftingTask implements ICraftingTask {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,14 +84,15 @@ public class ProcessingCraftingTask implements ICraftingTask {
|
|||||||
// NO OP
|
// NO OP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCancelled(TileController controller) {
|
||||||
|
// NO OP
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getInfo() {
|
public String getInfo() {
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
|
|
||||||
if (missingMachine) {
|
|
||||||
builder.append(TextFormatting.RED).append("{missing_machine}").append(TextFormatting.RESET).append("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
builder.append(TextFormatting.YELLOW).append("{missing_items}").append(TextFormatting.RESET).append("\n");
|
builder.append(TextFormatting.YELLOW).append("{missing_items}").append(TextFormatting.RESET).append("\n");
|
||||||
|
|
||||||
int missingItems = 0;
|
int missingItems = 0;
|
||||||
|
@@ -24,7 +24,6 @@ gui.refinedstorage:crafting_monitor=Crafting Monitor
|
|||||||
gui.refinedstorage:crafting_monitor.missing_items=Missing items:
|
gui.refinedstorage:crafting_monitor.missing_items=Missing items:
|
||||||
gui.refinedstorage:crafting_monitor.items_crafting=Items crafting:
|
gui.refinedstorage:crafting_monitor.items_crafting=Items crafting:
|
||||||
gui.refinedstorage:crafting_monitor.items_processing=Items processing:
|
gui.refinedstorage:crafting_monitor.items_processing=Items processing:
|
||||||
gui.refinedstorage:crafting_monitor.missing_machine=Missing machine!
|
|
||||||
gui.refinedstorage:wireless_transmitter=Wireless Transmitter
|
gui.refinedstorage:wireless_transmitter=Wireless Transmitter
|
||||||
gui.refinedstorage:wireless_transmitter.distance=%d blocks
|
gui.refinedstorage:wireless_transmitter.distance=%d blocks
|
||||||
gui.refinedstorage:crafter=Crafter
|
gui.refinedstorage:crafter=Crafter
|
||||||
|
@@ -24,7 +24,6 @@ gui.refinedstorage:crafting_monitor=Crafting Monitor
|
|||||||
gui.refinedstorage:crafting_monitor.missing_items=Ontbrekende items:
|
gui.refinedstorage:crafting_monitor.missing_items=Ontbrekende items:
|
||||||
gui.refinedstorage:crafting_monitor.items_crafting=Items aan het craften:
|
gui.refinedstorage:crafting_monitor.items_crafting=Items aan het craften:
|
||||||
gui.refinedstorage:crafting_monitor.items_processing=Items aan het verwerken:
|
gui.refinedstorage:crafting_monitor.items_processing=Items aan het verwerken:
|
||||||
gui.refinedstorage:crafting_monitor.missing_machine=Ontbrekende machine!
|
|
||||||
gui.refinedstorage:wireless_transmitter=Draadloze Zender
|
gui.refinedstorage:wireless_transmitter=Draadloze Zender
|
||||||
gui.refinedstorage:wireless_transmitter.distance=%d blokken
|
gui.refinedstorage:wireless_transmitter.distance=%d blokken
|
||||||
gui.refinedstorage:crafter=Crafter
|
gui.refinedstorage:crafter=Crafter
|
||||||
|
Reference in New Issue
Block a user