close chest: don't replace a node if it's not the expected open chest

This commit is contained in:
flux 2023-08-10 17:15:59 -07:00
parent 960aff2f63
commit 158e5db4e7
No known key found for this signature in database
GPG Key ID: 9333B27816848A15
1 changed files with 12 additions and 5 deletions

View File

@ -38,16 +38,23 @@ function default.chest.chest_lid_close(pn)
default.chest.open_chests[pn] = nil
for k, v in pairs(default.chest.open_chests) do
if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then
if vector.equals(v.pos, pos) then
-- another player is also looking at the chest
return true
end
end
local node = minetest.get_node(pos)
minetest.after(0.2, minetest.swap_node, pos, { name = swap,
param2 = node.param2 })
minetest.sound_play(sound, {gain = 0.3, pos = pos,
max_hear_distance = 10}, true)
minetest.after(0.2, function()
local current_node = minetest.get_node(pos)
if current_node.name ~= swap .. "_open" then
-- the chest has already been replaced, don't try to replace what's there.
return
end
minetest.swap_node( pos, { name = swap, param2 = node.param2 })
minetest.sound_play(sound, {gain = 0.3, pos = pos,
max_hear_distance = 10}, true)
end)
end
default.chest.open_chests = {}