From 55fd576f27e5df62baa46d76739cfa716a18fca6 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sun, 24 Nov 2019 20:40:42 +0000 Subject: [PATCH] Add persistence using mod storage --- api.lua | 25 +++++++++++++++++++++++++ init.lua | 11 +++++++++++ 2 files changed, 36 insertions(+) diff --git a/api.lua b/api.lua index 46e0e08..7ca1b0a 100644 --- a/api.lua +++ b/api.lua @@ -2,6 +2,25 @@ local _groups = {} local _action_by_name = {} local _actions = {} +-- Load data from MetaDataRef +function classroom.load_from(meta) + local groups_str = meta:get("groups") + if not groups_str then + return + end + + _groups = minetest.deserialize(groups_str) +end + +-- Save data to MetaDataRef +function classroom.save_to(meta) + meta:set_string("groups", minetest.serialize(_groups)) +end + +function classroom.save() + -- Overridden in init.lua +end + function classroom.get_students() local students = {} for _, player in pairs(classroom.get_connected_players()) do @@ -66,6 +85,8 @@ function classroom.create_group(name) _groups[name] = group + classroom.save() + return group end @@ -79,6 +100,8 @@ function classroom.add_student_to_group(name, student) end group.students[#group.students + 1] = student + + classroom.save() end end @@ -88,6 +111,8 @@ function classroom.remove_student_from_group(name, student) for i=1, #group.students do if group.students[i] == student then table.remove(group.students, i) + + classroom.save() end end end diff --git a/init.lua b/init.lua index e150177..fbebe09 100644 --- a/init.lua +++ b/init.lua @@ -20,3 +20,14 @@ classroom.check_player_privs = minetest.check_player_privs -- Required MT version assert(minetest.features.formspec_version_element, "Minetest 5.1 or later is required.") + +-- Mod storage for persistence +local storage = minetest.get_mod_storage() + +classroom.load_from(storage) + +function classroom.save() + classroom.save_to(storage) +end + +minetest.register_on_shutdown(classroom.save)