Refactor smelting and composting logic: load data tables from external files for better maintainability
This commit is contained in:
@@ -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 = {}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user