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