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