metalstache
2013-07-31 21c96a971fb22a298bea5c3ca2d764f96918956e
commit | author | age
21c96a 1 local supported_nodes = {
M 2 ["default:chest"] = {name="wrench:default_chest", lists={"main"}},
3 ["default:furnace"] = {name="wrench:default_furnace", lists={"fuel", "src", "dst"}},
4 ["default:furnace_active"] = {name="wrench:default_furnace", lists={"fuel", "src", "dst"}},
5 ["technic:iron_chest"] = {name="wrench:technic_iron_chest", lists={"main"}},
6 ["technic:iron_locked_chest"] = {name="wrench:technic_iron_locked_chest", lists={"main"}},
7 ["technic:copper_chest"] = {name="wrench:technic_copper_chest", lists={"main"}},
8 ["technic:copper_locked_chest"] = {name="wrench:technic_copper_locked_chest", lists={"main"}},
9 ["technic:silver_chest"] = {name="wrench:technic_silver_chest", lists={"main"}},
10 ["technic:silver_locked_chest"] = {name="wrench:technic_silver_locked_chest", lists={"main"}},
11 ["technic:gold_chest"] = {name="wrench:technic_gold_chest", lists={"main"}},
12 ["technic:gold_locked_chest"] = {name="wrench:technic_gold_locked_chest", lists={"main"}},
13 ["technic:mithril_chest"] = {name="wrench:technic_mithril_chest", lists={"main"}},
14 ["technic:mithril_locked_chest"] = {name="wrench:technic_mithril_locked_chest", lists={"main"}},
15 ["technic:electric_furnace"] = {name="wrench:technic_electric_furnace", lists={"src", "dst"}},
16 ["technic:electric_furnace_active"] = {name="wrench:technic_electric_furnace_active", lists={"src", "dst"}},
17 ["technic:mv_electric_furnace"] = {name="wrench:technic_mv_electric_furnace", lists={"src", "dst", "upgrade1", "upgrade2"}},
18 ["technic:mv_electric_furnace_active"] = {name="wrench:technic_mv_electric_furnace_active", lists={"src", "dst", "upgrade1", "upgrade2"}},
19 ["technic:coal_alloy_furnace"] = {name="wrench:technic_coal_alloy_furnace", lists={"fuel", "src", "src2", "dst"}},
20 ["technic:coal_alloy_furnace_active"] = {name="wrench:technic_coal_alloy_furnace_active", lists={"fuel", "src", "src2", "dst"}},
21 ["technic:alloy_furnace"] = {name="wrench:technic_alloy_furnace", lists={"src", "src2", "dst"}},
22 ["technic:alloy_furnace_active"] = {name="wrench:technic_alloy_furnace_active", lists={"src", "src2", "dst"}},
23 ["technic:mv_alloy_furnace"] = {name="wrench:technic_mv_alloy_furnace", lists={"src", "src2", "dst", "upgrade1", "upgrade2"}},
24 ["technic:mv_alloy_furnace_active"] = {name="wrench:technic_mv_alloy_furnace_active", lists={"src", "src2", "dst", "upgrade1", "upgrade2"}},
25 ["technic:grinder"] = {name="wrench:technic_grinder", lists={"src", "dst"}},
26 ["technic:grinder_active"] = {name="wrench:technic_grinder_active", lists={"src", "dst"}},
27 }
28 local chest_mark_colors = {
29     {'_black','Black'},
30     {'_blue','Blue'}, 
31     {'_brown','Brown'},
32     {'_cyan','Cyan'},
33     {'_dark_green','Dark Green'},
34     {'_dark_grey','Dark Grey'},
35     {'_green','Green'},
36     {'_grey','Grey'},
37     {'_magenta','Magenta'},
38     {'_orange','Orange'},
39     {'_pink','Pink'},
40     {'_red','Red'},
41     {'_violet','Violet'},
42     {'_white','White'},
43     {'_yellow','Yellow'},
44     {'','None'}
45 }
46 for i=1,15,1 do
47     supported_nodes["technic:gold_chest"..chest_mark_colors[i][1]] = {name="wrench:technic_gold_chest"..chest_mark_colors[i][1], lists={"main"}}
48     supported_nodes["technic:gold_locked_chest"..chest_mark_colors[i][1]] = {name="wrench:technic_gold_locked_chest"..chest_mark_colors[i][1], lists={"main"}}
49 end
50
51 local function convert_to_original_name(name)
52     for key,value in pairs(supported_nodes) do
53         if name == value.name then return key end
54     end
55 end
56
57 for name,_ in pairs(supported_nodes) do
58     local olddef = minetest.registered_nodes[name]
59     if olddef ~= nil then
60         local newdef = {}
61         for key,value in pairs(olddef) do
62             newdef[key] = value
63         end
64         name = supported_nodes[name].name
65         newdef.stack_max = 1
66         newdef.description = newdef.description.." with items"
67         newdef.groups.not_in_creative_inventory = 1
68         newdef.on_construct = nil
69         newdef.on_destruct = nil
70         newdef.after_place_node = function(pos, placer, itemstack)
71             if olddef.after_place_node ~= nil then olddef.after_place_node(pos, placer, itemstack) end
72             if not placer:is_player() then return end
73             local node = minetest.get_node(pos)
74             local item = convert_to_original_name(itemstack:get_name())
75             minetest.set_node(pos, {name = item, param2 = node.param2})
76             local inv = minetest.get_meta(pos):get_inventory()
77             local data = minetest.deserialize(itemstack:get_metadata())
78             for listname,list in pairs(data) do
79                 inv:set_list(listname, list)
80             end
81         end
82         minetest.register_node(name, newdef)
83     end
84 end
85
86
87 minetest.register_tool("wrench:wrench", {
88     description = "Wrench",
89     inventory_image = "technic_wrench.png",
90     tool_capabilities = {
91         full_punch_interval = 0.9,
92         max_drop_level = 0,
93         groupcaps = {
94             crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1},
95             snappy = {times={[3]=0.40}, uses=0, maxlevel=1},
96             oddly_breakable_by_hand = {times={[1]=7.00,[2]=4.00,[3]=1.40}, uses=0, maxlevel=3}
97         },
98         damage_groups = {fleshy=1},
99     },
100     on_place = function(itemstack, placer, pointed_thing)
101         if not placer:is_player() then return end
102         local pos = pointed_thing.under
103         if pos == nil then return end
104         local name = minetest.get_node(pos).name
105         local support = supported_nodes[name]
106         if support == nil then return end
107         if name:find("_locked_chest") ~= nil then
108             local meta = minetest.get_meta(pos)
109             if not has_locked_chest_privilege(meta, placer) then
110                 minetest.log("action", player:get_player_name()..
111                 " tried to destroy a locked chest belonging to "..
112                 meta:get_string("owner").." at "..
113                 minetest.pos_to_string(pos))
114                 return
115             end
116         end
117         local lists = support.lists
118         local inv = minetest.get_meta(pos):get_inventory()
119         local empty = true
120         local list_str = {}
121         for i=1,#lists,1 do
122             if not inv:is_empty(lists[i]) then empty = false end
123             local list = inv:get_list(lists[i])
124             for j=1,#list,1 do
125                 list[j] = list[j]:to_string()
126             end
127             list_str[lists[i]] = list
128         end
129         inv = placer:get_inventory()
130         local stack = {}
131         stack.name = name
132         if inv:room_for_item("main", stack) then
133             minetest.remove_node(pos)
134             itemstack:add_wear(65535/20)
135             if empty then
136                 inv:add_item("main", stack)
137             else
138                 stack.name = supported_nodes[name].name
139                 stack.metadata = minetest.serialize(list_str)
140                 inv:add_item("main", stack)
141             end
142         end
143         return itemstack
144     end,
145 })
146
147 minetest.register_craft({
148     output = "wrench:wrench",
149     recipe = {
150     {"default:iron_lump","","default:iron_lump"},
151     {"","default:iron_lump",""},
152     {"","default:iron_lump",""},
153     },
154 })