AssemblyProgram program = ItemAssemblyProgram.getProgramFromItem(programMetadata);
AssemblyRecipe recipe = program.getRecipeList().get(recipeIndex);
MultipleInputOutputRecipe shape = new MultipleInputOutputRecipe();
ItemStack[] inputStacks = new ItemStack[]{recipe.getInput()};//for now not useful to put it in an array, but supports when adding multiple input/output.
for(int i = 0; i < inputStacks.length; i++) {
PositionedStack stack = new PositionedStack(inputStacks[i], 29 + i % 2 * 18, 66 + i / 2 * 18);
shape.addIngredient(stack);
}
ItemStack[] outputStacks = new ItemStack[]{recipe.getOutput()};
for(int i = 0; i < outputStacks.length; i++) {
PositionedStack stack = new PositionedStack(outputStacks[i], 96 + i % 2 * 18, 66 + i / 2 * 18);
shape.addOutput(stack);
}
shape.addIngredient(new PositionedStack(new ItemStack(Itemss.assemblyProgram, 1, programMetadata), 133, 22));
ItemStack[] requiredMachines = getMachinesFromEnum(program.getRequiredMachines());
for(int i = 0; i < requiredMachines.length; i++) {
shape.addIngredient(new PositionedStack(requiredMachines[i], 5 + i * 18, 25));
}
return shape;
}