Crafting a recipe

master
D4VID 12 months ago
commit 2c5c73917d

@ -0,0 +1,78 @@
local component = require("component")
local robot = require("robot")
local sides = require("sides")
local crafting = component.crafting
local inventory = component.inventory_controller
RESULT_SLOT = 4
local iron_pickaxe_recipe = {
result = {
name = 'minecraft:iron_pickaxe',
count = 1,
},
ingredients = {
'minecraft:iron_ingot', 'minecraft:iron_ingot', 'minecraft:iron_ingot',
nil, 'minecraft:stick', nil,
nil, 'minecraft:stick', nil,
}
}
-- robots inventory is 4 wide and crafting uses the top left portion
local slot_map = {
1,2,3,
5,6,7,
9,10,11
}
-- Search the facing chest for "item" and take "count" items and place them in "slot"
-- Returns number of items fetched
local function fetch_item(item, output_slot)
robot.select(output_slot)
local size = inventory.getInventorySize(sides.forward)
if not size then
print('Not facing a chest')
return false
end
for slot = 1, size do
local stack = inventory.getStackInSlot(sides.forward, slot)
if stack then
if stack.name == item then
inventory.suckFromSlot(sides.forward, slot, 1)
return true
end
end
end
print('Missing ' .. item)
return false
end
-- accepts a recipe table containing result and ingredients
local function craft_recipe(recipe)
for i, ingredient in pairs(recipe.ingredients) do
print('Fetching ' .. ingredient)
fetch_item(ingredient, slot_map[i])
end
-- select slot for the result
robot.select(RESULT_SLOT)
-- craft the resulting item
local crafted = crafting.craft(1)
if not crafted then
print('Crafting failed')
end
end
-- local target = ...
-- if not target then
-- print("Usage: craft <item>")
-- return
-- end
craft_recipe(iron_pickaxe_recipe)
Loading…
Cancel
Save