RealBadAngel
2012-12-13 b8d77627a4d28c624e63423eef317dd09c68e533
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",
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[10,9;]"..
48                 "list[current_name;main;0,0;10,4;]"..
49                 "list[current_player;main;0,5;8,4;]")
50         meta:set_string("infotext", "Copper Chest")
51         local inv = meta:get_inventory()
52         inv:set_size("main", 10*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_metadata_inventory_move = function(pos, from_list, from_index,
61             to_list, to_index, count, player)
62         minetest.log("action", player:get_player_name()..
63                 " moves stuff in chest at "..minetest.pos_to_string(pos))
64         return minetest.node_metadata_inventory_move_allow_all(
65                 pos, from_list, from_index, to_list, to_index, count, player)
66     end,
67     on_metadata_inventory_offer = function(pos, listname, index, stack, player)
68         minetest.log("action", player:get_player_name()..
69                 " moves stuff to chest at "..minetest.pos_to_string(pos))
70         return minetest.node_metadata_inventory_offer_allow_all(
71                 pos, listname, index, stack, player)
72     end,
73     on_metadata_inventory_take = function(pos, listname, index, stack, player)
74         minetest.log("action", player:get_player_name()..
75                 " takes stuff from chest at "..minetest.pos_to_string(pos))
76     end,
77 })
78   
79
80 local function has_locked_chest_privilege(meta, player)
81     if player:get_player_name() ~= meta:get_string("owner") then
82         return false
83     end
84     return true
85 end
86
87 minetest.register_node("technic:copper_locked_chest", {
88     description = "Copper Locked Chest",
89     tiles = {"technic_copper_chest_top.png", "technic_copper_chest_top.png", "technic_copper_chest_side.png",
90         "technic_copper_chest_side.png", "technic_copper_chest_side.png", "technic_copper_chest_locked.png"},
91     paramtype2 = "facedir",
92     groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
93     legacy_facedir_simple = true,
94     sounds = default.node_sound_wood_defaults(),
95     after_place_node = function(pos, placer)
96         local meta = minetest.env:get_meta(pos)
97         meta:set_string("owner", placer:get_player_name() or "")
98         meta:set_string("infotext", "Copper Locked Chest (owned by "..
99                 meta:get_string("owner")..")")
100     end,
101 on_construct = function(pos)
102         local meta = minetest.env:get_meta(pos)
103         meta:set_string("formspec",
104                 "invsize[10,9;]"..
105                 "list[current_name;main;0,0;10,4;]"..
106                 "list[current_player;main;0,5;8,4;]")
107         meta:set_string("infotext", "Copper Locked Chest")
108         meta:set_string("owner", "")
109         local inv = meta:get_inventory()
110         inv:set_size("main", 10*4)
111     end,
112     can_dig = function(pos,player)
113         local meta = minetest.env:get_meta(pos);
114         local inv = meta:get_inventory()
115         return inv:is_empty("main")
116     end,
117     allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
118         local meta = minetest.env:get_meta(pos)
119         if not has_locked_chest_privilege(meta, player) then
120             minetest.log("action", player:get_player_name()..
121                     " tried to access a locked chest belonging to "..
122                     meta:get_string("owner").." at "..
123                     minetest.pos_to_string(pos))
124             return 0
125         end
126         return count
127     end,
128     allow_metadata_inventory_put = function(pos, listname, index, stack, player)
129         local meta = minetest.env:get_meta(pos)
130         if not has_locked_chest_privilege(meta, player) then
131             minetest.log("action", player:get_player_name()..
132                     " tried to access a locked chest belonging to "..
133                     meta:get_string("owner").." at "..
134                     minetest.pos_to_string(pos))
135             return 0
136         end
137         return stack:get_count()
138     end,
139     allow_metadata_inventory_take = function(pos, listname, index, stack, 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 stack:get_count()
149     end,
150     on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
151         minetest.log("action", player:get_player_name()..
152                 " moves stuff in locked chest at "..minetest.pos_to_string(pos))
153     end,
154     on_metadata_inventory_put = function(pos, listname, index, stack, player)
155         minetest.log("action", player:get_player_name()..
156                 " moves stuff to locked chest at "..minetest.pos_to_string(pos))
157     end,
158     on_metadata_inventory_take = function(pos, listname, index, stack, player)
159         minetest.log("action", player:get_player_name()..
160                 " takes stuff from locked chest at "..minetest.pos_to_string(pos))
161     end,
162 })