From 7404e73fd3de588ae41b0b710d26302902416832 Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Sun, 22 Mar 2026 01:54:44 -0400 Subject: [PATCH] Refactor smelting and composting logic: load data tables from external files for better maintainability --- inventoryManager.lua | 554 +------------------------------------------ 1 file changed, 12 insertions(+), 542 deletions(-) diff --git a/inventoryManager.lua b/inventoryManager.lua index 927cfaf..1ec52e2 100644 --- a/inventoryManager.lua +++ b/inventoryManager.lua @@ -87,160 +87,16 @@ local SLOT_FUEL = 2 local SLOT_OUTPUT = 3 ------------------------------------------------- --- Smeltable items: input -> output --- Items in chests matching a key here get auto-smelted. --- Add/remove entries to control what gets cooked. +-- Load data tables from external files (data/) ------------------------------------------------- -local SMELTABLE = { - -- 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 / clay (regular furnace only — blast furnace rejects these) - ["minecraft:sand"] = { result = "minecraft:glass", furnaces = {"minecraft:furnace"} }, - ["minecraft:red_sand"] = { result = "minecraft:glass", furnaces = {"minecraft:furnace"} }, - ["minecraft:cobblestone"] = { result = "minecraft:stone", furnaces = {"minecraft:furnace"} }, - ["minecraft:stone"] = { result = "minecraft:smooth_stone", furnaces = {"minecraft:furnace"} }, - ["minecraft:clay_ball"] = { result = "minecraft:brick", furnaces = {"minecraft:furnace"} }, - ["minecraft:netherrack"] = { result = "minecraft:nether_brick", furnaces = {"minecraft:furnace"} }, - ["minecraft:sandstone"] = { result = "minecraft:smooth_sandstone", furnaces = {"minecraft: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"} }, - - ------------------------------------------------- - -- Mythic Metals — raw ores (furnace + blast furnace) - ------------------------------------------------- - ["mythicmetals:raw_adamantite"] = { result = "mythicmetals:adamantite_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:raw_aquarium"] = { result = "mythicmetals:aquarium_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:raw_banglum"] = { result = "mythicmetals:banglum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:raw_carmot"] = { result = "mythicmetals:carmot_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:raw_kyber"] = { result = "mythicmetals:kyber_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:raw_manganese"] = { result = "mythicmetals:manganese_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:raw_midas_gold"] = { result = "mythicmetals:midas_gold_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:raw_mythril"] = { result = "mythicmetals:mythril_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:raw_orichalcum"] = { result = "mythicmetals:orichalcum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:raw_palladium"] = { result = "mythicmetals:palladium_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:raw_prometheum"] = { result = "mythicmetals:prometheum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:raw_quadrillum"] = { result = "mythicmetals:quadrillum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:raw_runite"] = { result = "mythicmetals:runite_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:raw_star_platinum"] = { result = "mythicmetals:star_platinum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:raw_stormyx"] = { result = "mythicmetals:stormyx_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:raw_tin"] = { result = "mythicmetals:tin_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:raw_silver"] = { result = "mythicmetals:silver_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - - ------------------------------------------------- - -- Mythic Metals — ore blocks (furnace + blast furnace) - ------------------------------------------------- - ["mythicmetals:adamantite_ore"] = { result = "mythicmetals:adamantite_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:deepslate_adamantite_ore"] = { result = "mythicmetals:adamantite_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:aquarium_ore"] = { result = "mythicmetals:aquarium_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:banglum_ore"] = { result = "mythicmetals:banglum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:deepslate_banglum_ore"] = { result = "mythicmetals:banglum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:nether_banglum_ore"] = { result = "mythicmetals:banglum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:carmot_ore"] = { result = "mythicmetals:carmot_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:deepslate_carmot_ore"] = { result = "mythicmetals:carmot_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:kyber_ore"] = { result = "mythicmetals:kyber_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:deepslate_kyber_ore"] = { result = "mythicmetals:kyber_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:manganese_ore"] = { result = "mythicmetals:manganese_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:deepslate_manganese_ore"] = { result = "mythicmetals:manganese_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:midas_gold_ore"] = { result = "mythicmetals:midas_gold_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:mythril_ore"] = { result = "mythicmetals:mythril_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:deepslate_mythril_ore"] = { result = "mythicmetals:mythril_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:orichalcum_ore"] = { result = "mythicmetals:orichalcum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:deepslate_orichalcum_ore"] = { result = "mythicmetals:orichalcum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:end_stone_orichalcum_ore"] = { result = "mythicmetals:orichalcum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:palladium_ore"] = { result = "mythicmetals:palladium_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:prometheum_ore"] = { result = "mythicmetals:prometheum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:deepslate_prometheum_ore"] = { result = "mythicmetals:prometheum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:quadrillum_ore"] = { result = "mythicmetals:quadrillum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:deepslate_quadrillum_ore"] = { result = "mythicmetals:quadrillum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:runite_ore"] = { result = "mythicmetals:runite_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:deepslate_runite_ore"] = { result = "mythicmetals:runite_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:star_platinum_ore"] = { result = "mythicmetals:star_platinum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:end_stone_star_platinum_ore"] = { result = "mythicmetals:star_platinum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:stormyx_ore"] = { result = "mythicmetals:stormyx_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:end_stone_stormyx_ore"] = { result = "mythicmetals:stormyx_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:tin_ore"] = { result = "mythicmetals:tin_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:deepslate_tin_ore"] = { result = "mythicmetals:tin_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:silver_ore"] = { result = "mythicmetals:silver_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["mythicmetals:deepslate_silver_ore"] = { result = "mythicmetals:silver_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - - ------------------------------------------------- - -- Ad Astra — raw ores + planetary ores (furnace + blast furnace) - ------------------------------------------------- - ["ad_astra:raw_desh"] = { result = "ad_astra:desh_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["ad_astra:raw_ostrum"] = { result = "ad_astra:ostrum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["ad_astra:raw_calorite"] = { result = "ad_astra:calorite_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["ad_astra:moon_desh_ore"] = { result = "ad_astra:desh_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["ad_astra:deepslate_desh_ore"] = { result = "ad_astra:desh_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["ad_astra:mars_ostrum_ore"] = { result = "ad_astra:ostrum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["ad_astra:deepslate_ostrum_ore"] = { result = "ad_astra:ostrum_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["ad_astra:venus_calorite_ore"] = { result = "ad_astra:calorite_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["ad_astra:deepslate_calorite_ore"] = { result = "ad_astra:calorite_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["ad_astra:moon_iron_ore"] = { result = "minecraft:iron_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["ad_astra:mars_iron_ore"] = { result = "minecraft:iron_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["ad_astra:venus_gold_ore"] = { result = "minecraft:gold_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["ad_astra:venus_diamond_ore"] = { result = "minecraft:diamond", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["ad_astra:mars_diamond_ore"] = { result = "minecraft:diamond", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["ad_astra:moon_ice_shard_ore"] = { result = "ad_astra:ice_shard", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - - ------------------------------------------------- - -- Create — zinc + crushed ores (furnace + blast furnace) - ------------------------------------------------- - ["create:raw_zinc"] = { result = "create:zinc_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["create:zinc_ore"] = { result = "create:zinc_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["create:deepslate_zinc_ore"] = { result = "create:zinc_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["create:crushed_raw_iron"] = { result = "minecraft:iron_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["create:crushed_raw_gold"] = { result = "minecraft:gold_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["create:crushed_raw_copper"] = { result = "minecraft:copper_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["create:crushed_raw_zinc"] = { result = "create:zinc_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - - ------------------------------------------------- - -- BetterEnd — thallasium (furnace + blast furnace) - ------------------------------------------------- - ["betterend:thallasium_raw"] = { result = "betterend:thallasium_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - ["betterend:thallasium_ore"] = { result = "betterend:thallasium_ingot", furnaces = {"minecraft:furnace", "minecraft:blast_furnace"} }, - - ------------------------------------------------- - -- Farmer's Delight — food (furnace + smoker) - ------------------------------------------------- - ["farmersdelight:chicken_cuts"] = { result = "farmersdelight:cooked_chicken_cuts", furnaces = {"minecraft:furnace", "minecraft:smoker"} }, - ["farmersdelight:bacon"] = { result = "farmersdelight:cooked_bacon", furnaces = {"minecraft:furnace", "minecraft:smoker"} }, - ["farmersdelight:cod_slice"] = { result = "farmersdelight:cooked_cod_slice", furnaces = {"minecraft:furnace", "minecraft:smoker"} }, - ["farmersdelight:salmon_slice"] = { result = "farmersdelight:cooked_salmon_slice", furnaces = {"minecraft:furnace", "minecraft:smoker"} }, - ["farmersdelight:mutton_chops"] = { result = "farmersdelight:cooked_mutton_chops", furnaces = {"minecraft:furnace", "minecraft:smoker"} }, - ["farmersdelight:ham"] = { result = "farmersdelight:smoked_ham", furnaces = {"minecraft:furnace", "minecraft:smoker"} }, - ["farmersdelight:minced_beef"] = { result = "farmersdelight:beef_patty", furnaces = {"minecraft:furnace", "minecraft:smoker"} }, -} +local SMELTABLE = dofile("data/smeltable.lua") +local FUEL_LIST = dofile("data/fuel.lua") +local _compostData = dofile("data/compostable.lua") +local COMPOSTABLE = _compostData.items +local COMPOST_TRASH = _compostData.trash +local CRAFTABLE = dofile("data/craftable.lua") +local LOW_STOCK_ALERTS = dofile("data/alerts.lua") -- Pre-build furnace compatibility sets for O(1) lookup for _, recipe in pairs(SMELTABLE) do @@ -251,7 +107,6 @@ for _, recipe in pairs(SMELTABLE) do end -- Pre-built smelt candidate lists per furnace type (sorted: food first, then alpha) --- Avoids rebuilding & re-sorting in autoSmelt on every cycle. local smeltCandidatesByType = {} do for _, ftype in ipairs(FURNACE_TYPES) do @@ -271,413 +126,28 @@ do end end --- Fuel items, ordered by preference (best first) --- burn_time = how many items one fuel smelts -local FUEL_LIST = { - { name = "minecraft:coal", burn_time = 8 }, - { name = "minecraft:charcoal", burn_time = 8 }, - { name = "minecraft:coal_block", burn_time = 80 }, - { name = "minecraft:blaze_rod", burn_time = 12 }, - { name = "minecraft:dried_kelp_block", burn_time = 20 }, - { name = "minecraft:lava_bucket", burn_time = 100 }, - { name = "minecraft:oak_planks", burn_time = 1.5 }, - { name = "minecraft:spruce_planks",burn_time = 1.5 }, - { name = "minecraft:birch_planks", burn_time = 1.5 }, - { name = "minecraft:jungle_planks",burn_time = 1.5 }, - { name = "minecraft:acacia_planks",burn_time = 1.5 }, - { name = "minecraft:dark_oak_planks",burn_time = 1.5 }, - { name = "minecraft:mangrove_planks",burn_time = 1.5 }, - { name = "minecraft:cherry_planks",burn_time = 1.5 }, - { name = "minecraft:stick", burn_time = 0.5 }, -} - --- Build a set for quick lookup +-- Build fuel set for quick lookup local FUEL_SET = {} for _, f in ipairs(FUEL_LIST) do FUEL_SET[f.name] = true end -------------------------------------------------- --- Compostable items (pushed into dropper_10, --- which distributes to composters via hoppers). --- Bone meal returns through hopper_0. -------------------------------------------------- - -local COMPOSTABLE = { - -- Seeds & crops - "minecraft:wheat_seeds", - "minecraft:beetroot_seeds", - "minecraft:pumpkin_seeds", - "minecraft:melon_seeds", - "minecraft:torchflower_seeds", - "minecraft:pitcher_pod", - "minecraft:wheat", - "minecraft:beetroot", - "minecraft:carrot", - "minecraft:melon_slice", - "minecraft:pumpkin", - "minecraft:carved_pumpkin", - "minecraft:sweet_berries", - "minecraft:glow_berries", - -- Plant blocks - "minecraft:tall_grass", - "minecraft:short_grass", - "minecraft:fern", - "minecraft:large_fern", - "minecraft:dead_bush", - "minecraft:vine", - "minecraft:hanging_roots", - "minecraft:small_dripleaf", - "minecraft:big_dripleaf", - "minecraft:moss_block", - "minecraft:moss_carpet", - "minecraft:azalea", - "minecraft:flowering_azalea", - "minecraft:spore_blossom", - "minecraft:seagrass", - "minecraft:sea_pickle", - "minecraft:lily_pad", - "minecraft:sugar_cane", - "minecraft:kelp", - "minecraft:dried_kelp", - "minecraft:cactus", - "minecraft:nether_wart", - "minecraft:crimson_fungus", - "minecraft:warped_fungus", - "minecraft:crimson_roots", - "minecraft:warped_roots", - "minecraft:shroomlight", - "minecraft:weeping_vines", - "minecraft:twisting_vines", - -- Leaves - "minecraft:oak_leaves", - "minecraft:spruce_leaves", - "minecraft:birch_leaves", - "minecraft:jungle_leaves", - "minecraft:acacia_leaves", - "minecraft:dark_oak_leaves", - "minecraft:mangrove_leaves", - "minecraft:cherry_leaves", - "minecraft:azalea_leaves", - "minecraft:flowering_azalea_leaves", - -- Flowers - "minecraft:dandelion", - "minecraft:poppy", - "minecraft:blue_orchid", - "minecraft:allium", - "minecraft:azure_bluet", - "minecraft:red_tulip", - "minecraft:orange_tulip", - "minecraft:white_tulip", - "minecraft:pink_tulip", - "minecraft:oxeye_daisy", - "minecraft:cornflower", - "minecraft:lily_of_the_valley", - "minecraft:sunflower", - "minecraft:lilac", - "minecraft:rose_bush", - "minecraft:peony", - "minecraft:wither_rose", - "minecraft:torchflower", - "minecraft:pitcher_plant", - -- Saplings - "minecraft:oak_sapling", - "minecraft:spruce_sapling", - "minecraft:birch_sapling", - "minecraft:jungle_sapling", - "minecraft:acacia_sapling", - "minecraft:dark_oak_sapling", - "minecraft:mangrove_propagule", - "minecraft:cherry_sapling", - -- Food waste - "minecraft:rotten_flesh", - "minecraft:spider_eye", - "minecraft:poisonous_potato", - "minecraft:fermented_spider_eye", - "minecraft:apple", - "minecraft:bread", - "minecraft:cookie", - "minecraft:cake", - "minecraft:pumpkin_pie", - -- Farmer's Delight compostables - "farmersdelight:tree_bark", - "farmersdelight:straw", - "farmersdelight:canvas", - "farmersdelight:rice", - "farmersdelight:rice_panicle", - "farmersdelight:onion", - "farmersdelight:tomato", - "farmersdelight:cabbage", - "farmersdelight:cabbage_leaf", -} - --- Build set for quick lookup +-- Build compostable set for quick lookup local COMPOSTABLE_SET = {} for _, name in ipairs(COMPOSTABLE) do COMPOSTABLE_SET[name] = true end --- Reserve: keep at least this many of each compostable before composting the rest +-- Compost settings (overridable via config) local COMPOST_RESERVE = 128 -- 2 stacks local COMPOST_DROPPER = "minecraft:dropper_10" local COMPOST_HOPPER = "minecraft:hopper_0" --- Apply config overrides for compost settings (loaded earlier) if _loadedConfig then if _loadedConfig.compostReserve then COMPOST_RESERVE = _loadedConfig.compostReserve end if _loadedConfig.compostDropper then COMPOST_DROPPER = _loadedConfig.compostDropper end if _loadedConfig.compostHopper then COMPOST_HOPPER = _loadedConfig.compostHopper end end --- Trash items: compostables with zero reserve (always fully composted) -local COMPOST_TRASH = { - ["minecraft:rotten_flesh"] = true, - ["minecraft:spider_eye"] = true, - ["minecraft:poisonous_potato"] = true, - ["minecraft:fermented_spider_eye"] = true, -} - -------------------------------------------------- --- Crafting recipes (for networked crafting turtle) --- grid: 9 entries mapping to turtle slots 1-3, 5-7, 9-11 -------------------------------------------------- - +-- Crafting grid-to-slot mapping local GRID_TO_SLOT = {1, 2, 3, 5, 6, 7, 9, 10, 11} -local CRAFTABLE = { - -- Basic materials - { - output = "minecraft:oak_planks", - count = 4, - grid = { - "minecraft:oak_log", nil, nil, - nil, nil, nil, - nil, nil, nil, - }, - }, - { - output = "minecraft:spruce_planks", - count = 4, - grid = { - "minecraft:spruce_log", nil, nil, - nil, nil, nil, - nil, nil, nil, - }, - }, - { - output = "minecraft:birch_planks", - count = 4, - grid = { - "minecraft:birch_log", nil, nil, - nil, nil, nil, - nil, nil, nil, - }, - }, - { - output = "minecraft:stick", - count = 4, - grid = { - "minecraft:oak_planks", nil, nil, - "minecraft:oak_planks", nil, nil, - nil, nil, nil, - }, - }, - { - output = "minecraft:oak_slab", - count = 6, - grid = { - "minecraft:oak_planks", "minecraft:oak_planks", "minecraft:oak_planks", - nil, nil, nil, - nil, nil, nil, - }, - }, - { - output = "minecraft:torch", - count = 4, - grid = { - "minecraft:coal", nil, nil, - "minecraft:stick", nil, nil, - nil, nil, nil, - }, - }, - -- Crafting & storage - { - output = "minecraft:crafting_table", - count = 1, - grid = { - "minecraft:oak_planks", "minecraft:oak_planks", nil, - "minecraft:oak_planks", "minecraft:oak_planks", nil, - nil, nil, nil, - }, - }, - { - output = "minecraft:chest", - count = 1, - grid = { - "minecraft:oak_planks", "minecraft:oak_planks", "minecraft:oak_planks", - "minecraft:oak_planks", nil, "minecraft:oak_planks", - "minecraft:oak_planks", "minecraft:oak_planks", "minecraft:oak_planks", - }, - }, - { - output = "minecraft:barrel", - count = 1, - grid = { - "minecraft:oak_planks", "minecraft:oak_slab", "minecraft:oak_planks", - "minecraft:oak_planks", nil, "minecraft:oak_planks", - "minecraft:oak_planks", "minecraft:oak_slab", "minecraft:oak_planks", - }, - }, - { - output = "minecraft:hopper", - count = 1, - grid = { - "minecraft:iron_ingot", nil, "minecraft:iron_ingot", - "minecraft:iron_ingot", "minecraft:chest", "minecraft:iron_ingot", - nil, "minecraft:iron_ingot", nil, - }, - }, - -- Building - { - output = "minecraft:furnace", - count = 1, - grid = { - "minecraft:cobblestone", "minecraft:cobblestone", "minecraft:cobblestone", - "minecraft:cobblestone", nil, "minecraft:cobblestone", - "minecraft:cobblestone", "minecraft:cobblestone", "minecraft:cobblestone", - }, - }, - { - output = "minecraft:ladder", - count = 3, - grid = { - "minecraft:stick", nil, "minecraft:stick", - "minecraft:stick", "minecraft:stick", "minecraft:stick", - "minecraft:stick", nil, "minecraft:stick", - }, - }, - { - output = "minecraft:glass_pane", - count = 16, - grid = { - "minecraft:glass", "minecraft:glass", "minecraft:glass", - "minecraft:glass", "minecraft:glass", "minecraft:glass", - nil, nil, nil, - }, - }, - { - output = "minecraft:iron_bars", - count = 16, - grid = { - "minecraft:iron_ingot", "minecraft:iron_ingot", "minecraft:iron_ingot", - "minecraft:iron_ingot", "minecraft:iron_ingot", "minecraft:iron_ingot", - nil, nil, nil, - }, - }, - -- Tools & combat - { - output = "minecraft:bucket", - count = 1, - grid = { - "minecraft:iron_ingot", nil, "minecraft:iron_ingot", - nil, "minecraft:iron_ingot", nil, - nil, nil, nil, - }, - }, - { - output = "minecraft:arrow", - count = 4, - grid = { - "minecraft:flint", nil, nil, - "minecraft:stick", nil, nil, - "minecraft:feather", nil, nil, - }, - }, - -- Redstone - { - output = "minecraft:piston", - count = 1, - grid = { - "minecraft:oak_planks", "minecraft:oak_planks", "minecraft:oak_planks", - "minecraft:cobblestone", "minecraft:iron_ingot", "minecraft:cobblestone", - "minecraft:cobblestone", "minecraft:redstone", "minecraft:cobblestone", - }, - }, - { - output = "minecraft:rail", - count = 16, - grid = { - "minecraft:iron_ingot", nil, "minecraft:iron_ingot", - "minecraft:iron_ingot", "minecraft:stick", "minecraft:iron_ingot", - "minecraft:iron_ingot", nil, "minecraft:iron_ingot", - }, - }, - { - output = "minecraft:powered_rail", - count = 6, - grid = { - "minecraft:gold_ingot", nil, "minecraft:gold_ingot", - "minecraft:gold_ingot", "minecraft:stick", "minecraft:gold_ingot", - "minecraft:gold_ingot", "minecraft:redstone", "minecraft:gold_ingot", - }, - }, - -- Food & misc - { - output = "minecraft:bread", - count = 1, - grid = { - "minecraft:wheat", "minecraft:wheat", "minecraft:wheat", - nil, nil, nil, - nil, nil, nil, - }, - }, - { - output = "minecraft:paper", - count = 3, - grid = { - "minecraft:sugar_cane", "minecraft:sugar_cane", "minecraft:sugar_cane", - nil, nil, nil, - nil, nil, nil, - }, - }, - { - output = "minecraft:compass", - count = 1, - grid = { - nil, "minecraft:iron_ingot", nil, - "minecraft:iron_ingot", "minecraft:redstone", "minecraft:iron_ingot", - nil, "minecraft:iron_ingot", nil, - }, - }, - { - output = "minecraft:clock", - count = 1, - grid = { - nil, "minecraft:gold_ingot", nil, - "minecraft:gold_ingot", "minecraft:redstone", "minecraft:gold_ingot", - nil, "minecraft:gold_ingot", nil, - }, - }, -} - -------------------------------------------------- --- Low-stock alerts --- When a tracked item drops below 'min', an alert --- is shown on the inventory monitor. -------------------------------------------------- - -local LOW_STOCK_ALERTS = { - { name = "minecraft:coal", min = 64, label = "Coal" }, - { name = "minecraft:charcoal", min = 64, label = "Charcoal" }, - { name = "minecraft:torch", min = 64, label = "Torches" }, - { name = "minecraft:arrow", min = 64, label = "Arrows" }, - { name = "minecraft:cooked_beef", min = 32, label = "Steak" }, - { name = "minecraft:cooked_porkchop",min = 32, label = "Porkchops" }, - { name = "minecraft:bread", min = 32, label = "Bread" }, - { name = "minecraft:iron_ingot", min = 64, label = "Iron" }, - { name = "minecraft:gold_ingot", min = 32, label = "Gold" }, - { name = "minecraft:diamond", min = 16, label = "Diamond" }, - { name = "minecraft:bone_meal", min = 32, label = "Bone Meal" }, - { name = "minecraft:oak_planks", min = 64, label = "Planks" }, - { name = "minecraft:cobblestone", min = 128, label = "Cobblestone" }, -} - -- Active alerts (populated by checkAlerts) local activeAlerts = {}