From 9a07792f4d79ae5b386b781e6e73377f5758ee6a Mon Sep 17 00:00:00 2001 From: Thomas Rudin Date: Mon, 10 Jun 2019 02:07:33 +0200 Subject: [PATCH] Save forceloaded blocks file periodically (#8535) saves the forceloaded blocks periodically. checks every 10 seconds if the forceloaded blocks got changed in-game and persists them on-disk if that's the case --- builtin/game/forceloading.lua | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/builtin/game/forceloading.lua b/builtin/game/forceloading.lua index 7c5537e85..5de4c3ad3 100644 --- a/builtin/game/forceloading.lua +++ b/builtin/game/forceloading.lua @@ -8,6 +8,9 @@ local blocks_forceloaded local blocks_temploaded = {} local total_forceloaded = 0 +-- true, if the forceloaded blocks got changed (flag for persistence on-disk) +local forceload_blocks_changed = false + local BLOCKSIZE = core.MAP_BLOCKSIZE local function get_blockpos(pos) return { @@ -31,6 +34,9 @@ local function get_relevant_tables(transient) end function core.forceload_block(pos, transient) + -- set changed flag + forceload_blocks_changed = true + local blockpos = get_blockpos(pos) local hash = core.hash_node_position(blockpos) local relevant_table, other_table = get_relevant_tables(transient) @@ -51,6 +57,9 @@ function core.forceload_block(pos, transient) end function core.forceload_free_block(pos, transient) + -- set changed flag + forceload_blocks_changed = true + local blockpos = get_blockpos(pos) local hash = core.hash_node_position(blockpos) local relevant_table, other_table = get_relevant_tables(transient) @@ -95,6 +104,28 @@ core.after(5, function() end end) -core.register_on_shutdown(function() +-- persists the currently forceloaded blocks to disk +local function persist_forceloaded_blocks() write_file(wpath.."/force_loaded.txt", blocks_forceloaded) -end) +end + +-- periodical forceload persistence +local function periodically_persist_forceloaded_blocks() + + -- only persist if the blocks actually changed + if forceload_blocks_changed then + persist_forceloaded_blocks() + + -- reset changed flag + forceload_blocks_changed = false + end + + -- recheck after some time + core.after(10, periodically_persist_forceloaded_blocks) +end + +-- persist periodically +core.after(5, periodically_persist_forceloaded_blocks) + +-- persist on shutdown +core.register_on_shutdown(persist_forceloaded_blocks) -- 2.25.1