diff --git a/README.md b/README.md index 6626b5e..fbedec7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# TechPack V1.05 +# TechPack V1.06 TechPack, a Mining, Crafting, & Farming Modpack for Minetest. @@ -28,7 +28,7 @@ TechPack provides: - Several lamp nodes in different colors (can be switched on/off) - a Quarry node to dig for stones and other ground nodes - a Harvester node to chop wood, leaves and crops -- a Grinder node to grind cobble stone to gravel +- a Grinder node to grind all kinds of cobblestone to gravel, gravel to sand, and sand to clay - a Gravelsieve node to sieve ores from gravel - an Autocrafter node for automated crafting of tools and items - a Fermenter node to produce Bio Gas from leaves @@ -78,3 +78,4 @@ Gravelsieve optional: moreores, hopper, pipeworks - 2018-03-29 V1.03 * Area protected chest added to tubelib_addons1 - 2018-03-31 V1.04 * Maintenance, minor issues, Unifieddyes support for Color Lamp, Street Lamp added - 2018-04-27 V1.05 * Ceiling lamp added, further improvements +- 2018-06-09 V1.06 * Recipes with API to grinder added diff --git a/tubelib_addons1/grinder.lua b/tubelib_addons1/grinder.lua index e04011d..77e9976 100644 --- a/tubelib_addons1/grinder.lua +++ b/tubelib_addons1/grinder.lua @@ -20,6 +20,8 @@ local STOP_STATE = 0 local STANDBY_STATE = -1 local FAULT_STATE = -3 +-- Grinder recipes +local Recipes = {} local function formspec(state) return "size[8,8]".. @@ -67,14 +69,19 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player return stack:get_count() end - -local function convert_stone_to_gravel(inv) - local cobble = ItemStack("default:cobble") - local gravel = ItemStack("default:gravel") - if inv:room_for_item("dst", gravel) and inv:contains_item("src", cobble) then - inv:add_item("dst", gravel) - inv:remove_item("src", cobble) - return true +local function grinding(inv) + for _,stack in ipairs(inv:get_list("src")) do + if not stack:is_empty() then + local name = stack:get_name() + if Recipes[name] then + local output = Recipes[name] + if inv:room_for_item("dst", output) then + inv:add_item("dst", output) + inv:remove_item("src", ItemStack(name)) + return true + end + end + end end return false end @@ -137,7 +144,7 @@ local function keep_running(pos, elapsed) local running = meta:get_int("running") - 1 --print("running", running) local inv = meta:get_inventory() - local busy = convert_stone_to_gravel(inv) + local busy = grinding(inv) if busy == true then if running <= STOP_STATE then @@ -293,3 +300,30 @@ tubelib.register_node("tubelib_addons1:grinder", {"tubelib_addons1:grinder_activ end end, }) + + +if minetest.global_exists("unified_inventory") then + unified_inventory.register_craft_type("grinding", { + description = "Grinding", + icon = 'tubelib_addons1_grinder.png', + width = 1, + height = 1, + }) +end + +function tubelib.add_grinder_recipe(recipe) + Recipes[recipe.input] = ItemStack(recipe.output) + if minetest.global_exists("unified_inventory") then + recipe.items = {recipe.input} + recipe.type = "grinding" + unified_inventory.register_craft(recipe) + end +end + + +tubelib.add_grinder_recipe({input="default:cobble", output="default:gravel"}) +tubelib.add_grinder_recipe({input="default:desert_cobble", output="default:gravel"}) +tubelib.add_grinder_recipe({input="default:mossycobble", output="default:gravel"}) +tubelib.add_grinder_recipe({input="default:gravel", output="default:sand"}) +tubelib.add_grinder_recipe({input="default:sand", output="default:clay"}) +