Refactor smelting logic to support furnace type compatibility for smeltable items
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user