patch for #124 (#125) async race condition fix

* restructure avoiding excessive indentation

* possibly fix #124

* async race condition fix
This commit is contained in:
Luke aka SwissalpS 2024-05-13 12:00:17 +02:00 committed by GitHub
parent 1169cff163
commit 94442e87bb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 32 additions and 25 deletions

View File

@ -47,21 +47,27 @@ if minetest.get_modpath("default") then
-- get the fields from the chest formspec, we can do this bc. newest functions are called first
-- https://github.com/minetest/minetest/blob/d4b10db998ebeb689b3d27368e30952a42169d03/doc/lua_api.md?plain=1#L5840
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname == "default:chest" then
local pn = player:get_player_name()
local pos = default.chest.open_chests[pn].pos
local chest = pos and minetest.get_node(pos)
local is_pipeworks_chest = chest and pipeworks.chests[chest]
if is_pipeworks_chest and not fields.quit and pipeworks.may_configure(pos, player) then
-- Pipeworks Switch
fs_helpers.on_receive_fields(pos, fields)
minetest.show_formspec(player:get_player_name(),
"default:chest",
default.chest.get_chest_formspec(pos))
end
-- Do NOT return true here, the callback from default still needs to run
return false
if fields.quit or formname ~= "default:chest" then
return
end
local pn = player:get_player_name()
local chest_open = default.chest.open_chests[pn]
if not chest_open then
-- chest already closed before formspec
return
end
local pos = chest_open.pos
local chest = pos and minetest.get_node(pos)
local is_pipeworks_chest = chest and pipeworks.chests[chest]
if is_pipeworks_chest and pipeworks.may_configure(pos, player) then
-- Pipeworks Switch
fs_helpers.on_receive_fields(pos, fields)
minetest.show_formspec(pn,
"default:chest",
default.chest.get_chest_formspec(pos))
end
-- Do NOT return true here, the callback from default still needs to run
return false
end)
local connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
@ -152,17 +158,18 @@ elseif minetest.get_modpath("hades_chests") then
-- get the fields from the chest formspec, we can do this bc. newest functions are called first
-- https://github.com/minetest/minetest/blob/d4b10db998ebeb689b3d27368e30952a42169d03/doc/lua_api.md?plain=1#L5840
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname == "hades_chests:chest_locked" then
local pn = player:get_player_name()
local pos = open_chests[pn]
if not fields.quit and pos and pipeworks.may_configure(pos, player) then
-- Pipeworks Switch
fs_helpers.on_receive_fields(pos, fields)
minetest.show_formspec(pn, "hades_chests:chest_locked", get_locked_chest_formspec(pos))
end
-- Do NOT return true here, the callback from hades still needs to run (if they add one)
return false
if fields.quit or formname ~= "hades_chests:chest_locked" then
return
end
local pn = player:get_player_name()
local pos = open_chests[pn]
if pos and pipeworks.may_configure(pos, player) then
-- Pipeworks Switch
fs_helpers.on_receive_fields(pos, fields)
minetest.show_formspec(pn, "hades_chests:chest_locked", get_locked_chest_formspec(pos))
end
-- Do NOT return true here, the callback from hades still needs to run (if they add one)
return false
end)
local connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
@ -175,4 +182,4 @@ elseif minetest.get_modpath("mcl_barrels") then
local connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1}
pipeworks.override_chest("mcl_barrels:barrel_closed", {}, connect_sides)
pipeworks.override_chest("mcl_barrels:barrel_open", {}, connect_sides)
end
end