RealBadAngel
2012-12-13 b8d77627a4d28c624e63423eef317dd09c68e533
commit | author | age
167434 1 minetest.register_craft({
MK 2     output = 'technic:silver_chest 1',
3     recipe = {
4         {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
5         {'moreores:silver_ingot','technic:copper_chest','moreores:silver_ingot'},
6         {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
7     }
8 })
9
10 minetest.register_craft({
11     output = 'technic:silver_locked_chest 1',
12     recipe = {
13         {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
14         {'moreores:silver_ingot','technic:copper_locked_chest','moreores:silver_ingot'},
15         {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
16     }
17 })
18
19 minetest.register_craft({
20     output = 'technic:silver_locked_chest 1',
21     recipe = {
22         {'default:steel_ingot'},
23         {'technic:silver_chest'},
24     }
25 })
26
27 minetest.register_craftitem("technic:silver_chest", {
28     description = "Silver Chest",
29     stack_max = 99,
30 })
31 minetest.register_craftitem("technic:silver_locked_chest", {
32     description = "Silver Locked Chest",
33     stack_max = 99,
34 })
35
36 minetest.register_node("technic:silver_chest", {
37     description = "Silver Chest",
38     tiles = {"technic_silver_chest_top.png", "technic_silver_chest_top.png", "technic_silver_chest_side.png",
39         "technic_silver_chest_side.png", "technic_silver_chest_side.png", "technic_silver_chest_front.png"},
40     paramtype2 = "facedir",
41     groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
42     legacy_facedir_simple = true,
43     sounds = default.node_sound_wood_defaults(),
44     on_construct = function(pos)
45         local meta = minetest.env:get_meta(pos)
46         meta:set_string("formspec",
47                 "invsize[11,9;]"..
48                 "list[current_name;main;0,0;11,4;]"..
49                 "list[current_player;main;0,5;8,4;]")
50         meta:set_string("infotext", "Silver Chest")
51         local inv = meta:get_inventory()
52         inv:set_size("main", 11*4)
53     end,
54     can_dig = function(pos,player)
55         local meta = minetest.env:get_meta(pos);
56         local inv = meta:get_inventory()
57         return inv:is_empty("main")
58     end,
59
60     on_punch = function (pos, node, puncher)
61             local meta = minetest.env:get_meta(pos);
62                 meta:set_string("formspec", "hack:sign_text_input")
63     end,
64     
65     on_receive_fields = function(pos, formname, fields, sender)
66         local meta = minetest.env:get_meta(pos);
67               fields.text = fields.text or ""
68         meta:set_string("text", fields.text)
69         meta:set_string("infotext", '"'..fields.text..'"')
70
71         meta:set_string("formspec",
72                 "invsize[11,9;]"..
73                 "list[current_name;main;0,0;11,4;]"..
74                 "list[current_player;main;0,5;8,4;]")
75     end,
76
77     on_metadata_inventory_move = function(pos, from_list, from_index,
78             to_list, to_index, count, player)
79         minetest.log("action", player:get_player_name()..
80                 " moves stuff in chest at "..minetest.pos_to_string(pos))
81         return minetest.node_metadata_inventory_move_allow_all(
82                 pos, from_list, from_index, to_list, to_index, count, player)
83     end,
84     on_metadata_inventory_offer = function(pos, listname, index, stack, player)
85         minetest.log("action", player:get_player_name()..
86                 " moves stuff to chest at "..minetest.pos_to_string(pos))
87         return minetest.node_metadata_inventory_offer_allow_all(
88                 pos, listname, index, stack, player)
89     end,
90     on_metadata_inventory_take = function(pos, listname, index, stack, player)
91         minetest.log("action", player:get_player_name()..
92                 " takes stuff from chest at "..minetest.pos_to_string(pos))
93     end,
94
95 })
96
97 local function has_locked_chest_privilege(meta, player)
98     if player:get_player_name() ~= meta:get_string("owner") then
99         return false
100     end
101     return true
102 end
103
104 minetest.register_node("technic:silver_locked_chest", {
105     description = "Silver Locked Chest",
106     tiles = {"technic_silver_chest_top.png", "technic_silver_chest_top.png", "technic_silver_chest_side.png",
107         "technic_silver_chest_side.png", "technic_silver_chest_side.png", "technic_silver_chest_locked.png"},
108     paramtype2 = "facedir",
109     groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
110     legacy_facedir_simple = true,
111     sounds = default.node_sound_wood_defaults(),
112     after_place_node = function(pos, placer)
113         local meta = minetest.env:get_meta(pos)
114         meta:set_string("owner", placer:get_player_name() or "")
115         meta:set_string("infotext", "Silver Locked Chest (owned by "..
116                 meta:get_string("owner")..")")
117     end,
118 on_construct = function(pos)
119         local meta = minetest.env:get_meta(pos)
120         meta:set_string("formspec",
121                 "invsize[11,9;]"..
122                 "list[current_name;main;0,0;11,4;]"..
123                 "list[current_player;main;0,5;8,4;]")
124         meta:set_string("infotext", "Silver Locked Chest")
125         meta:set_string("owner", "")
126         local inv = meta:get_inventory()
127         inv:set_size("main", 11*4)
128     end,
129     can_dig = function(pos,player)
130         local meta = minetest.env:get_meta(pos);
131         local inv = meta:get_inventory()
132         return inv:is_empty("main")
133     end,
134
135     on_punch = function (pos, node, puncher)
136             local meta = minetest.env:get_meta(pos);
137                 meta:set_string("formspec", "hack:sign_text_input")
138     end,
139     
140     on_receive_fields = function(pos, formname, fields, sender)
141         local meta = minetest.env:get_meta(pos);
142               fields.text = fields.text or ""
143         meta:set_string("text", fields.text)
144         meta:set_string("infotext", '"'..fields.text..'"')
145
146         meta:set_string("formspec",
147                 "invsize[11,9;]"..
148                 "list[current_name;main;0,0;11,4;]"..
149                 "list[current_player;main;0,5;8,4;]")
150     end,
151
152     allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
153         local meta = minetest.env:get_meta(pos)
154         if not has_locked_chest_privilege(meta, player) then
155             minetest.log("action", player:get_player_name()..
156                     " tried to access a locked chest belonging to "..
157                     meta:get_string("owner").." at "..
158                     minetest.pos_to_string(pos))
159             return 0
160         end
161         return count
162     end,
163     allow_metadata_inventory_put = function(pos, listname, index, stack, player)
164         local meta = minetest.env:get_meta(pos)
165         if not has_locked_chest_privilege(meta, player) then
166             minetest.log("action", player:get_player_name()..
167                     " tried to access a locked chest belonging to "..
168                     meta:get_string("owner").." at "..
169                     minetest.pos_to_string(pos))
170             return 0
171         end
172         return stack:get_count()
173     end,
174     allow_metadata_inventory_take = function(pos, listname, index, stack, player)
175         local meta = minetest.env:get_meta(pos)
176         if not has_locked_chest_privilege(meta, player) then
177             minetest.log("action", player:get_player_name()..
178                     " tried to access a locked chest belonging to "..
179                     meta:get_string("owner").." at "..
180                     minetest.pos_to_string(pos))
181             return 0
182         end
183         return stack:get_count()
184     end,
185     on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
186         minetest.log("action", player:get_player_name()..
187                 " moves stuff in locked chest at "..minetest.pos_to_string(pos))
188     end,
189     on_metadata_inventory_put = function(pos, listname, index, stack, player)
190         minetest.log("action", player:get_player_name()..
191                 " moves stuff to locked chest at "..minetest.pos_to_string(pos))
192     end,
193     on_metadata_inventory_take = function(pos, listname, index, stack, player)
194         minetest.log("action", player:get_player_name()..
195                 " takes stuff from locked chest at "..minetest.pos_to_string(pos))
196     end,
197 })