66 lines
1.6 KiB
Lua
66 lines
1.6 KiB
Lua
local Adapter = require('core.inventoryAdapter')
|
|
local Craft = require('farms.craft')
|
|
|
|
local turtle = _G.turtle
|
|
|
|
local CRAFTING_TABLE = 'minecraft:crafting_table'
|
|
|
|
local function clearGrid(inventory)
|
|
for i = 1, 16 do
|
|
local count = turtle.getItemCount(i)
|
|
if count > 0 then
|
|
inventory:insert(i, count)
|
|
if turtle.getItemCount(i) ~= 0 then
|
|
return false
|
|
end
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
function turtle.craftItem(item, count, inventoryInfo)
|
|
local success, msg
|
|
|
|
local inventory = Adapter.wrap(inventoryInfo)
|
|
if not inventory then
|
|
return false, 'Invalid inventory'
|
|
end
|
|
|
|
local equipped, side
|
|
if not turtle.isEquipped('workbench') then
|
|
local modemSide = turtle.isEquipped('modem') or 'right'
|
|
local osides = { left = 'right', right = 'left' }
|
|
side = osides[modemSide]
|
|
if not turtle.select(CRAFTING_TABLE) then
|
|
clearGrid(inventory)
|
|
if not turtle.selectOpenSlot() then
|
|
return false, 'Inventory is full'
|
|
end
|
|
if not inventory:provide({ name = CRAFTING_TABLE, damage = 0 }, 1) then
|
|
return false, 'Missing crafting table'
|
|
end
|
|
end
|
|
|
|
local slot = turtle.select(CRAFTING_TABLE)
|
|
turtle.equip(side, CRAFTING_TABLE)
|
|
equipped = turtle.getItemDetail(slot.index)
|
|
end
|
|
|
|
clearGrid(inventory)
|
|
success, msg = Craft.craftRecipe(item, count or 1, inventory)
|
|
|
|
if equipped then
|
|
turtle.selectOpenSlot()
|
|
inventory:provide({ name = equipped.name, damage = equipped.damage }, 1)
|
|
turtle.equip(side, equipped.name .. ':' .. equipped.damage)
|
|
end
|
|
|
|
return success, msg
|
|
end
|
|
|
|
function turtle.canCraft(item, count, items)
|
|
return Craft.canCraft(item, count, items)
|
|
end
|
|
|
|
return true
|