X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=cooking.lua;h=201ea829e0467a820da00475cbfe8a388e19e4ff;hb=a9f74339656ad0f2c3c63c0b17baa16f9ff8d8bd;hp=fc895fc7ec3d9cffa256615ed152fa2bc6f80168;hpb=e80eeae854872d427a0cdd600de9a424160a912d;p=xdecor.git diff --git a/cooking.lua b/cooking.lua index fc895fc..201ea82 100644 --- a/cooking.lua +++ b/cooking.lua @@ -1,5 +1,3 @@ -minetest.register_alias("xdecor:cauldron", "xdecor:cauldron_empty") -- legacy code - local cauldron_cbox = { type = "fixed", fixed = { @@ -11,13 +9,22 @@ local cauldron_cbox = { } } +local function fill_water_bucket(pos, node, clicker, itemstack) + local wield_item = clicker:get_wielded_item():get_name() + if wield_item == "bucket:bucket_empty" then + minetest.set_node(pos, {name="xdecor:cauldron_empty", param2=node.param2}) + itemstack:replace("bucket:bucket_water") + end +end + + xdecor.register("cauldron_empty", { description = "Cauldron", groups = {cracky=2, oddly_breakable_by_hand=1}, on_rotate = screwdriver.rotate_simple, tiles = {"xdecor_cauldron_top_empty.png", "xdecor_cauldron_sides.png"}, infotext = "Cauldron (empty)", - on_rightclick = function(pos, node, clicker, itemstack, _) + on_rightclick = function(pos, node, clicker, itemstack) local wield_item = clicker:get_wielded_item():get_name() if wield_item == "bucket:bucket_water" or wield_item == "bucket:bucket_river_water" then @@ -34,7 +41,8 @@ xdecor.register("cauldron_idle", { tiles = {"xdecor_cauldron_top_idle.png", "xdecor_cauldron_sides.png"}, drop = "xdecor:cauldron_empty", infotext = "Cauldron (idle)", - collision_box = cauldron_cbox + collision_box = cauldron_cbox, + on_rightclick = fill_water_bucket }) xdecor.register("cauldron_boiling_water", { @@ -48,7 +56,8 @@ xdecor.register("cauldron_boiling_water", { animation = {type="vertical_frames", length=3.0} }, "xdecor_cauldron_sides.png" }, - collision_box = cauldron_cbox + collision_box = cauldron_cbox, + on_rightclick = fill_water_bucket }) xdecor.register("cauldron_soup", { @@ -63,17 +72,25 @@ xdecor.register("cauldron_soup", { "xdecor_cauldron_sides.png" }, collision_box = cauldron_cbox, - on_rightclick = function(pos, node, clicker, itemstack, _) + on_rightclick = function(pos, node, clicker, itemstack) local inv = clicker:get_inventory() - if clicker:get_wielded_item():get_name() == "xdecor:bowl" then - if inv:room_for_item("main", "xdecor:bowl_soup 1") then - itemstack:take_item() - inv:add_item("main", "xdecor:bowl_soup 1") - minetest.set_node(pos, {name="xdecor:cauldron_empty", param2=node.param2}) - else - minetest.chat_send_player(clicker:get_player_name(), + local wield_item = clicker:get_wielded_item() + + if wield_item:get_name() == "xdecor:bowl" then + if wield_item:get_count() > 1 then + if inv:room_for_item("main", "xdecor:bowl_soup 1") then + itemstack:take_item() + inv:add_item("main", "xdecor:bowl_soup 1") + else + minetest.chat_send_player(clicker:get_player_name(), "No room in your inventory to add a bowl of soup!") + return + end + else + itemstack:replace("xdecor:bowl_soup 1") end + + minetest.set_node(pos, {name="xdecor:cauldron_empty", param2=node.param2}) return itemstack end end @@ -82,7 +99,7 @@ xdecor.register("cauldron_soup", { minetest.register_abm({ nodenames = {"xdecor:cauldron_idle"}, interval = 15, chance = 1, - action = function(pos, node, _, _) + action = function(pos, node) local below_node = {x=pos.x, y=pos.y-1, z=pos.z} if minetest.get_node(below_node).name:find("fire") then minetest.set_node(pos, {name="xdecor:cauldron_boiling_water", param2=node.param2}) @@ -92,22 +109,28 @@ minetest.register_abm({ minetest.register_abm({ nodenames = {"xdecor:cauldron_boiling_water"}, - interval = 3, chance = 1, - action = function(pos, node, _, _) + interval = 5, chance = 1, + action = function(pos, node) local objs = minetest.get_objects_inside_radius(pos, 0.5) if not objs then return end local ingredients = {} local ingredients_list = { -- Add more ingredients here that make a soup. - "apple", "mushroom", "honey", "pumpkin" + "apple", "mushroom", "honey", "pumpkin", "egg", "bread", + "meat", "chicken" } for _, obj in pairs(objs) do if obj and obj:get_luaentity() then - local itemstring = obj:get_luaentity().itemstring:match("([%w_:]+)%s") + local itemstring = obj:get_luaentity().itemstring:match("[^:]+$") + if not next(ingredients) then + for _, rep in pairs(ingredients) do + if itemstring == rep then return end + end + end + for _, ing in pairs(ingredients_list) do - if itemstring and itemstring:match(ing) - and not minetest.serialize(ingredients):find(itemstring) then + if itemstring and itemstring:match(ing) then ingredients[#ingredients+1] = itemstring end end