From a9c05f0e387ddcbc196d263e6338d27eb286b04e Mon Sep 17 00:00:00 2001 From: luk3yx Date: Fri, 28 Aug 2020 22:54:48 +1200 Subject: [PATCH] Use JSON to store areas (#47) This works around a limit of ~21000 areas because of limits in 'minetest.deserialize()'. Files will be migrated to the new format on first change. --- internal.lua | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/internal.lua b/internal.lua index 2db9541..9591b3d 100644 --- a/internal.lua +++ b/internal.lua @@ -18,7 +18,7 @@ end -- Save the areas table to a file function areas:save() - local datastr = minetest.serialize(self.areas) + local datastr = minetest.write_json(self.areas) if not datastr then minetest.log("error", "[areas] Failed to serialize area data!") return @@ -33,10 +33,19 @@ function areas:load() self.areas = self.areas or {} return err end - self.areas = minetest.deserialize(file:read("*a")) + local data = file:read("*a") + if data:sub(1, 1) == "[" then + self.areas, err = minetest.parse_json(data) + else + self.areas, err = minetest.deserialize(data) + end if type(self.areas) ~= "table" then self.areas = {} end + if err and #data > 10 then + minetest.log("error", "[areas] Failed to load area data: " .. + tostring(err)) + end file:close() self:populateStore() end