forked from Mirrorlandia_minetest/minetest
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
This commit is contained in:
parent
a687efa6df
commit
9a07792f4d
@ -8,6 +8,9 @@ local blocks_forceloaded
|
|||||||
local blocks_temploaded = {}
|
local blocks_temploaded = {}
|
||||||
local total_forceloaded = 0
|
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 BLOCKSIZE = core.MAP_BLOCKSIZE
|
||||||
local function get_blockpos(pos)
|
local function get_blockpos(pos)
|
||||||
return {
|
return {
|
||||||
@ -31,6 +34,9 @@ local function get_relevant_tables(transient)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function core.forceload_block(pos, transient)
|
function core.forceload_block(pos, transient)
|
||||||
|
-- set changed flag
|
||||||
|
forceload_blocks_changed = true
|
||||||
|
|
||||||
local blockpos = get_blockpos(pos)
|
local blockpos = get_blockpos(pos)
|
||||||
local hash = core.hash_node_position(blockpos)
|
local hash = core.hash_node_position(blockpos)
|
||||||
local relevant_table, other_table = get_relevant_tables(transient)
|
local relevant_table, other_table = get_relevant_tables(transient)
|
||||||
@ -51,6 +57,9 @@ function core.forceload_block(pos, transient)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function core.forceload_free_block(pos, transient)
|
function core.forceload_free_block(pos, transient)
|
||||||
|
-- set changed flag
|
||||||
|
forceload_blocks_changed = true
|
||||||
|
|
||||||
local blockpos = get_blockpos(pos)
|
local blockpos = get_blockpos(pos)
|
||||||
local hash = core.hash_node_position(blockpos)
|
local hash = core.hash_node_position(blockpos)
|
||||||
local relevant_table, other_table = get_relevant_tables(transient)
|
local relevant_table, other_table = get_relevant_tables(transient)
|
||||||
@ -95,6 +104,28 @@ core.after(5, function()
|
|||||||
end
|
end
|
||||||
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)
|
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)
|
||||||
|
Loading…
Reference in New Issue
Block a user