persistence.lua 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. local S = minetest.get_translator("travelnet")
  2. local mod_data_path = minetest.get_worldpath() .. "/mod_travelnet.data"
  3. local storage = minetest.get_mod_storage()
  4. -- migrate file-based storage to mod-storage
  5. local function migrate_file_storage()
  6. local file = io.open(mod_data_path, "r")
  7. if not file then
  8. return
  9. end
  10. -- load from file
  11. local data = file:read("*all")
  12. local old_targets
  13. if data:sub(1, 1) == "{" then
  14. minetest.log("info", S("[travelnet] migrating from json-file to mod-storage"))
  15. old_targets = minetest.parse_json(data)
  16. else
  17. minetest.log("info", S("[travelnet] migrating from serialize-file to mod-storage"))
  18. old_targets = minetest.deserialize(data)
  19. end
  20. for playername, player_targets in pairs(old_targets) do
  21. storage:set_string(playername, minetest.write_json(player_targets))
  22. end
  23. -- rename old file
  24. os.rename(mod_data_path, mod_data_path .. ".bak")
  25. end
  26. -- migrate old data as soon as possible
  27. migrate_file_storage()
  28. -- returns the player's travelnets
  29. function travelnet.get_travelnets(playername)
  30. local json = storage:get_string(playername)
  31. if not json or json == "" or json == "null" then
  32. -- default to empty object
  33. travelnet.log("action", "get_travelnets: player '" .. playername .. "' doesn't have an entry, creating one")
  34. json = "{}"
  35. end
  36. return minetest.parse_json(json)
  37. end
  38. -- saves the player's modified travelnets
  39. function travelnet.set_travelnets(playername, travelnets)
  40. travelnet.log("action", "set_travelnets: persisting travelnets for player '" .. playername .. "'")
  41. storage:set_string(playername, minetest.write_json(travelnets))
  42. end