Autocrafting fixes
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user