Add vessels shelf
[oweals/minetest_game.git] / mods / vessels / init.lua
1 -- Minetest 0.4 mod: vessels
2 -- See README.txt for licensing and other information.
3
4 local vessels_shelf_formspec =
5         "size[8,7;]"..
6         default.gui_bg..
7         default.gui_bg_img..
8         default.gui_slots..
9         "list[context;vessels;0,0.3;8,2;]"..
10         "list[current_player;main;0,2.85;8,1;]"..
11         "list[current_player;main;0,4.08;8,3;8]"..
12         default.get_hotbar_bg(0,2.85)
13
14 minetest.register_node("vessels:shelf", {
15         description = "Vessels shelf",
16         tiles = {"default_wood.png", "default_wood.png", "default_wood.png^vessels_shelf.png"},
17         is_ground_content = false,
18         groups = {choppy=3,oddly_breakable_by_hand=2,flammable=3},
19         sounds = default.node_sound_wood_defaults(),
20
21         on_construct = function(pos)
22                 local meta = minetest.get_meta(pos)
23                 meta:set_string("formspec", vessels_shelf_formspec)
24                 local inv = meta:get_inventory()
25                 inv:set_size("vessels", 8*2)
26         end,
27         can_dig = function(pos,player)
28                 local meta = minetest.get_meta(pos);
29                 local inv = meta:get_inventory()
30                 return inv:is_empty("vessels")
31         end,
32
33         allow_metadata_inventory_put = function(pos, listname, index, stack, player)
34                 local meta = minetest.get_meta(pos)
35                 local inv = meta:get_inventory()
36                 local to_stack = inv:get_stack(listname, index)
37                 if listname == "vessels" then
38                         if minetest.get_item_group(stack:get_name(), "vessel") ~= 0
39                                         and to_stack:is_empty() then
40                                 return 1
41                         else
42                                 return 0
43                         end
44                 end
45         end,
46
47         allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
48                 local meta = minetest.get_meta(pos)
49                 local inv = meta:get_inventory()
50                 local stack = inv:get_stack(from_list, from_index)
51                 local to_stack = inv:get_stack(to_list, to_index)
52                 if to_list == "vessels" then
53                         if minetest.get_item_group(stack:get_name(), "vessel") ~= 0 
54                                         and to_stack:is_empty() then
55                                 return 1
56                         else
57                                 return 0
58                         end
59                 end
60         end,
61
62         on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
63                 minetest.log("action", player:get_player_name()..
64                            " moves stuff in vessels shelf at "..minetest.pos_to_string(pos))
65         end,
66         on_metadata_inventory_put = function(pos, listname, index, stack, player)
67                 minetest.log("action", player:get_player_name()..
68                            " moves stuff to vessels shelf at "..minetest.pos_to_string(pos))
69         end,
70         on_metadata_inventory_take = function(pos, listname, index, stack, player)
71                 minetest.log("action", player:get_player_name()..
72                            " takes stuff from vessels shelf at "..minetest.pos_to_string(pos))
73         end,
74 })
75
76 minetest.register_craft({
77         output = 'vessels:shelf',
78         recipe = {
79                 {'group:wood', 'group:wood', 'group:wood'},
80                 {'group:vessel', 'group:vessel', 'group:vessel'},
81                 {'group:wood', 'group:wood', 'group:wood'},
82         }
83 })
84
85 minetest.register_node("vessels:glass_bottle", {
86         description = "Glass Bottle (empty)",
87         drawtype = "plantlike",
88         tiles = {"vessels_glass_bottle.png"},
89         inventory_image = "vessels_glass_bottle_inv.png",
90         wield_image = "vessels_glass_bottle.png",
91         paramtype = "light",
92         walkable = false,
93         selection_box = {
94                 type = "fixed",
95                 fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25}
96         },
97         groups = {vessel=1,dig_immediate=3,attached_node=1},
98         sounds = default.node_sound_glass_defaults(),
99 })
100
101 minetest.register_craft( {
102         output = "vessels:glass_bottle 10",
103         recipe = {
104                 { "default:glass", "", "default:glass" },
105                 { "default:glass", "", "default:glass" },
106                 { "", "default:glass", "" }
107         }
108 })
109
110 minetest.register_node("vessels:drinking_glass", {
111         description = "Drinking Glass (empty)",
112         drawtype = "plantlike",
113         tiles = {"vessels_drinking_glass.png"},
114         inventory_image = "vessels_drinking_glass_inv.png",
115         wield_image = "vessels_drinking_glass.png",
116         paramtype = "light",
117         walkable = false,
118         selection_box = {
119                 type = "fixed",
120                 fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25}
121         },
122         groups = {vessel=1,dig_immediate=3,attached_node=1},
123         sounds = default.node_sound_glass_defaults(),
124 })
125
126 minetest.register_craft( {
127         output = "vessels:drinking_glass 14",
128         recipe = {
129                 { "default:glass", "", "default:glass" },
130                 { "default:glass", "", "default:glass" },
131                 { "default:glass", "default:glass", "default:glass" }
132         }
133 })
134
135 minetest.register_node("vessels:steel_bottle", {
136         description = "Heavy Steel Bottle (empty)",
137         drawtype = "plantlike",
138         tiles = {"vessels_steel_bottle.png"},
139         inventory_image = "vessels_steel_bottle_inv.png",
140         wield_image = "vessels_steel_bottle.png",
141         paramtype = "light",
142         walkable = false,
143         selection_box = {
144                 type = "fixed",
145                 fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25}
146         },
147         groups = {vessel=1,dig_immediate=3,attached_node=1},
148         sounds = default.node_sound_defaults(),
149 })
150
151 minetest.register_craft( {
152         output = "vessels:steel_bottle 5",
153         recipe = {
154                 { "default:steel_ingot", "", "default:steel_ingot" },
155                 { "default:steel_ingot", "", "default:steel_ingot" },
156                 { "", "default:steel_ingot", "" }
157         }
158 })
159
160
161 -- Make sure we can recycle them
162
163 minetest.register_craftitem("vessels:glass_fragments", {
164         description = "Pile of Glass Fragments",
165         inventory_image = "vessels_glass_fragments.png",
166 })
167
168 minetest.register_craft( {
169         type = "shapeless",
170         output = "vessels:glass_fragments",
171         recipe = {
172                 "vessels:glass_bottle",
173                 "vessels:glass_bottle",
174         },
175 })
176
177 minetest.register_craft( {
178         type = "shapeless",
179         output = "vessels:glass_fragments",
180         recipe = {
181                 "vessels:drinking_glass",
182                 "vessels:drinking_glass",
183         },
184 })
185
186 minetest.register_craft({
187         type = "cooking",
188         output = "default:glass",
189         recipe = "vessels:glass_fragments",
190 })
191
192 minetest.register_craft( {
193         type = "cooking",
194         output = "default:steel_ingot",
195         recipe = "vessels:steel_bottle",
196 })
197