]> git.lizzy.rs Git - xdecor.git/blobdiff - cooking.lua
Craft guide : remember tab id on clearing filter
[xdecor.git] / cooking.lua
index 0f4fd28c95d662c5400bedded5898ee94b7db254..201ea829e0467a820da00475cbfe8a388e19e4ff 100644 (file)
@@ -1,5 +1,3 @@
-minetest.register_alias("xdecor:cauldron", "xdecor:cauldron_empty")
-
 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,20 +109,30 @@ minetest.register_abm({
 
 minetest.register_abm({
        nodenames = {"xdecor:cauldron_boiling_water"},
-       interval = 3, chance = 1,
-       action = function(pos, node, _, _)
-               local objs = nil
-               local ingredients = {}
-               objs = minetest.get_objects_inside_radius(pos, 0.5)
+       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", "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")
-                               if itemstring and not minetest.serialize(ingredients):find(itemstring) and
-                                               (itemstring:find("apple") or itemstring:find("mushroom") or
-                                               itemstring:find("honey") or itemstring:find("pumpkin")) then    
-                                       ingredients[#ingredients+1] = itemstring
+                               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) then
+                                               ingredients[#ingredients+1] = itemstring
+                                       end
                                end
                        end
                end