]> git.lizzy.rs Git - xdecor.git/blobdiff - cooking.lua
Don't crash on nil-player in can_dig and check the right players for attachment in...
[xdecor.git] / cooking.lua
index 8231fb9b1939b05c3f0b4eab83238ff2dce405c0..46629ec756278760479c20308dbbeac85187941d 100644 (file)
@@ -1,4 +1,4 @@
-local cauldron = {}
+local cauldron, sounds = {}, {}
 
 -- Add more ingredients here that make a soup.
 local ingredients_list = {
@@ -15,15 +15,27 @@ cauldron.cbox = {
        {0,  0, 0,  16, 8,  16}
 }
 
+function cauldron.stop_sound(pos)
+       local spos = minetest.hash_node_position(pos)
+       if sounds[spos] then minetest.sound_stop(sounds[spos]) end
+end
+
 function cauldron.idle_construct(pos)
        local timer = minetest.get_node_timer(pos)
        timer:start(10.0)
+       cauldron.stop_sound(pos)
 end
 
 function cauldron.boiling_construct(pos)
+       local spos = minetest.hash_node_position(pos)
+       sounds[spos] = minetest.sound_play("xdecor_boiling_water", {
+               pos=pos, max_hear_distance=5, gain=0.8, loop=true
+       })
+
        local meta = minetest.get_meta(pos)
-       local timer = minetest.get_node_timer(pos)
        meta:set_string("infotext", "Cauldron (active) - Drop some foods inside to make a soup")
+
+       local timer = minetest.get_node_timer(pos)
        timer:start(5.0)
 end
 
@@ -40,7 +52,7 @@ function cauldron.filling(pos, node, clicker, itemstack)
                                else
                                        minetest.chat_send_player(clicker:get_player_name(),
                                                "No room in your inventory to add a bucket of water.")
-                                       return
+                                       return itemstack
                                end
                        else
                                itemstack:replace("bucket:bucket_water")
@@ -116,15 +128,15 @@ function cauldron.take_soup(pos, node, clicker, itemstack)
                        else
                                minetest.chat_send_player(clicker:get_player_name(),
                                        "No room in your inventory to add a bowl of soup.")
-                               return
+                               return itemstack
                        end
                else
                        itemstack:replace("xdecor:bowl_soup 1")
                end
 
                minetest.set_node(pos, {name="xdecor:cauldron_empty", param2=node.param2})
-               return itemstack
        end
+       return itemstack
 end
 
 xdecor.register("cauldron_empty", {
@@ -133,6 +145,9 @@ xdecor.register("cauldron_empty", {
        on_rotate = screwdriver.rotate_simple,
        tiles = {"xdecor_cauldron_top_empty.png", "xdecor_cauldron_sides.png"},
        infotext = "Cauldron (empty)",
+       on_construct = function(pos)
+               cauldron.stop_sound(pos)
+       end,
        on_rightclick = cauldron.filling,
        collision_box = xdecor.pixelbox(16, cauldron.cbox)
 })
@@ -161,9 +176,11 @@ xdecor.register("cauldron_boiling", {
        collision_box = xdecor.pixelbox(16, cauldron.cbox),
        on_rightclick = cauldron.filling,
        on_construct = cauldron.boiling_construct,
+       on_destruct = function(pos)
+               cauldron.stop_sound(pos)
+       end,
        on_timer = cauldron.boiling_timer
 })
-minetest.register_alias("xdecor:cauldron_boiling_water", "xdecor:cauldron_boiling")
 
 xdecor.register("cauldron_soup", {
        groups = {cracky=2, oddly_breakable_by_hand=1, not_in_creative_inventory=1},
@@ -175,6 +192,9 @@ xdecor.register("cauldron_soup", {
                        animation={type="vertical_frames", length=3.0}},
                "xdecor_cauldron_sides.png"},
        collision_box = xdecor.pixelbox(16, cauldron.cbox),
-       on_rightclick = cauldron.take_soup
+       on_rightclick = cauldron.take_soup,
+       on_destruct = function(pos)
+               cauldron.stop_sound(pos)
+       end
 })