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

View File

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

View File

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