@@ -1798,6 +1798,24 @@ end
1798
1798
1799
1799
local open_chests = {}
1800
1800
1801
+ local function chest_lid_close (pn )
1802
+ local pos = open_chests [pn ].pos
1803
+ local sound = open_chests [pn ].sound
1804
+ local swap = open_chests [pn ].swap
1805
+
1806
+ open_chests [pn ] = nil
1807
+ for k , v in pairs (open_chests ) do
1808
+ if v .pos .x == pos .x and v .pos .y == pos .y and v .pos .z == pos .z then
1809
+ return true
1810
+ end
1811
+ end
1812
+
1813
+ local node = minetest .get_node (pos )
1814
+ minetest .after (0.2 , minetest .swap_node , pos , { name = " default:" .. swap ,
1815
+ param2 = node .param2 })
1816
+ minetest .sound_play (sound , {gain = 0.3 , pos = pos , max_hear_distance = 10 })
1817
+ end
1818
+
1801
1819
minetest .register_on_player_receive_fields (function (player , formname , fields )
1802
1820
if formname ~= " default:chest" then
1803
1821
return
@@ -1811,21 +1829,15 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
1811
1829
return
1812
1830
end
1813
1831
1814
- local pos = open_chests [pn ].pos
1815
- local sound = open_chests [pn ].sound
1816
- local swap = open_chests [pn ].swap
1817
- local node = minetest .get_node (pos )
1832
+ chest_lid_close (pn )
1833
+ return true
1834
+ end )
1818
1835
1819
- open_chests [pn ] = nil
1820
- for k , v in pairs (open_chests ) do
1821
- if v .pos .x == pos .x and v .pos .y == pos .y and v .pos .z == pos .z then
1822
- return true
1823
- end
1836
+ minetest .register_on_leaveplayer (function (player )
1837
+ local pn = player :get_player_name ()
1838
+ if open_chests [pn ] then
1839
+ chest_lid_close (pn )
1824
1840
end
1825
- minetest .after (0.2 , minetest .swap_node , pos , { name = " default:" .. swap ,
1826
- param2 = node .param2 })
1827
- minetest .sound_play (sound , {gain = 0.3 , pos = pos , max_hear_distance = 10 })
1828
- return true
1829
1841
end )
1830
1842
1831
1843
function default .register_chest (name , d )
0 commit comments