From efb7b6f6d16eb680986a8abbbe4523b1b1d892b8 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Fri, 2 Jan 2026 17:37:49 -0500 Subject: [PATCH 01/32] feat: create first draft of oregen-manager --- oregen-manager.lua | 222 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 oregen-manager.lua diff --git a/oregen-manager.lua b/oregen-manager.lua new file mode 100644 index 0000000..21fad92 --- /dev/null +++ b/oregen-manager.lua @@ -0,0 +1,222 @@ +-- Manages an oregen facility + +local STOCK_TICKER = "" +local EXPORT_STORAGE = "" + +local CRUSHER_ADDR = "Crusher" +local MELTER_ADDR = "Melter" +local WASHER_ADDR = "Washer" +local PRESS_ADDR = "Press" +local EXPORT_ADDR = "Output" + +-- amount to keep in EXPORT_STORAGE +local KEEP_STOCKED = { + ["minecraft:iron_nugget"] = 4 * 64, +} + +local GLOBAL_LIMS = { + lower = 4 * 64, + upper = 8 * 64, +} + +local LIMIT_EXCEPTIONS = {} + +local CRUSHABLE = { + "create:crimsite", +} +local WASHABLE = { +} +local MELTABLE = { + "create:crushed_raw_iron", +} +local RECIPES = { + ["minecraft:iron_nugget"] = { + {"create:crimsite", 60}, + {"minecraft:gravel", 24}, + }, +} + +local SLEEP_T = 20 + +-- logic: keep a certain amount of certain items in stock in STOCK via +-- RECIPES. while the number is over a certain amount, excess can be used +-- to keep items in stock in EXPORT_STORAGE +-- e.g. lower_lim is 100, upper_lim is 200. export_amt is 100 +-- when below 100, go into recipe mode, producing the item +-- when above 200, go into export mode, sending items to export until there are +-- 100 in EXPORT_STORAGE or until at or below 100 in stock (lower_lim) +-- i.e. mode = match (stock_amt, current_mode) { +-- (x, _), x <= lower_lim = RecipeMode; +-- (x, _), x >= upper_lim = ExportMode; +-- (_, curr) = curr; +-- } +-- in order to push the other products through the system, they will be checked +-- and sent if enough of them accrue + +function createModes (items) + local result = {} + for item, _ in pairs(items) do + result[item] = {"export", 0} + end + return result +end + +function updateModes (current_modes) + local lower_lim, upper_lim + local limits = {} + for item, _ in pairs(current_modes) do + if LIMIT_EXCEPTIONS[item] ~= nil then + lower_lim = LIMIT_EXCEPTIONS[item].lower + upper_lim = LIMIT_EXCEPTIONS[item].upper + else + lower_lim = GLOBAL_LIMS.lower + upper_lim = GLOBAL_LIMS.upper + end + limits[item] = { + lower = lower_lim, + upper = upper_lim, + } + end + for _, item in pairs(ticker.stock()) do + if limits[item.name] ~= nil then + if item.count <= limits[item.name].lower then + current_modes[item.name] = {"recipe"} + elseif item.count >= limits[item.name].upper then + current_modes[item.name] = { + "export", + item.count - limits[item.name].lower, + } + end + end + end +end + +function cycleItems (ticker) + local crush, wash, melt + crush = function (item, amt) + local limit = 64 + if item.count < limit then return end + local request = { + name = item, + _requestCount = limit + } + ticker.requestFiltered(CRUSHER_ADDR, request) + os.sleep(1) + return crush(item, amt - limit) + end + wash = function (item, amt) + local limit = 64 + if item.count < limit then return end + local request = { + name = item, + _requestCount = limit + } + ticker.requestFiltered(WASHER_ADDR, request) + os.sleep(1) + return wash(item, amt - limit) + end + melt = function (item, amt) + local limit = 9 + if item.count < limit then return end + local request = { + name = item, + _requestCount = limit + } + ticker.requestFiltered(MELTER_ADDR, request) + os.sleep(1) + return melt(item, amt - limit) + end + for _, item in pairs(ticker.stock()) do + if CRUSHABLE[item.name] ~= nil then + crush(item.name, item.count) + end + if WASHABLE[item.name] ~= nil then + wash(item.name, item.count) + end + if MELTABLE[item.name] ~= nil then + melt(item.name, item.count) + end + end +end + +function getAmounts (storage_f) + local result = {} + for _, item in pairs(storage_f()) do + if result[item.name] == nil then result[item.name] = 0 end + result[item.name] = result[item.name] + item.count + end + return result +end + +function getNumCraftable (recipe, current_stock) + local result = nil + local item, count + for _, ingredient in ipairs(recipe) do + item, count = ingredient[1], ingredient[2] + if current_stock[item] == nil then return 0 end + local num = math.floor(current_stock[item] / count)) + if result == nil then + result = num + else + result = math.min(result, num) + end + 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) + if ingredient == nil then return end + local item = { + name = ingredient[1], + _requestCount = ingredient[2], + } + return item, createRequest(recipe) + end + while count > 0 do + ticker.requestFiltered(PRESS_ADDR, createRequest(recipe)) + os.sleep(1) + count = count - 1 + end +end + +function export (ticker, item, amt) + if amt <= 0 then return end + local request = { + name = item, + _requestCount = amt + } + ticker.requestFiltered(EXPORT_ADDR, request) +end + +function run (ticker, export_storage, current_modes) + cycleItems(ticker) + updateModes(current_modes) + local export_amounts = getAmounts(export_storage.list) + local stock_amounts = getAmounts(ticker.stock) + for item, mode in pairs(current_modes) do + -- mode[1] is mode, mode[2] is amt_extra when exporting + 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) + craftRecipe(ticker, recipe, count) + elseif mode[1] == "export" then + local amt_needed = export_amounts[item] + local amt = math.min(amt_needed, mode[2]) + export(ticker, item, amt) + end + end + os.sleep(SLEEP_T) + return run (ticker, export_storage, current_modes) +end + +if arg ~= nil and arg[1] == "run" then + local ticker = peripheral.wrap(STOCK_TICKER) + local export_storage = peripheral.wrap(EXPORT_STORAGE) + local current_modes = createModes(KEEP_STOCKED) + run(ticker, export_storage, current_modes) +end From 685a3d47e072f41173a686d18fe4ede6ceaa932f Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Fri, 2 Jan 2026 22:40:12 -0500 Subject: [PATCH 02/32] fix: remove syntax errors --- oregen-manager.lua | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index 21fad92..3cf8da1 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -61,7 +61,7 @@ function createModes (items) return result end -function updateModes (current_modes) +function updateModes (ticker, current_modes) local lower_lim, upper_lim local limits = {} for item, _ in pairs(current_modes) do @@ -154,7 +154,7 @@ function getNumCraftable (recipe, current_stock) for _, ingredient in ipairs(recipe) do item, count = ingredient[1], ingredient[2] if current_stock[item] == nil then return 0 end - local num = math.floor(current_stock[item] / count)) + local num = math.floor(current_stock[item] / count) if result == nil then result = num else @@ -194,7 +194,7 @@ end function run (ticker, export_storage, current_modes) cycleItems(ticker) - updateModes(current_modes) + updateModes(ticker, current_modes) local export_amounts = getAmounts(export_storage.list) local stock_amounts = getAmounts(ticker.stock) for item, mode in pairs(current_modes) do @@ -205,7 +205,9 @@ function run (ticker, export_storage, current_modes) local count = getNumCraftable(recipe, stock_amounts) craftRecipe(ticker, recipe, count) elseif mode[1] == "export" then - local amt_needed = export_amounts[item] + local export_amt = export_amounts[item] + if export_amt == nil then export_amt = 0 end + local amt_needed = KEEP_STOCKED[item] - export_amt local amt = math.min(amt_needed, mode[2]) export(ticker, item, amt) end From 24e9672578bbe77bd620a12415fe5be0aedf56a2 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Fri, 2 Jan 2026 22:47:22 -0500 Subject: [PATCH 03/32] chore: remove explanatory comment --- oregen-manager.lua | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index 3cf8da1..922e09f 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -38,21 +38,6 @@ local RECIPES = { local SLEEP_T = 20 --- logic: keep a certain amount of certain items in stock in STOCK via --- RECIPES. while the number is over a certain amount, excess can be used --- to keep items in stock in EXPORT_STORAGE --- e.g. lower_lim is 100, upper_lim is 200. export_amt is 100 --- when below 100, go into recipe mode, producing the item --- when above 200, go into export mode, sending items to export until there are --- 100 in EXPORT_STORAGE or until at or below 100 in stock (lower_lim) --- i.e. mode = match (stock_amt, current_mode) { --- (x, _), x <= lower_lim = RecipeMode; --- (x, _), x >= upper_lim = ExportMode; --- (_, curr) = curr; --- } --- in order to push the other products through the system, they will be checked --- and sent if enough of them accrue - function createModes (items) local result = {} for item, _ in pairs(items) do From 656c6f88ba39134d173db45d8491581c2fc790b4 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Fri, 2 Jan 2026 22:58:55 -0500 Subject: [PATCH 04/32] feat: add more metals --- oregen-manager.lua | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index 922e09f..097d183 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -12,6 +12,9 @@ local EXPORT_ADDR = "Output" -- amount to keep in EXPORT_STORAGE local KEEP_STOCKED = { ["minecraft:iron_nugget"] = 4 * 64, + ["minecraft:gold_nugget"] = 4 * 64, + ["create:zinc_nugget"] = 4 * 64, + ["create:copper_nugget"] = 4 * 64, } local GLOBAL_LIMS = { @@ -23,17 +26,35 @@ local LIMIT_EXCEPTIONS = {} local CRUSHABLE = { "create:crimsite", + "create:asurine", + "create:veridium", + "create:ochrum", } local WASHABLE = { } local MELTABLE = { "create:crushed_raw_iron", + "create:crushed_raw_zinc", + "create:crushed_raw_gold", + "create:crushed_raw_copper", } local RECIPES = { ["minecraft:iron_nugget"] = { - {"create:crimsite", 60}, + {"minecraft:iron_nugget", 60}, {"minecraft:gravel", 24}, }, + ["minecraft:gold_nugget"] = { + {"minecraft:gold_nugget", 64}, + {"minecraft:gravel", 64}, + }, + ["create:zinc_nugget"] = { + {"create:zinc_nugget", 64}, + {"minecraft:gravel", 32}, + }, + ["create:copper_nugget"] = { + {"create:copper_nugget", 63}, + {"minecraft:gravel", 18}, + }, } local SLEEP_T = 20 From 7d9970d3840d92e2bbafe169d23de0e6cf0443fd Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Fri, 2 Jan 2026 23:14:51 -0500 Subject: [PATCH 05/32] feat: add speedometer function --- oregen-manager.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/oregen-manager.lua b/oregen-manager.lua index 097d183..3f74291 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -2,6 +2,7 @@ local STOCK_TICKER = "" local EXPORT_STORAGE = "" +local SPEEDOMETER = "" local CRUSHER_ADDR = "Crusher" local MELTER_ADDR = "Melter" @@ -199,6 +200,10 @@ function export (ticker, item, amt) end function run (ticker, export_storage, current_modes) + if SPEEDOMETER ~= "" and peripheral.call(SPEEDOMETER, "getSpeed") == 0 then + os.sleep(SLEEP_T) + return run (ticker, export_storage, current_modes) + end cycleItems(ticker) updateModes(ticker, current_modes) local export_amounts = getAmounts(export_storage.list) From e4e78789870d295714433810d2485036d4d7aa10 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Fri, 2 Jan 2026 23:21:00 -0500 Subject: [PATCH 06/32] fix: remove syntax errors --- oregen-manager.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index 3f74291..b026931 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -19,8 +19,8 @@ local KEEP_STOCKED = { } local GLOBAL_LIMS = { - lower = 4 * 64, - upper = 8 * 64, + lower = 6 * 64, + upper = 10 * 64, } local LIMIT_EXCEPTIONS = {} @@ -102,7 +102,7 @@ function cycleItems (ticker) local crush, wash, melt crush = function (item, amt) local limit = 64 - if item.count < limit then return end + if amt < limit then return end local request = { name = item, _requestCount = limit @@ -113,7 +113,7 @@ function cycleItems (ticker) end wash = function (item, amt) local limit = 64 - if item.count < limit then return end + if amt < limit then return end local request = { name = item, _requestCount = limit @@ -124,7 +124,7 @@ function cycleItems (ticker) end melt = function (item, amt) local limit = 9 - if item.count < limit then return end + if amt < limit then return end local request = { name = item, _requestCount = limit From 28e72b142fc05e47b41d8546511dfbb12a844ce9 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Fri, 2 Jan 2026 23:37:41 -0500 Subject: [PATCH 07/32] fix: rework using up extra materials --- oregen-manager.lua | 74 +++++++++++++++------------------------------- 1 file changed, 24 insertions(+), 50 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index b026931..e926857 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -25,20 +25,19 @@ local GLOBAL_LIMS = { local LIMIT_EXCEPTIONS = {} -local CRUSHABLE = { - "create:crimsite", - "create:asurine", - "create:veridium", - "create:ochrum", -} -local WASHABLE = { -} -local MELTABLE = { - "create:crushed_raw_iron", - "create:crushed_raw_zinc", - "create:crushed_raw_gold", - "create:crushed_raw_copper", +-- if these exist, they will be used up +local PRODUCTS = { + {"create:crimsite", CRUSHER_ADDR}, + {"create:asurine", CRUSHER_ADDR}, + {"create:veridium", CRUSHER_ADDR}, + {"create:ochrum", CRUSHER_ADDR}, + {"create:crushed_raw_iron", MELTER_ADDR}, + {"create:crushed_raw_zinc", MELTER_ADDR}, + {"create:crushed_raw_gold", MELTER_ADDR}, + {"create:crushed_raw_copper", MELTER_ADDR}, } + +-- these will be crafted when needed local RECIPES = { ["minecraft:iron_nugget"] = { {"minecraft:iron_nugget", 60}, @@ -98,50 +97,25 @@ function updateModes (ticker, current_modes) end end -function cycleItems (ticker) - local crush, wash, melt - crush = function (item, amt) +function cycleItems (ticker, items) + local makeRequest + makeRequest = function (item, amt, addr) local limit = 64 + if addr = MELTER_ADDR then limit = 9 end if amt < limit then return end local request = { name = item, _requestCount = limit } - ticker.requestFiltered(CRUSHER_ADDR, request) + ticker.requestFiltered(addr, request) os.sleep(1) - return crush(item, amt - limit) + return makeRequest(item, amt - limit) end - wash = function (item, amt) - local limit = 64 - if amt < limit then return end - local request = { - name = item, - _requestCount = limit - } - ticker.requestFiltered(WASHER_ADDR, request) - os.sleep(1) - return wash(item, amt - limit) - end - melt = function (item, amt) - local limit = 9 - if amt < limit then return end - local request = { - name = item, - _requestCount = limit - } - ticker.requestFiltered(MELTER_ADDR, request) - os.sleep(1) - return melt(item, amt - limit) - end - for _, item in pairs(ticker.stock()) do - if CRUSHABLE[item.name] ~= nil then - crush(item.name, item.count) - end - if WASHABLE[item.name] ~= nil then - wash(item.name, item.count) - end - if MELTABLE[item.name] ~= nil then - melt(item.name, item.count) + for _, pair in pairs(PRODUCTS) do + local name, addr = pair[1], pair[2] + if items[name] ~= nil then + local amt = items[name] + makeRequest(name, amt, addr) end end end @@ -204,10 +178,10 @@ function run (ticker, export_storage, current_modes) os.sleep(SLEEP_T) return run (ticker, export_storage, current_modes) end - cycleItems(ticker) updateModes(ticker, current_modes) local export_amounts = getAmounts(export_storage.list) local stock_amounts = getAmounts(ticker.stock) + cycleItems(ticker, stock_amounts) for item, mode in pairs(current_modes) do -- mode[1] is mode, mode[2] is amt_extra when exporting if mode[1] == "recipe" then From 0f1ace911626ae7f16e733da8f2e59764859eb90 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Fri, 2 Jan 2026 23:58:27 -0500 Subject: [PATCH 08/32] fix: get to a working state --- oregen-manager.lua | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index e926857..155eef9 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -101,7 +101,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 +109,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] @@ -142,20 +142,22 @@ 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[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)) From 83f2ec6012beaf40500c4220d05f212ad8d4bee5 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 3 Jan 2026 00:01:11 -0500 Subject: [PATCH 09/32] feat: generalize recipe handling --- oregen-manager.lua | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index 155eef9..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, }, } @@ -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) @@ -151,7 +163,7 @@ function craftRecipe (ticker, recipe, count) local createRequest createRequest = function (recipe, i) if i == nil then i = 1 end - local ingredient = recipe[i] + local ingredient = recipe.ingredients[i] if ingredient == nil then return end local item = { name = ingredient[1], @@ -160,7 +172,7 @@ function craftRecipe (ticker, recipe, count) 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 @@ -189,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] From 9b9f2e3a9984776d8bacd77e228a6b10b3423e63 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 3 Jan 2026 00:13:15 -0500 Subject: [PATCH 10/32] feat: add netherrack support --- oregen-manager.lua | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index 7c191a7..3d29fb6 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -6,6 +6,7 @@ local SPEEDOMETER = "" local CRUSHER_ADDR = "Crusher" local MELTER_ADDR = "Melter" +local MIXER_ADDR = "Mixer" local WASHER_ADDR = "Washer" local PRESS_ADDR = "Press" local EXPORT_ADDR = "Output" @@ -16,6 +17,8 @@ local KEEP_STOCKED = { ["minecraft:gold_nugget"] = 4 * 64, ["create:zinc_nugget"] = 4 * 64, ["create:copper_nugget"] = 4 * 64, + ["minecraft:netherrack"] = 4 * 64, + ["create:cinder_flour"] = 64, } local GLOBAL_LIMS = { @@ -28,13 +31,13 @@ local LIMIT_EXCEPTIONS = {} -- if these exist, they will be used up local PRODUCTS = { {"create:crimsite", CRUSHER_ADDR}, - {"create:asurine", CRUSHER_ADDR}, - {"create:veridium", CRUSHER_ADDR}, - {"create:ochrum", CRUSHER_ADDR}, {"create:crushed_raw_iron", MELTER_ADDR}, {"create:crushed_raw_zinc", MELTER_ADDR}, - {"create:crushed_raw_gold", MELTER_ADDR}, + {"create:asurine", CRUSHER_ADDR}, {"create:crushed_raw_copper", MELTER_ADDR}, + {"create:veridium", CRUSHER_ADDR}, + {"create:ochrum", CRUSHER_ADDR}, + {"create:crushed_raw_gold", MELTER_ADDR}, } -- these will be crafted when needed @@ -67,6 +70,19 @@ local RECIPES = { }, addr = PRESS_ADDR, }, + ["minecraft:netherrack"] = { + ingredients = { + {"create:cinder_flour", 63}, + {"minecraft:cobblestone", 63}, + }, + addr = MIXER_ADDR, + }, + ["create:cinder_flour"] = { + ingredients = { + {"minecraft:netherrack", 64} + }, + addr = CRUSHER_ADDR, + }, } local SLEEP_T = 20 From 0f208f77f205b9a27e570218446a88504da58ebf Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 3 Jan 2026 00:21:39 -0500 Subject: [PATCH 11/32] fix: refactor modes update --- oregen-manager.lua | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index 3d29fb6..aa75535 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -95,7 +95,7 @@ function createModes (items) return result end -function updateModes (ticker, current_modes) +function updateModes (current_modes, current_stock) local lower_lim, upper_lim local limits = {} for item, _ in pairs(current_modes) do @@ -111,16 +111,16 @@ function updateModes (ticker, current_modes) upper = upper_lim, } end - for _, item in pairs(ticker.stock()) do - if limits[item.name] ~= nil then - if item.count <= limits[item.name].lower then - current_modes[item.name] = {"recipe"} - elseif item.count >= limits[item.name].upper then - current_modes[item.name] = { - "export", - item.count - limits[item.name].lower, - } - end + for item, limits in pairs(limits) do + local count = current_stock[item] + if count == nil then count = 0 end + if count <= limits.lower then + current_modes[item] = {"recipe"} + elseif count >= limits.upper then + current_modes[item] = { + "export", + count - limits.lower, + } end end end @@ -208,9 +208,9 @@ function run (ticker, export_storage, current_modes) os.sleep(SLEEP_T) return run (ticker, export_storage, current_modes) end - updateModes(ticker, current_modes) local export_amounts = getAmounts(export_storage.list) local stock_amounts = getAmounts(ticker.stock) + updateModes(current_modes, stock_amounts) cycleItems(ticker, stock_amounts) for item, mode in pairs(current_modes) do -- mode[1] is mode, mode[2] is amt_extra when exporting From ede34829a95852d92d029d7b75b7d5adf5a5e1a3 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 3 Jan 2026 01:10:06 -0500 Subject: [PATCH 12/32] fix: limit cinder flour churn --- oregen-manager.lua | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index aa75535..416d82c 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -26,7 +26,12 @@ local GLOBAL_LIMS = { upper = 10 * 64, } -local LIMIT_EXCEPTIONS = {} +local LIMIT_EXCEPTIONS = { + ["create:cinder_flour"] = { + lower = 64, + upper = 2 * 64, + }, +} -- if these exist, they will be used up local PRODUCTS = { @@ -72,8 +77,8 @@ local RECIPES = { }, ["minecraft:netherrack"] = { ingredients = { - {"create:cinder_flour", 63}, - {"minecraft:cobblestone", 63}, + {"create:cinder_flour", 64}, + {"minecraft:cobblestone", 64}, }, addr = MIXER_ADDR, }, From bab995ee98474d083d419c424d957d30bb19a046 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 3 Jan 2026 18:08:11 -0500 Subject: [PATCH 13/32] feat: add gravel to craftable items No longer need to stock gravel from external source, only cobblestone. --- oregen-manager.lua | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index 416d82c..03e246e 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -18,7 +18,8 @@ local KEEP_STOCKED = { ["create:zinc_nugget"] = 4 * 64, ["create:copper_nugget"] = 4 * 64, ["minecraft:netherrack"] = 4 * 64, - ["create:cinder_flour"] = 64, + ["create:cinder_flour"] = 0, + ["minecraft:gravel"] = 0, } local GLOBAL_LIMS = { @@ -31,6 +32,10 @@ local LIMIT_EXCEPTIONS = { lower = 64, upper = 2 * 64, }, + ["minecraft:gravel"] = { + lower = 10 * 64, + upper = 20 * 64, + }, } -- if these exist, they will be used up @@ -47,6 +52,12 @@ local PRODUCTS = { -- these will be crafted when needed local RECIPES = { + ["minecraft:gravel"] = { + ingredients = { + {"minecraft:cobblestone", 2 * 64}, + }, + addr = CRUSHER_ADDR, + }, ["minecraft:iron_nugget"] = { ingredients = { {"minecraft:iron_nugget", 60}, From 2c90fb1868a175314b18655b4e54c0f823f405c9 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 3 Jan 2026 18:08:51 -0500 Subject: [PATCH 14/32] feat: add nether brick Can be used in my current pack to make netherite scrap. --- oregen-manager.lua | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/oregen-manager.lua b/oregen-manager.lua index 03e246e..d8faded 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -8,6 +8,8 @@ local CRUSHER_ADDR = "Crusher" local MELTER_ADDR = "Melter" local MIXER_ADDR = "Mixer" local WASHER_ADDR = "Washer" +local SMELTER_ADDR = "Smelter" +local HAUNTER_ADDR = "Haunter" local PRESS_ADDR = "Press" local EXPORT_ADDR = "Output" @@ -20,6 +22,7 @@ local KEEP_STOCKED = { ["minecraft:netherrack"] = 4 * 64, ["create:cinder_flour"] = 0, ["minecraft:gravel"] = 0, + ["minecraft:nether_brick"] = 4 * 64, } local GLOBAL_LIMS = { @@ -36,6 +39,10 @@ local LIMIT_EXCEPTIONS = { lower = 10 * 64, upper = 20 * 64, }, + ["minecraft:nether_brick"] = { + lower = 0, + upper = 4 * 64, + }, } -- if these exist, they will be used up @@ -48,6 +55,10 @@ local PRODUCTS = { {"create:veridium", CRUSHER_ADDR}, {"create:ochrum", CRUSHER_ADDR}, {"create:crushed_raw_gold", MELTER_ADDR}, + {"minecraft:sand", WASHER_ADDR}, + {"minecraft:clay_ball", SMELTER_ADDR}, + {"minecraft:brick", HAUNTER_ADDR}, + {"minecraft:flint", CRUSHER_ADDR}, } -- these will be crafted when needed @@ -99,6 +110,12 @@ local RECIPES = { }, addr = CRUSHER_ADDR, }, + ["minecraft:nether_brick"] = { + ingredients = { + {"minecraft:gravel", 2 * 64}, + }, + addr = CRUSHER_ADDR, + }, } local SLEEP_T = 20 From d68d7993fa95566dcbf92af53ef5cf7ddfb5bd64 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 3 Jan 2026 18:24:06 -0500 Subject: [PATCH 15/32] feat: add ability to limit amount of crafts at one time --- oregen-manager.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/oregen-manager.lua b/oregen-manager.lua index d8faded..1b5666b 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -68,6 +68,7 @@ local RECIPES = { {"minecraft:cobblestone", 2 * 64}, }, addr = CRUSHER_ADDR, + limit = 6, }, ["minecraft:iron_nugget"] = { ingredients = { @@ -115,6 +116,7 @@ local RECIPES = { {"minecraft:gravel", 2 * 64}, }, addr = CRUSHER_ADDR, + limit = 4, }, } @@ -209,6 +211,9 @@ end function craftRecipe (ticker, recipe, count) if count == nil then count = 1 end + if recipe.limit ~= nil then + count = math.min(count, recipe.limit) + end local createRequest createRequest = function (recipe, i) if i == nil then i = 1 end From c9e50405aae96c0e7b58dfb91151fb2914136cc0 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 3 Jan 2026 18:48:26 -0500 Subject: [PATCH 16/32] feat: craft netherite scrap directly --- oregen-manager.lua | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index 1b5666b..0ada26e 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -22,7 +22,8 @@ local KEEP_STOCKED = { ["minecraft:netherrack"] = 4 * 64, ["create:cinder_flour"] = 0, ["minecraft:gravel"] = 0, - ["minecraft:nether_brick"] = 4 * 64, + ["minecraft:netherite_scrap"] = 4, + ["minecraft:nether_bricks"] = 0, } local GLOBAL_LIMS = { @@ -39,9 +40,9 @@ local LIMIT_EXCEPTIONS = { lower = 10 * 64, upper = 20 * 64, }, - ["minecraft:nether_brick"] = { + ["minecraft:netherite_scrap"] = { lower = 0, - upper = 4 * 64, + upper = 4, }, } @@ -59,6 +60,7 @@ local PRODUCTS = { {"minecraft:clay_ball", SMELTER_ADDR}, {"minecraft:brick", HAUNTER_ADDR}, {"minecraft:flint", CRUSHER_ADDR}, + {"minecraft:nether_bricks", CRUSHER_ADDR}, } -- these will be crafted when needed @@ -111,12 +113,18 @@ local RECIPES = { }, addr = CRUSHER_ADDR, }, - ["minecraft:nether_brick"] = { + ["minecraft:netherite_scrap"] = { ingredients = { {"minecraft:gravel", 2 * 64}, }, addr = CRUSHER_ADDR, - limit = 4, + limit = 6, + }, + ["minecraft:nether_bricks"] = { + ingredients = { + {"minecraft:nether_brick", 64}, + }, + addr = PRESS_ADDR, }, } From 528d5f7f80f78296a91468077eff491456e06503 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 3 Jan 2026 19:16:40 -0500 Subject: [PATCH 17/32] feat: add nickel, bauxite, and silver --- oregen-manager.lua | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/oregen-manager.lua b/oregen-manager.lua index 0ada26e..fedb8fc 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -24,6 +24,10 @@ local KEEP_STOCKED = { ["minecraft:gravel"] = 0, ["minecraft:netherite_scrap"] = 4, ["minecraft:nether_bricks"] = 0, + ["oreganized:silver_nugget"] = 4 * 64, + ["tfmg:nickel_nugget"] = 4 * 64, + ["tfmg:lithium_nugget"] = 64, + ["tfmg:bauxite_powder"] = 4 * 64, } local GLOBAL_LIMS = { @@ -44,6 +48,10 @@ local LIMIT_EXCEPTIONS = { lower = 0, upper = 4, }, + ["tfmg:lithium_nugget"] = { + lower = -1, + upper = 0, + }, } -- if these exist, they will be used up @@ -61,6 +69,11 @@ local PRODUCTS = { {"minecraft:brick", HAUNTER_ADDR}, {"minecraft:flint", CRUSHER_ADDR}, {"minecraft:nether_bricks", CRUSHER_ADDR}, + {"minecraft:basalt", CRUSHER_ADDR}, + {"create:crushed_raw_silver", WASHER_ADDR}, + {"minecraft:calcite", CRUSHER_ADDR}, + {"create:crushed_raw_nickel", WASHER_ADDR}, + {"tfmg:bauxite", CRUSHER_ADDR}, } -- these will be crafted when needed @@ -126,6 +139,27 @@ local RECIPES = { }, addr = PRESS_ADDR, }, + ["oreganized:silver_nugget"] = { + ingredients = { + {"oreganized:silver_nugget", 60}, + {"minecraft:gravel", 24}, + }, + addr = PRESS_ADDR, + }, + ["tfmg:nickel_nugget"] = { + ingredients = { + {"tfmg:nickel_nugget", 64}, + {"minecraft:gravel", 64}, + }, + addr = PRESS_ADDR, + }, + ["tfmg:bauxite_powder"] = { + ingredients = { + {"tfmg:bauxite_powder", 64}, + {"minecraft:gravel", 64}, + }, + addr = PRESS_ADDR, + }, } local SLEEP_T = 20 From 04f6d66e5647d442d7aff19ffa356086286b11a3 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 3 Jan 2026 19:26:39 -0500 Subject: [PATCH 18/32] feat: track item usage better --- oregen-manager.lua | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index fedb8fc..9a74d32 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -251,11 +251,19 @@ function getNumCraftable (ingredients, current_stock) return result end -function craftRecipe (ticker, recipe, count) - if count == nil then count = 1 end +function adjustStock (current_stock, recipe, count) + for _, ingredient in ipairs(recipe.ingredients) do + item, i_count = ingredient[1], ingredient[2] + current_stock[item] = current_stock[item] - (i_count * count) + end +end + +function craftRecipe (ticker, recipe, current_stock) + local count = getNumCraftable(recipe.ingredients, current_stock) if recipe.limit ~= nil then count = math.min(count, recipe.limit) end + adjustStock(current_stock, recipe, count) local createRequest createRequest = function (recipe, i) if i == nil then i = 1 end @@ -297,8 +305,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.ingredients, stock_amounts) - craftRecipe(ticker, recipe, count) + craftRecipe(ticker, recipe, stock_amounts) elseif mode[1] == "export" then local export_amt = export_amounts[item] if export_amt == nil then export_amt = 0 end From 192f33c823bca521b92cb9848ea8445e3d65b077 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 3 Jan 2026 19:42:51 -0500 Subject: [PATCH 19/32] fix: remove syntax and logic errors --- oregen-manager.lua | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index 9a74d32..1719662 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -251,8 +251,10 @@ function getNumCraftable (ingredients, current_stock) return result end -function adjustStock (current_stock, recipe, count) - for _, ingredient in ipairs(recipe.ingredients) do +function adjustStock (current_stock, ingredients, count) + if count == 0 then return end + local item, i_count + for _, ingredient in ipairs(ingredients) do item, i_count = ingredient[1], ingredient[2] current_stock[item] = current_stock[item] - (i_count * count) end @@ -263,7 +265,7 @@ function craftRecipe (ticker, recipe, current_stock) if recipe.limit ~= nil then count = math.min(count, recipe.limit) end - adjustStock(current_stock, recipe, count) + adjustStock(current_stock, recipe.ingredients, count) local createRequest createRequest = function (recipe, i) if i == nil then i = 1 end From b176ec809b0aaaeb49aa2487a1d372eb1fc4df39 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 3 Jan 2026 19:45:39 -0500 Subject: [PATCH 20/32] feat: allow for custom limits on PRODUCTS, can set an optional 3rd argument as limit override --- oregen-manager.lua | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index 1719662..2c65458 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -70,9 +70,9 @@ local PRODUCTS = { {"minecraft:flint", CRUSHER_ADDR}, {"minecraft:nether_bricks", CRUSHER_ADDR}, {"minecraft:basalt", CRUSHER_ADDR}, - {"create:crushed_raw_silver", WASHER_ADDR}, + {"create:crushed_raw_silver", WASHER_ADDR, 16}, {"minecraft:calcite", CRUSHER_ADDR}, - {"create:crushed_raw_nickel", WASHER_ADDR}, + {"create:crushed_raw_nickel", WASHER_ADDR, 32}, {"tfmg:bauxite", CRUSHER_ADDR}, } @@ -204,9 +204,10 @@ end function cycleItems (ticker, items) local makeRequest - makeRequest = function (item, amt, addr) + makeRequest = function (item, amt, addr, limit_override) local limit = 64 if addr == MELTER_ADDR then limit = 9 end + if limit_override ~= nil then limit = limit_override end if amt < limit then return end local request = { name = item, @@ -214,13 +215,13 @@ function cycleItems (ticker, items) } ticker.requestFiltered(addr, request) os.sleep(1) - return makeRequest(item, amt - limit, addr) + return makeRequest(item, amt - limit, addr, limit_override) end for _, pair in pairs(PRODUCTS) do - local name, addr = pair[1], pair[2] + local name, addr, limit = pair[1], pair[2], pair[3] if items[name] ~= nil then local amt = items[name] - makeRequest(name, amt, addr) + makeRequest(name, amt, addr, limit) end end end From 154fe1e4706c9bf122a5b0232bf1f1f302b6eabb Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 3 Jan 2026 20:11:33 -0500 Subject: [PATCH 21/32] misc: set limit on bauxite --- oregen-manager.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/oregen-manager.lua b/oregen-manager.lua index 2c65458..7006526 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -159,6 +159,7 @@ local RECIPES = { {"minecraft:gravel", 64}, }, addr = PRESS_ADDR, + limit = 6, }, } From f0477c6a4daa5adb149e6f1c75dae14856113557 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Mon, 12 Jan 2026 21:34:49 -0500 Subject: [PATCH 22/32] feat: allow keeping products keep = allows a certain amount to not be processed --- oregen-manager.lua | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index 7006526..cb9e01d 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -55,6 +55,8 @@ local LIMIT_EXCEPTIONS = { } -- if these exist, they will be used up +-- "limit" is the limit on the amt sent at a time +-- "keep" is the amount not to use up local PRODUCTS = { {"create:crimsite", CRUSHER_ADDR}, {"create:crushed_raw_iron", MELTER_ADDR}, @@ -70,9 +72,9 @@ local PRODUCTS = { {"minecraft:flint", CRUSHER_ADDR}, {"minecraft:nether_bricks", CRUSHER_ADDR}, {"minecraft:basalt", CRUSHER_ADDR}, - {"create:crushed_raw_silver", WASHER_ADDR, 16}, + {"create:crushed_raw_silver", WASHER_ADDR, limit = 16}, {"minecraft:calcite", CRUSHER_ADDR}, - {"create:crushed_raw_nickel", WASHER_ADDR, 32}, + {"create:crushed_raw_nickel", WASHER_ADDR, limit = 32}, {"tfmg:bauxite", CRUSHER_ADDR}, } @@ -219,9 +221,11 @@ function cycleItems (ticker, items) return makeRequest(item, amt - limit, addr, limit_override) end for _, pair in pairs(PRODUCTS) do - local name, addr, limit = pair[1], pair[2], pair[3] + local name, addr, limit, keep = pair[1], pair[2], pair.limit, pair.keep if items[name] ~= nil then local amt = items[name] + if keep ~= nil then amt = amt - keep end + if amt < 0 then amt = 0 end makeRequest(name, amt, addr, limit) end end From 08d41fe70b308082b42c695a1918f419f5caedfd Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Mon, 12 Jan 2026 21:36:07 -0500 Subject: [PATCH 23/32] feat: add andesite --- oregen-manager.lua | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index cb9e01d..7493801 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -28,6 +28,8 @@ local KEEP_STOCKED = { ["tfmg:nickel_nugget"] = 4 * 64, ["tfmg:lithium_nugget"] = 64, ["tfmg:bauxite_powder"] = 4 * 64, + ["minecraft:flint"] = 0, + ["minecraft:andesite"] = 4 * 64, } local GLOBAL_LIMS = { @@ -52,6 +54,10 @@ local LIMIT_EXCEPTIONS = { lower = -1, upper = 0, }, + ["minecraft:flint"] = { + lower = 64, + upper = 2 * 64, + }, } -- if these exist, they will be used up @@ -69,7 +75,7 @@ local PRODUCTS = { {"minecraft:sand", WASHER_ADDR}, {"minecraft:clay_ball", SMELTER_ADDR}, {"minecraft:brick", HAUNTER_ADDR}, - {"minecraft:flint", CRUSHER_ADDR}, + {"minecraft:flint", CRUSHER_ADDR, keep = 4 * 64}, {"minecraft:nether_bricks", CRUSHER_ADDR}, {"minecraft:basalt", CRUSHER_ADDR}, {"create:crushed_raw_silver", WASHER_ADDR, limit = 16}, @@ -163,6 +169,21 @@ local RECIPES = { addr = PRESS_ADDR, limit = 6, }, + ["minecraft:flint"] = { + ingredients = { + {"minecraft:gravel", 64}, + }, + addr = WASHER_ADDR, + limit = 8, + }, + ["minecraft:andesite"] = { + ingredients = { + {"minecraft:flint", 64}, + {"minecraft:gravel", 32}, + }, + addr = PRESS_ADDR, + limit = 6, + }, } local SLEEP_T = 20 From cad4ef0c44e897d729da1e68d97cc5c56326a2ac Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Mon, 12 Jan 2026 21:41:47 -0500 Subject: [PATCH 24/32] fix: alter andesite limits Reflects that andesite does not require andesite to create. --- oregen-manager.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/oregen-manager.lua b/oregen-manager.lua index 7493801..0239b7b 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -58,6 +58,10 @@ local LIMIT_EXCEPTIONS = { lower = 64, upper = 2 * 64, }, + ["minecraft:andesite"] = { + lower = 0, + upper = 2 * 64, + }, } -- if these exist, they will be used up From 3ec00d5c814ff095f5b1f2f737b1a15fd0a4032c Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Mon, 12 Jan 2026 22:55:17 -0500 Subject: [PATCH 25/32] fix: recipes should go before product cycling --- oregen-manager.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index 0239b7b..ef904c4 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -332,7 +332,6 @@ function run (ticker, export_storage, current_modes) local export_amounts = getAmounts(export_storage.list) local stock_amounts = getAmounts(ticker.stock) updateModes(current_modes, stock_amounts) - cycleItems(ticker, stock_amounts) for item, mode in pairs(current_modes) do -- mode[1] is mode, mode[2] is amt_extra when exporting if mode[1] == "recipe" then @@ -347,6 +346,7 @@ function run (ticker, export_storage, current_modes) export(ticker, item, amt) end end + cycleItems(ticker, stock_amounts) os.sleep(SLEEP_T) return run (ticker, export_storage, current_modes) end From 4e2fdccc497d2a0a80a0e0ff86dd82d0bf4b8d4b Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 17 Jan 2026 17:37:21 -0500 Subject: [PATCH 26/32] fix: adjust copper gen fixes copper deadlock also added more helpful info in comments --- oregen-manager.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index ef904c4..6bab48b 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -65,15 +65,15 @@ local LIMIT_EXCEPTIONS = { } -- if these exist, they will be used up --- "limit" is the limit on the amt sent at a time --- "keep" is the amount not to use up +-- "limit" is the limit on the amt sent at a time (default is 64) +-- "keep" is the amount not to use up (default is 0) local PRODUCTS = { {"create:crimsite", CRUSHER_ADDR}, {"create:crushed_raw_iron", MELTER_ADDR}, {"create:crushed_raw_zinc", MELTER_ADDR}, {"create:asurine", CRUSHER_ADDR}, {"create:crushed_raw_copper", MELTER_ADDR}, - {"create:veridium", CRUSHER_ADDR}, + {"create:veridium", CRUSHER_ADDR, limit = 32}, {"create:ochrum", CRUSHER_ADDR}, {"create:crushed_raw_gold", MELTER_ADDR}, {"minecraft:sand", WASHER_ADDR}, From e82591297cc690190ead6da9851daba44f199b59 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 17 Jan 2026 19:02:39 -0500 Subject: [PATCH 27/32] fix: fix startup logic Previous: if a KEEP_STOCKED material was between lower and upper, it would sit there on startup, regardless of whether material was needed in export. New logic is that materials between the lower and upper bound will try to export until the lower bound is reached on startup. --- oregen-manager.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index 6bab48b..aad4f4d 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -200,7 +200,7 @@ function createModes (items) return result end -function updateModes (current_modes, current_stock) +function updateModes (current_modes, current_stock, first_run) local lower_lim, upper_lim local limits = {} for item, _ in pairs(current_modes) do @@ -221,7 +221,7 @@ function updateModes (current_modes, current_stock) if count == nil then count = 0 end if count <= limits.lower then current_modes[item] = {"recipe"} - elseif count >= limits.upper then + elseif count >= limits.upper or first_run then current_modes[item] = { "export", count - limits.lower, @@ -324,14 +324,14 @@ function export (ticker, item, amt) ticker.requestFiltered(EXPORT_ADDR, request) end -function run (ticker, export_storage, current_modes) +function run (ticker, export_storage, current_modes, first_run) if SPEEDOMETER ~= "" and peripheral.call(SPEEDOMETER, "getSpeed") == 0 then os.sleep(SLEEP_T) - return run (ticker, export_storage, current_modes) + return run (ticker, export_storage, current_modes, first_run) end local export_amounts = getAmounts(export_storage.list) local stock_amounts = getAmounts(ticker.stock) - updateModes(current_modes, stock_amounts) + updateModes(current_modes, stock_amounts, first_run) for item, mode in pairs(current_modes) do -- mode[1] is mode, mode[2] is amt_extra when exporting if mode[1] == "recipe" then @@ -355,5 +355,5 @@ if arg ~= nil and arg[1] == "run" then local ticker = peripheral.wrap(STOCK_TICKER) local export_storage = peripheral.wrap(EXPORT_STORAGE) local current_modes = createModes(KEEP_STOCKED) - run(ticker, export_storage, current_modes) + run(ticker, export_storage, current_modes, true) end From eb73ea0534ec4b6b71dd678b8ab19835742305a1 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sun, 18 Jan 2026 12:34:18 -0500 Subject: [PATCH 28/32] feat: add ability to send items to main storage Helps keep room available in storage, prevents overflow. --- oregen-manager.lua | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index aad4f4d..a8811e1 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -12,6 +12,9 @@ local SMELTER_ADDR = "Smelter" local HAUNTER_ADDR = "Haunter" local PRESS_ADDR = "Press" local EXPORT_ADDR = "Output" +-- Packages sent here leave the oregen system and go to main storage. +-- Helps keep slots freed up in oregen storage +local MAIN_STORAGE_ADDR = "Main Storage" -- amount to keep in EXPORT_STORAGE local KEEP_STOCKED = { @@ -26,7 +29,6 @@ local KEEP_STOCKED = { ["minecraft:nether_bricks"] = 0, ["oreganized:silver_nugget"] = 4 * 64, ["tfmg:nickel_nugget"] = 4 * 64, - ["tfmg:lithium_nugget"] = 64, ["tfmg:bauxite_powder"] = 4 * 64, ["minecraft:flint"] = 0, ["minecraft:andesite"] = 4 * 64, @@ -50,10 +52,6 @@ local LIMIT_EXCEPTIONS = { lower = 0, upper = 4, }, - ["tfmg:lithium_nugget"] = { - lower = -1, - upper = 0, - }, ["minecraft:flint"] = { lower = 64, upper = 2 * 64, @@ -86,6 +84,14 @@ local PRODUCTS = { {"minecraft:calcite", CRUSHER_ADDR}, {"create:crushed_raw_nickel", WASHER_ADDR, limit = 32}, {"tfmg:bauxite", CRUSHER_ADDR}, + {"tfmg:lithium_nugget", MAIN_STORAGE_ADDR}, + -- Can reduce these numbers to 12 * 64 in future if it becomes an issue + {"minecraft:iron_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64}, + {"minecraft:gold_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64}, + {"create:copper_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64}, + {"create:zinc_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64}, + {"tfmg:nickel_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64}, + {"oreganized:silver_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64}, } -- these will be crafted when needed From b2e042e746360877d85907df511183f9bc8027a0 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Wed, 21 Jan 2026 22:16:58 -0500 Subject: [PATCH 29/32] fix: remove excess nuggets faster --- oregen-manager.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index a8811e1..05ac102 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -86,12 +86,12 @@ local PRODUCTS = { {"tfmg:bauxite", CRUSHER_ADDR}, {"tfmg:lithium_nugget", MAIN_STORAGE_ADDR}, -- Can reduce these numbers to 12 * 64 in future if it becomes an issue - {"minecraft:iron_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64}, - {"minecraft:gold_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64}, - {"create:copper_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64}, - {"create:zinc_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64}, - {"tfmg:nickel_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64}, - {"oreganized:silver_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64}, + {"minecraft:iron_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 * 64}, + {"minecraft:gold_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 * 64}, + {"create:copper_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 * 64}, + {"create:zinc_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 * 64}, + {"tfmg:nickel_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 * 64}, + {"oreganized:silver_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 * 64}, } -- these will be crafted when needed From c49b1d9929a1a1765cd923e06fef1454d76edd00 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 24 Jan 2026 21:41:23 -0500 Subject: [PATCH 30/32] feat: add clay ball --- oregen-manager.lua | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index 05ac102..84ce0e3 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -32,6 +32,7 @@ local KEEP_STOCKED = { ["tfmg:bauxite_powder"] = 4 * 64, ["minecraft:flint"] = 0, ["minecraft:andesite"] = 4 * 64, + ["minecraft:clay_ball"] = 4 * 64, } local GLOBAL_LIMS = { @@ -60,6 +61,10 @@ local LIMIT_EXCEPTIONS = { lower = 0, upper = 2 * 64, }, + ["minecraft:clay_ball"] = { + lower = 0, + upper = 4 * 64, + }, } -- if these exist, they will be used up @@ -75,7 +80,7 @@ local PRODUCTS = { {"create:ochrum", CRUSHER_ADDR}, {"create:crushed_raw_gold", MELTER_ADDR}, {"minecraft:sand", WASHER_ADDR}, - {"minecraft:clay_ball", SMELTER_ADDR}, + {"minecraft:clay_ball", SMELTER_ADDR, keep = 4 * 64}, {"minecraft:brick", HAUNTER_ADDR}, {"minecraft:flint", CRUSHER_ADDR, keep = 4 * 64}, {"minecraft:nether_bricks", CRUSHER_ADDR}, @@ -194,6 +199,13 @@ local RECIPES = { addr = PRESS_ADDR, limit = 6, }, + ["minecraft:clay_ball"] = { + ingredients = { + {"minecraft:gravel", 2 * 64}, + }, + addr = CRUSHER_ADDR, + limit = 6, + }, } local SLEEP_T = 20 From 2f6b9535d0196ba760379a8a278f9863cbc1293c Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 24 Jan 2026 21:50:14 -0500 Subject: [PATCH 31/32] feat: remove excess netherrack --- oregen-manager.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/oregen-manager.lua b/oregen-manager.lua index 84ce0e3..fc6c5ef 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -97,6 +97,7 @@ local PRODUCTS = { {"create:zinc_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 * 64}, {"tfmg:nickel_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 * 64}, {"oreganized:silver_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 * 64}, + {"minecraft:netherrack", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 *64}, } -- these will be crafted when needed From 2dd89badb47643539ffd0104f7d19c67653e56e9 Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Sat, 31 Jan 2026 12:13:29 -0500 Subject: [PATCH 32/32] feat: add wither skeleton skull --- oregen-manager.lua | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/oregen-manager.lua b/oregen-manager.lua index fc6c5ef..55fda20 100644 --- a/oregen-manager.lua +++ b/oregen-manager.lua @@ -33,6 +33,7 @@ local KEEP_STOCKED = { ["minecraft:flint"] = 0, ["minecraft:andesite"] = 4 * 64, ["minecraft:clay_ball"] = 4 * 64, + ["minecraft:wither_skeleton_skull"] = 4, } local GLOBAL_LIMS = { @@ -65,6 +66,10 @@ local LIMIT_EXCEPTIONS = { lower = 0, upper = 4 * 64, }, + ["minecraft:wither_skeleton_skull"] = { + lower = 0, + upper = 4, + }, } -- if these exist, they will be used up @@ -90,14 +95,14 @@ local PRODUCTS = { {"create:crushed_raw_nickel", WASHER_ADDR, limit = 32}, {"tfmg:bauxite", CRUSHER_ADDR}, {"tfmg:lithium_nugget", MAIN_STORAGE_ADDR}, - -- Can reduce these numbers to 12 * 64 in future if it becomes an issue {"minecraft:iron_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 * 64}, {"minecraft:gold_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 * 64}, {"create:copper_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 * 64}, {"create:zinc_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 * 64}, {"tfmg:nickel_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 * 64}, {"oreganized:silver_nugget", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 * 64}, - {"minecraft:netherrack", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 *64}, + {"minecraft:netherrack", MAIN_STORAGE_ADDR, keep = 16 * 64, limit = 4 * 64}, + {"minecraft:blackstone", CRUSHER_ADDR}, } -- these will be crafted when needed @@ -207,6 +212,13 @@ local RECIPES = { addr = CRUSHER_ADDR, limit = 6, }, + ["minecraft:wither_skeleton_skull"] = { + ingredients = { + {"minecraft:cobblestone", 2 * 64}, + }, + addr = HAUNTER_ADDR, + limit = 6, + }, } local SLEEP_T = 20