ShadowNinja
2013-09-25 2e52c6c795704c12bebf3790e1ef70d7f0234801
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
 
-- Create detached creative inventory after loading all mods
minetest.after(0.01, function()
    unified_inventory.items_list = {}
    for name, def in pairs(minetest.registered_items) do
        if (not def.groups.not_in_creative_inventory or
           def.groups.not_in_creative_inventory == 0) and
           def.description and def.description ~= "" then
            table.insert(unified_inventory.items_list, name)
            local recipes = minetest.get_all_craft_recipes(name)
            unified_inventory.crafts_table[name] = recipes or {}
        end
    end
    --print(dump(unified_inventory.crafts_table))
    table.sort(unified_inventory.items_list)
    unified_inventory.items_list_size = #unified_inventory.items_list
    print("Unified Inventory. inventory size: "..#unified_inventory.items_list)
end)
 
 
-- load_home
local function load_home()
    local input = io.open(unified_inventory.home_filename, "r")
    if input then
        while true do
            local x = input:read("*n")
            if x == nil then
                break
            end
            local y = input:read("*n")
            local z = input:read("*n")
            local name = input:read("*l")
            unified_inventory.home_pos[name:sub(2)] = {x = x, y = y, z = z}
        end
        io.close(input)
    else
        unified_inventory.home_pos = {}
    end
end
load_home()
 
function unified_inventory.set_home(player, pos)
    local player_name = player:get_player_name()
    unified_inventory.home_pos[player_name] = pos
    -- save the home data from the table to the file
    local output = io.open(unified_inventory.home_filename, "w")
    for k, v in pairs(unified_inventory.home_pos) do
        if v ~= nil then
            output:write(math.floor(v.x).." "
                    ..math.floor(v.y).." "
                    ..math.floor(v.z).." "
                    ..k.."\n")
        end
    end
    io.close(output)
end
 
function unified_inventory.go_home(player)
    local pos = unified_inventory.home_pos[player:get_player_name()]
    if pos ~= nil then
        player:setpos(pos)
    end
end
 
-- register_craft
function unified_inventory.register_craft(options)
    if not options.output then
        return
    end
    local itemstack = ItemStack(options.output)
    if itemstack:is_empty() then
        return
    end
    unified_inventory.crafts_table[itemstack:get_name()] =
            unified_inventory.crafts_table[itemstack:get_name()] or {}
 
    table.insert(unified_inventory.crafts_table[itemstack:get_name()], options)
end
 
function unified_inventory.register_page(name, def)
    unified_inventory.pages[name] = def
end
 
function unified_inventory.register_button(name, def)
    if not def.action then
        def.action = function(player)
            unified_inventory.set_inventory_formspec(player, name)
        end
    end
    
    def.name = name
    
    table.insert(unified_inventory.buttons, def)
end
 
function unified_inventory.is_creative(playername)
    if minetest.check_player_privs(playername, {creative=true}) or
       minetest.setting_getbool("creative_mode") then
        return true
    end
end