Improve crafting processing code (untested)

This commit is contained in:
Raoul Van den Berge
2016-05-04 18:09:23 +02:00
parent 1f9028464d
commit f251f39b98
2 changed files with 30 additions and 18 deletions

View File

@@ -62,7 +62,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
private List<ClientSideMachine> clientSideMachines = new ArrayList<ClientSideMachine>();
private List<CraftingPattern> patterns = new ArrayList<CraftingPattern>();
private Stack<ICraftingTask> craftingTasks = new Stack<ICraftingTask>();
private List<ICraftingTask> craftingTasks = new ArrayList<ICraftingTask>();
private Set<String> visited = new HashSet<String>();
@@ -172,13 +172,15 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
}
}
if (craftingTasks.size() > 0) {
ICraftingTask task = craftingTasks.peek();
Iterator<ICraftingTask> craftingTaskIterator = craftingTasks.iterator();
while (craftingTaskIterator.hasNext()) {
ICraftingTask task = craftingTaskIterator.next();
if (ticks % task.getPattern().getCrafter().getSpeed() == 0 && task.update(this)) {
task.onDone(this);
craftingTasks.pop();
craftingTaskIterator.remove();
}
}
@@ -196,10 +198,10 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
wirelessGridConsumers.removeAll(wirelessGridConsumersMarkedForRemoval);
wirelessGridConsumersMarkedForRemoval.clear();
Iterator<WirelessGridConsumer> it = wirelessGridConsumers.iterator();
Iterator<WirelessGridConsumer> gridConsumerIterator = wirelessGridConsumers.iterator();
while (it.hasNext()) {
WirelessGridConsumer consumer = it.next();
while (gridConsumerIterator.hasNext()) {
WirelessGridConsumer consumer = gridConsumerIterator.next();
if (!InventoryUtils.compareStack(consumer.getWirelessGrid(), consumer.getPlayer().getHeldItem(consumer.getHand()))) {
consumer.getPlayer().closeScreen(); // This will call onContainerClosed on the Container and remove it from the list
@@ -251,7 +253,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
}
public void addCraftingTask(ICraftingTask task) {
craftingTasks.push(task);
craftingTasks.add(task);
}
public List<CraftingPattern> getPatterns() {

View File

@@ -2,6 +2,7 @@ package refinedstorage.tile.autocrafting.task;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityHopper;
import refinedstorage.tile.TileController;
import refinedstorage.tile.autocrafting.CraftingPattern;
@@ -10,11 +11,12 @@ import refinedstorage.util.InventoryUtils;
public class ProcessingCraftingTask implements ICraftingTask {
private CraftingPattern pattern;
private boolean inserted;
private boolean inserted[];
private boolean satisfied[];
public ProcessingCraftingTask(CraftingPattern pattern) {
this.pattern = pattern;
this.inserted = new boolean[pattern.getInputs().length];
this.satisfied = new boolean[pattern.getOutputs().length];
}
@@ -25,18 +27,26 @@ public class ProcessingCraftingTask implements ICraftingTask {
@Override
public boolean update(TileController controller) {
if (!inserted) {
for (ItemStack input : pattern.getInputs()) {
ItemStack take = controller.take(input);
for (int i = 0; i < inserted.length; ++i) {
if (!inserted[i]) {
ItemStack input = pattern.getInputs()[i];
ItemStack took = controller.take(input);
if (take != null) {
if (took != null) {
TileCrafter crafter = pattern.getCrafter();
TileEntity crafterFacing = crafter.getWorld().getTileEntity(crafter.getPos().offset(crafter.getDirection()));
TileEntityHopper.putStackInInventoryAllSlots((IInventory) crafter.getWorld().getTileEntity(crafter.getPos().offset(crafter.getDirection())), take, crafter.getDirection().getOpposite());
if (crafterFacing instanceof IInventory) {
ItemStack remaining = TileEntityHopper.putStackInInventoryAllSlots((IInventory) crafterFacing, took, crafter.getDirection().getOpposite());
if (remaining == null) {
inserted[i] = true;
} else {
controller.push(input);
}
}
}
}
inserted = true;
}
for (int i = 0; i < satisfied.length; ++i) {
@@ -48,9 +58,9 @@ public class ProcessingCraftingTask implements ICraftingTask {
return true;
}
public void onInserted(ItemStack in) {
public void onInserted(ItemStack inserted) {
for (int i = 0; i < pattern.getOutputs().length; ++i) {
if (!satisfied[i] && InventoryUtils.compareStack(in, pattern.getOutputs()[i])) {
if (!satisfied[i] && InventoryUtils.compareStack(inserted, pattern.getOutputs()[i])) {
satisfied[i] = true;
}
}