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