]> git.lizzy.rs Git - xdecor.git/blobdiff - cooking.lua
Craft guide : indicate yield on output item
[xdecor.git] / cooking.lua
index 8070f6ce175bb9f97dbffbe4a9bc1817b4adb5d3..1344f2a239d4791fea6fb44fe788c472cf9bc42f 100644 (file)
@@ -1,17 +1,12 @@
-minetest.register_alias("xdecor:cauldron", "xdecor:cauldron_empty") -- legacy code
-
 local cauldron_cbox = {
-       type = "fixed",
-       fixed = {
-               {-0.5, -0.5, -0.5, 0.5, 0.5, -0.5},
-               {-0.5, -0.5, 0.5, 0.5, 0.5, 0.5},
-               {-0.5, -0.5, -0.5, -0.5, 0.5, 0.5},
-               {0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-               {-0.5, -0.5, -0.5, 0.5, 0, 0.5}
-       }
+       {0,  0, 0,  16, 16, 0},
+       {0,  0, 16, 16, 16, 0},
+       {0,  0, 0,  0,  16, 16},
+       {16, 0, 0,  0,  16, 16},
+       {0,  0, 0,  16, 8,  16}
 }
 
-local function fill_water_bucket(pos, node, clicker, itemstack, _)
+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})
@@ -26,7 +21,7 @@ xdecor.register("cauldron_empty", {
        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 +29,7 @@ xdecor.register("cauldron_empty", {
                        itemstack:replace("bucket:bucket_empty")
                end
        end,
-       collision_box = cauldron_cbox
+       collision_box = xdecor.pixelnodebox(16, cauldron_cbox)
 })
 
 xdecor.register("cauldron_idle", {
@@ -43,7 +38,7 @@ 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 = xdecor.pixelnodebox(16, cauldron_cbox),
        on_rightclick = fill_water_bucket
 })
 
@@ -58,7 +53,7 @@ xdecor.register("cauldron_boiling_water", {
                        animation = {type="vertical_frames", length=3.0} },
                "xdecor_cauldron_sides.png"
        },
-       collision_box = cauldron_cbox,
+       collision_box = xdecor.pixelnodebox(16, cauldron_cbox),
        on_rightclick = fill_water_bucket
 })
 
@@ -73,18 +68,26 @@ xdecor.register("cauldron_soup", {
                        animation = {type="vertical_frames", length=3.0} },
                "xdecor_cauldron_sides.png"
        },
-       collision_box = cauldron_cbox,
-       on_rightclick = function(pos, node, clicker, itemstack, _)
+       collision_box = xdecor.pixelnodebox(16, cauldron_cbox),
+       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
@@ -93,7 +96,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})
@@ -103,8 +106,8 @@ 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
 
@@ -116,7 +119,7 @@ minetest.register_abm({
 
                for _, obj in pairs(objs) do
                        if obj and obj:get_luaentity() then
-                               local itemstring = obj:get_luaentity().itemstring:match("[%w_]+:([%w_]+)")
+                               local itemstring = obj:get_luaentity().itemstring:match("[^:]+$")
                                if not next(ingredients) then
                                        for _, rep in pairs(ingredients) do
                                                if itemstring == rep then return end