diff --git a/oregen-manager.lua b/oregen-manager.lua index e926857..7c191a7 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -40,20 +40,32 @@ local PRODUCTS = { -- these will be crafted when needed local RECIPES = { ["minecraft:iron_nugget"] = { - {"minecraft:iron_nugget", 60}, - {"minecraft:gravel", 24}, + ingredients = { + {"minecraft:iron_nugget", 60}, + {"minecraft:gravel", 24}, + }, + addr = PRESS_ADDR, }, ["minecraft:gold_nugget"] = { - {"minecraft:gold_nugget", 64}, - {"minecraft:gravel", 64}, + ingredients = { + {"minecraft:gold_nugget", 64}, + {"minecraft:gravel", 64}, + }, + addr = PRESS_ADDR, }, ["create:zinc_nugget"] = { - {"create:zinc_nugget", 64}, - {"minecraft:gravel", 32}, + ingredients = { + {"create:zinc_nugget", 64}, + {"minecraft:gravel", 32}, + }, + addr = PRESS_ADDR, }, ["create:copper_nugget"] = { - {"create:copper_nugget", 63}, - {"minecraft:gravel", 18}, + ingredients = { + {"create:copper_nugget", 63}, + {"minecraft:gravel", 18}, + }, + addr = PRESS_ADDR, }, } @@ -101,7 +113,7 @@ function cycleItems (ticker, items) local makeRequest makeRequest = function (item, amt, addr) local limit = 64 - if addr = MELTER_ADDR then limit = 9 end + if addr == MELTER_ADDR then limit = 9 end if amt < limit then return end local request = { name = item, @@ -109,7 +121,7 @@ function cycleItems (ticker, items) } ticker.requestFiltered(addr, request) os.sleep(1) - return makeRequest(item, amt - limit) + return makeRequest(item, amt - limit, addr) end for _, pair in pairs(PRODUCTS) do local name, addr = pair[1], pair[2] @@ -129,10 +141,10 @@ function getAmounts (storage_f) return result end -function getNumCraftable (recipe, current_stock) +function getNumCraftable (ingredients, current_stock) local result = nil local item, count - for _, ingredient in ipairs(recipe) do + for _, ingredient in ipairs(ingredients) do item, count = ingredient[1], ingredient[2] if current_stock[item] == nil then return 0 end local num = math.floor(current_stock[item] / count) @@ -142,23 +154,25 @@ function getNumCraftable (recipe, current_stock) result = math.min(result, num) end end + if result == nil then result = 0 end return result end function craftRecipe (ticker, recipe, count) if count == nil then count = 1 end local createRequest - createRequest = function (recipe) - local ingredient = table.remove(recipe) + createRequest = function (recipe, i) + if i == nil then i = 1 end + local ingredient = recipe.ingredients[i] if ingredient == nil then return end local item = { name = ingredient[1], _requestCount = ingredient[2], } - return item, createRequest(recipe) + return item, createRequest(recipe, i + 1) end while count > 0 do - ticker.requestFiltered(PRESS_ADDR, createRequest(recipe)) + ticker.requestFiltered(recipe.addr, createRequest(recipe)) os.sleep(1) count = count - 1 end @@ -187,7 +201,7 @@ function run (ticker, export_storage, current_modes) if mode[1] == "recipe" then -- make as many recipes as you can with current stock local recipe = RECIPES[item] - local count = getNumCraftable(recipe, stock_amounts) + local count = getNumCraftable(recipe.ingredients, stock_amounts) craftRecipe(ticker, recipe, count) elseif mode[1] == "export" then local export_amt = export_amounts[item]