forked from mt-mods/travelnet
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpersistence.lua
More file actions
51 lines (42 loc) · 1.57 KB
/
persistence.lua
File metadata and controls
51 lines (42 loc) · 1.57 KB
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
local S = minetest.get_translator("travelnet")
local mod_data_path = minetest.get_worldpath() .. "/mod_travelnet.data"
local storage = minetest.get_mod_storage()
-- migrate file-based storage to mod-storage
local function migrate_file_storage()
local file = io.open(mod_data_path, "r")
if not file then
return
end
-- load from file
local data = file:read("*all")
local old_targets
if data:sub(1, 1) == "{" then
minetest.log("info", S("[travelnet] migrating from json-file to mod-storage"))
old_targets = minetest.parse_json(data)
else
minetest.log("info", S("[travelnet] migrating from serialize-file to mod-storage"))
old_targets = minetest.deserialize(data)
end
for playername, player_targets in pairs(old_targets) do
storage:set_string(playername, minetest.write_json(player_targets))
end
-- rename old file
os.rename(mod_data_path, mod_data_path .. ".bak")
end
-- migrate old data as soon as possible
migrate_file_storage()
-- returns the player's travelnets
function travelnet.get_travelnets(playername)
local json = storage:get_string(playername)
if not json or json == "" or json == "null" then
-- default to empty object
travelnet.log("action", "get_travelnets: player '" .. playername .. "' doesn't have an entry, creating one")
json = "{}"
end
return minetest.parse_json(json)
end
-- saves the player's modified travelnets
function travelnet.set_travelnets(playername, travelnets)
travelnet.log("action", "set_travelnets: persisting travelnets for player '" .. playername .. "'")
storage:set_string(playername, minetest.write_json(travelnets))
end