]> git.lizzy.rs Git - xdecor.git/blob - cooking.lua
Fix incomplete alias for doors
[xdecor.git] / cooking.lua
1 -- Add more ingredients here that make a soup.
2 local ingredients_list = {
3         "apple", "mushroom", "honey", "pumpkin", "egg", "bread", "meat",
4         "chicken", "carrot", "potato"
5 }
6
7 local cauldron_cbox = {
8         {0,  0, 0,  16, 16, 0},
9         {0,  0, 16, 16, 16, 0},
10         {0,  0, 0,  0,  16, 16},
11         {16, 0, 0,  0,  16, 16},
12         {0,  0, 0,  16, 8,  16}
13 }
14
15 local function fill_water_bucket(pos, node, clicker, itemstack)
16         local wield_item = clicker:get_wielded_item():get_name()
17         if wield_item == "bucket:bucket_empty" then
18                 minetest.set_node(pos, {name="xdecor:cauldron_empty", param2=node.param2})
19                 itemstack:replace("bucket:bucket_water")
20         end
21 end
22         
23
24 xdecor.register("cauldron_empty", {
25         description = "Cauldron",
26         groups = {cracky=2, oddly_breakable_by_hand=1},
27         on_rotate = screwdriver.rotate_simple,
28         tiles = {"xdecor_cauldron_top_empty.png", "xdecor_cauldron_sides.png"},
29         infotext = "Cauldron (empty)",
30         on_rightclick = function(pos, node, clicker, itemstack)
31                 local wield_item = clicker:get_wielded_item():get_name()
32                 if wield_item == "bucket:bucket_water" or
33                                 wield_item == "bucket:bucket_river_water" then
34                         minetest.set_node(pos, {name="xdecor:cauldron_idle", param2=node.param2})
35                         itemstack:replace("bucket:bucket_empty")
36                 end
37         end,
38         collision_box = xdecor.pixelbox(16, cauldron_cbox)
39 })
40
41 xdecor.register("cauldron_idle", {
42         groups = {cracky=2, oddly_breakable_by_hand=1, not_in_creative_inventory=1},
43         on_rotate = screwdriver.rotate_simple,
44         tiles = {"xdecor_cauldron_top_idle.png", "xdecor_cauldron_sides.png"},
45         drop = "xdecor:cauldron_empty",
46         infotext = "Cauldron (idle)",
47         collision_box = xdecor.pixelbox(16, cauldron_cbox),
48         on_rightclick = fill_water_bucket
49 })
50
51 xdecor.register("cauldron_boiling_water", {
52         groups = {cracky=2, oddly_breakable_by_hand=1, not_in_creative_inventory=1},
53         on_rotate = screwdriver.rotate_simple,
54         drop = "xdecor:cauldron_empty",
55         infotext = "Cauldron (active) - Drop foods inside to make a soup",
56         damage_per_second = 2,
57         tiles = {
58                 { name = "xdecor_cauldron_top_anim_boiling_water.png",
59                         animation = {type="vertical_frames", length=3.0} },
60                 "xdecor_cauldron_sides.png"
61         },
62         collision_box = xdecor.pixelbox(16, cauldron_cbox),
63         on_rightclick = fill_water_bucket
64 })
65
66 xdecor.register("cauldron_soup", {
67         groups = {cracky=2, oddly_breakable_by_hand=1, not_in_creative_inventory=1},
68         on_rotate = screwdriver.rotate_simple,
69         drop = "xdecor:cauldron_empty",
70         infotext = "Cauldron (active) - Use a bowl to eat the soup",
71         damage_per_second = 2,
72         tiles = {
73                 { name = "xdecor_cauldron_top_anim_soup.png",
74                         animation = {type="vertical_frames", length=3.0} },
75                 "xdecor_cauldron_sides.png"
76         },
77         collision_box = xdecor.pixelbox(16, cauldron_cbox),
78         on_rightclick = function(pos, node, clicker, itemstack)
79                 local inv = clicker:get_inventory()
80                 local wield_item = clicker:get_wielded_item()
81
82                 if wield_item:get_name() == "xdecor:bowl" then
83                         if wield_item:get_count() > 1 then
84                                 if inv:room_for_item("main", "xdecor:bowl_soup 1") then
85                                         itemstack:take_item()
86                                         inv:add_item("main", "xdecor:bowl_soup 1")
87                                 else
88                                         minetest.chat_send_player(clicker:get_player_name(),
89                                                 "No room in your inventory to add a bowl of soup!")
90                                         return
91                                 end
92                         else
93                                 itemstack:replace("xdecor:bowl_soup 1")
94                         end
95
96                         minetest.set_node(pos, {name="xdecor:cauldron_empty", param2=node.param2})
97                         return itemstack
98                 end
99         end
100 })
101
102 minetest.register_abm({
103         nodenames = {"xdecor:cauldron_idle"},
104         interval = 15, chance = 1,
105         action = function(pos, node)
106                 local below_node = {x=pos.x, y=pos.y-1, z=pos.z}
107                 if minetest.get_node(below_node).name:find("fire") then
108                         minetest.set_node(pos, {name="xdecor:cauldron_boiling_water", param2=node.param2})
109                 end
110         end
111 })
112
113 minetest.register_abm({
114         nodenames = {"xdecor:cauldron_boiling_water"},
115         interval = 5, chance = 1,
116         action = function(pos, node)
117                 local objs = minetest.get_objects_inside_radius(pos, 0.5)
118                 if not objs then return end
119
120                 local ingredients = {}
121                 for _, obj in pairs(objs) do
122                         if obj and obj:get_luaentity() then
123                                 local itemstring = obj:get_luaentity().itemstring:match(":([%w_]+)")
124                                 if not next(ingredients) then
125                                         for _, rep in pairs(ingredients) do
126                                                 if itemstring == rep then return end
127                                         end
128                                 end
129
130                                 for _, ing in pairs(ingredients_list) do
131                                         if itemstring and itemstring:find(ing) then
132                                                 ingredients[#ingredients+1] = itemstring
133                                         end
134                                 end
135                         end
136                 end
137
138                 if #ingredients >= 2 then
139                         for _, obj in pairs(objs) do
140                                 if obj and obj:get_luaentity() then obj:remove() end
141                         end
142                         minetest.set_node(pos, {name="xdecor:cauldron_soup", param2=node.param2})
143                 end
144
145                 local node_under = {x=pos.x, y=pos.y-1, z=pos.z}
146                 if not minetest.get_node(node_under).name:find("fire") then
147                         minetest.set_node(pos, {name="xdecor:cauldron_idle", param2=node.param2})
148                 end
149         end
150 })
151