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