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…
Reference in new issue