Zefram
2014-08-14 1d0687556a52891aeadc0e8d9a58e44c53cb826b
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
-- Only changes name, keeps other params
function technic.swap_node(pos, name)
    local node = minetest.get_node(pos)
    if node.name ~= name then
        node.name = name
        minetest.swap_node(pos, node)
    end
    return node.name
end
 
-- Fully charge RE chargeable item.
-- Must be defined early to reference in item definitions.
function technic.refill_RE_charge(stack)
    local max_charge = technic.power_tools[stack:get_name()]
    if not max_charge then return stack end
    technic.set_RE_wear(stack, max_charge, max_charge)
    local meta = minetest.deserialize(stack:get_metadata()) or {}
    meta.charge = max_charge
    stack:set_metadata(minetest.serialize(meta))
    return stack
end
 
local function resolve_name(function_name)
    local a = _G
    for key in string.gmatch(function_name, "([^%.]+)(%.?)") do
        if a[key] then
            a = a[key]
        else
            return nil
        end
    end
    return a
end
 
function technic.function_exists(function_name)
    return type(resolve_name(function_name)) == 'function'
end