Falling nodes: Workaround for inv crash (MT#7020)

Wuzzy 2018-02-05 17:26:36 +01:00
parent d713cd193c
commit 0d4bb1a723

@ -71,9 +71,20 @@ minetest.register_entity(":__builtin:falling_node", {
end, end,
get_staticdata = function(self) get_staticdata = function(self)
local meta = self.meta
-- Workaround: Save inventory seperately from metadata.
-- Because Minetest crashes when a node with inventory gets deactivated
-- (GitHub issue #7020).
-- FIXME: Remove the _inv workaround when it is no longer needed
local inv
if meta then
inv = meta.inv
meta.inventory = nil
end
local ds = { local ds = {
node = self.node, node = self.node,
meta = self.meta, meta = self.meta,
_inv = inv,
_startpos = self._startpos, _startpos = self._startpos,
_hit_players = self._hit_players, _hit_players = self._hit_players,
} }
@ -88,7 +99,9 @@ minetest.register_entity(":__builtin:falling_node", {
self._startpos = ds._startpos self._startpos = ds._startpos
self._hit_players = ds._hit_players self._hit_players = ds._hit_players
if ds.node then if ds.node then
self:set_node(ds.node, ds.meta) local meta = ds.meta
meta.inventory = ds._inv
self:set_node(ds.node, meta)
else else
self:set_node(ds) self:set_node(ds)
end end