Refactor smelting logic to support furnace type compatibility for smeltable items

This commit is contained in:
MayaTheShy
2026-03-15 22:31:50 -04:00
parent 909e8e6f1d
commit 1b2a4207ab

View File

@@ -31,48 +31,48 @@ local SLOT_OUTPUT = 3
-------------------------------------------------
local SMELTABLE = {
-- Ores
["minecraft:raw_iron"] = "minecraft:iron_ingot",
["minecraft:raw_gold"] = "minecraft:gold_ingot",
["minecraft:raw_copper"] = "minecraft:copper_ingot",
["minecraft:iron_ore"] = "minecraft:iron_ingot",
["minecraft:gold_ore"] = "minecraft:gold_ingot",
["minecraft:copper_ore"] = "minecraft:copper_ingot",
["minecraft:deepslate_iron_ore"] = "minecraft:iron_ingot",
["minecraft:deepslate_gold_ore"] = "minecraft:gold_ingot",
["minecraft:deepslate_copper_ore"] = "minecraft:copper_ingot",
["minecraft:ancient_debris"] = "minecraft:netherite_scrap",
-- Sand / stone
["minecraft:sand"] = "minecraft:glass",
["minecraft:red_sand"] = "minecraft:glass",
["minecraft:cobblestone"] = "minecraft:stone",
["minecraft:stone"] = "minecraft:smooth_stone",
["minecraft:clay_ball"] = "minecraft:brick",
["minecraft:netherrack"] = "minecraft:nether_brick",
["minecraft:sandstone"] = "minecraft:smooth_sandstone",
-- Food
["minecraft:beef"] = "minecraft:cooked_beef",
["minecraft:porkchop"] = "minecraft:cooked_porkchop",
["minecraft:chicken"] = "minecraft:cooked_chicken",
["minecraft:mutton"] = "minecraft:cooked_mutton",
["minecraft:rabbit"] = "minecraft:cooked_rabbit",
["minecraft:cod"] = "minecraft:cooked_cod",
["minecraft:salmon"] = "minecraft:cooked_salmon",
["minecraft:potato"] = "minecraft:baked_potato",
["minecraft:kelp"] = "minecraft:dried_kelp",
-- Misc
["minecraft:wet_sponge"] = "minecraft:sponge",
["minecraft:cactus"] = "minecraft:green_dye",
["minecraft:sea_pickle"] = "minecraft:lime_dye",
["minecraft:log"] = "minecraft:charcoal",
["minecraft:oak_log"] = "minecraft:charcoal",
["minecraft:spruce_log"] = "minecraft:charcoal",
["minecraft:birch_log"] = "minecraft:charcoal",
["minecraft:jungle_log"] = "minecraft:charcoal",
["minecraft:acacia_log"] = "minecraft:charcoal",
["minecraft:dark_oak_log"] = "minecraft:charcoal",
["minecraft:mangrove_log"] = "minecraft:charcoal",
["minecraft:cherry_log"] = "minecraft:charcoal",
-- Ores (furnace + blast furnace only)
["minecraft:raw_iron"] = { result = "minecraft:iron_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
["minecraft:raw_gold"] = { result = "minecraft:gold_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
["minecraft:raw_copper"] = { result = "minecraft:copper_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
["minecraft:iron_ore"] = { result = "minecraft:iron_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
["minecraft:gold_ore"] = { result = "minecraft:gold_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
["minecraft:copper_ore"] = { result = "minecraft:copper_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
["minecraft:deepslate_iron_ore"] = { result = "minecraft:iron_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
["minecraft:deepslate_gold_ore"] = { result = "minecraft:gold_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
["minecraft:deepslate_copper_ore"] = { result = "minecraft:copper_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
["minecraft:ancient_debris"] = { result = "minecraft:netherite_scrap",furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
-- Sand / stone (furnace + blast furnace)
["minecraft:sand"] = { result = "minecraft:glass", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
["minecraft:red_sand"] = { result = "minecraft:glass", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
["minecraft:cobblestone"] = { result = "minecraft:stone", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
["minecraft:stone"] = { result = "minecraft:smooth_stone", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
["minecraft:clay_ball"] = { result = "minecraft:brick", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
["minecraft:netherrack"] = { result = "minecraft:nether_brick", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
["minecraft:sandstone"] = { result = "minecraft:smooth_sandstone", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} },
-- Food (furnace + smoker only)
["minecraft:beef"] = { result = "minecraft:cooked_beef", furnaces = {"minecraft:furnace", "minecraft:smoker"} },
["minecraft:porkchop"] = { result = "minecraft:cooked_porkchop", furnaces = {"minecraft:furnace", "minecraft:smoker"} },
["minecraft:chicken"] = { result = "minecraft:cooked_chicken", furnaces = {"minecraft:furnace", "minecraft:smoker"} },
["minecraft:mutton"] = { result = "minecraft:cooked_mutton", furnaces = {"minecraft:furnace", "minecraft:smoker"} },
["minecraft:rabbit"] = { result = "minecraft:cooked_rabbit", furnaces = {"minecraft:furnace", "minecraft:smoker"} },
["minecraft:cod"] = { result = "minecraft:cooked_cod", furnaces = {"minecraft:furnace", "minecraft:smoker"} },
["minecraft:salmon"] = { result = "minecraft:cooked_salmon", furnaces = {"minecraft:furnace", "minecraft:smoker"} },
["minecraft:potato"] = { result = "minecraft:baked_potato", furnaces = {"minecraft:furnace", "minecraft:smoker"} },
["minecraft:kelp"] = { result = "minecraft:dried_kelp", furnaces = {"minecraft:furnace", "minecraft:smoker"} },
-- Misc (furnace only)
["minecraft:wet_sponge"] = { result = "minecraft:sponge", furnaces = {"minecraft:furnace"} },
["minecraft:cactus"] = { result = "minecraft:green_dye", furnaces = {"minecraft:furnace"} },
["minecraft:sea_pickle"] = { result = "minecraft:lime_dye", furnaces = {"minecraft:furnace"} },
["minecraft:log"] = { result = "minecraft:charcoal", furnaces = {"minecraft:furnace"} },
["minecraft:oak_log"] = { result = "minecraft:charcoal", furnaces = {"minecraft:furnace"} },
["minecraft:spruce_log"] = { result = "minecraft:charcoal", furnaces = {"minecraft:furnace"} },
["minecraft:birch_log"] = { result = "minecraft:charcoal", furnaces = {"minecraft:furnace"} },
["minecraft:jungle_log"] = { result = "minecraft:charcoal", furnaces = {"minecraft:furnace"} },
["minecraft:acacia_log"] = { result = "minecraft:charcoal", furnaces = {"minecraft:furnace"} },
["minecraft:dark_oak_log"] = { result = "minecraft:charcoal", furnaces = {"minecraft:furnace"} },
["minecraft:mangrove_log"] = { result = "minecraft:charcoal", furnaces = {"minecraft:furnace"} },
["minecraft:cherry_log"] = { result = "minecraft:charcoal", furnaces = {"minecraft:furnace"} },
}
-- Fuel items, ordered by preference (best first)
@@ -782,10 +782,20 @@ local function autoSmelt()
-- 3) Load smeltable items into empty input slot
local inputItem = contents[SLOT_INPUT]
local furnaceType = peripheral.getType(fname)
if not inputItem then
-- Find something smeltable in chests
for itemName, _ in pairs(SMELTABLE) do
if catalogue[itemName] then
-- Find something smeltable in chests that this furnace type can process
for itemName, recipe in pairs(SMELTABLE) do
-- Check if this furnace type is compatible
local compatible = false
for _, ft in ipairs(recipe.furnaces) do
if ft == furnaceType then
compatible = true
break
end
end
if compatible and catalogue[itemName] then
-- Count total of this item across all chests
local totalInStorage = 0
for _, src in ipairs(catalogue[itemName]) do