Autocrafting fixes

This commit is contained in:
Raoul Van den Berge
2016-04-12 21:15:48 +02:00
parent 0f2f590020
commit 2c77dd7c5f
3 changed files with 19 additions and 20 deletions

View File

@@ -161,7 +161,9 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
while (it.hasNext()) {
CraftingTask task = it.next();
if (task.attemptCraft(this)) {
task.attemptCraft(this);
if (task.isDone()) {
it.remove();
push(task.getResult());
@@ -675,14 +677,15 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
public void onCraftingRequested(int id, int quantity) {
if (id >= 0 && id < itemGroups.size() && quantity > 0) {
System.out.println("Start for " + quantity);
for (int i = 0; i < quantity; ++i) {
while (quantity > 0) {
ItemStack pattern = getPatternForItem(itemGroups.get(id).toItemStack());
if (pattern != null) {
addCraftingTask(CraftingTask.createFromPattern(pattern));
quantity -= ItemPattern.getResult(pattern).stackSize;
} else {
System.out.println("Pattern not found !");
break;
}
}
}

View File

@@ -5,7 +5,7 @@ import net.minecraft.item.ItemStack;
public class CraftingIngredient {
private ItemStack stack;
private boolean satisfied;
private boolean subtaskCreated;
private boolean childTaskCreated;
public CraftingIngredient(ItemStack stack) {
this.stack = stack;
@@ -23,11 +23,11 @@ public class CraftingIngredient {
this.satisfied = true;
}
public boolean isSubtaskCreated() {
return subtaskCreated;
public boolean isChildTaskCreated() {
return childTaskCreated;
}
public void setSubtaskCreated() {
subtaskCreated = true;
public void setChildTaskCreated() {
childTaskCreated = true;
}
}

View File

@@ -20,30 +20,28 @@ public class CraftingTask {
return result;
}
public boolean attemptCraft(TileController controller) {
public void attemptCraft(TileController controller) {
for (CraftingIngredient ingredient : ingredients) {
if (!ingredient.isSatisfied()) {
ItemStack took = controller.take(ingredient.getStack().copy());
if (took != null) {
System.out.println("Ingredient " + ingredient.getStack() + " SATISFIED");
ingredient.setSatisfied();
} else if (!ingredient.isSubtaskCreated()) {
System.out.println("Ingredient " + ingredient.getStack() + " NOT SATISFIED, creating subtask");
} else if (!ingredient.isChildTaskCreated()) {
ItemStack pattern = controller.getPatternForItem(ingredient.getStack());
if (pattern != null) {
System.out.println("Found a pattern for this!");
CraftingTask subTask = CraftingTask.createFromPattern(pattern);
ingredient.setSubtaskCreated();
controller.addCraftingTask(subTask);
CraftingTask childTask = CraftingTask.createFromPattern(pattern);
ingredient.setChildTaskCreated();
controller.addCraftingTask(childTask);
break;
}
}
}
}
}
public boolean isDone() {
for (CraftingIngredient ingredient : ingredients) {
if (!ingredient.isSatisfied()) {
return false;
@@ -54,14 +52,12 @@ public class CraftingTask {
}
public static CraftingTask createFromPattern(ItemStack pattern) {
System.out.println("Creating crafting task for " + ItemPattern.getResult(pattern));
List<CraftingIngredient> ingredients = new ArrayList<CraftingIngredient>();
for (int i = 0; i < 9; ++i) {
ItemStack ingredient = ItemPattern.getSlot(pattern, i);
if (ingredient != null) {
System.out.println("Ingredient #" + i + ": " + ingredient);
ingredients.add(new CraftingIngredient(ingredient));
}
}