From 0d4bb1a723aa2d60a0b50977975d33f8b20cffb2 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 5 Feb 2018 17:26:36 +0100 Subject: [PATCH] Falling nodes: Workaround for inv crash (MT#7020) --- mods/ENTITIES/mcl_falling_nodes/init.lua | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/mods/ENTITIES/mcl_falling_nodes/init.lua b/mods/ENTITIES/mcl_falling_nodes/init.lua index d3d22f89d9..60f028bc08 100644 --- a/mods/ENTITIES/mcl_falling_nodes/init.lua +++ b/mods/ENTITIES/mcl_falling_nodes/init.lua @@ -71,9 +71,20 @@ minetest.register_entity(":__builtin:falling_node", { end, 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 = { node = self.node, meta = self.meta, + _inv = inv, _startpos = self._startpos, _hit_players = self._hit_players, } @@ -88,7 +99,9 @@ minetest.register_entity(":__builtin:falling_node", { self._startpos = ds._startpos self._hit_players = ds._hit_players 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 self:set_node(ds) end