Make arrows (and all their derivatives) preserve collectable and entity properties across world unload/load

This commit is contained in:
teknomunk 2024-11-23 18:11:44 -06:00
parent d77783a717
commit c5eb3fa4eb

View file

@ -43,7 +43,7 @@ local arrow_entity = {
_fire_damage_resistant = true,
_save_fields = {
"last_pos", "startpos", "damage", "is_critical", "stuck", "stuckin", "stuckin_player", "time_in_air", "vl_projectile",
"last_pos", "startpos", "damage", "is_critical", "stuck", "stuckin", "stuckin_player", "time_in_air", "vl_projectile", "collectable"
},
_damage=1, -- Damage on impact
@ -159,6 +159,9 @@ local arrow_entity = {
out[field] = self["_"..field]
end
-- Preserve entity properties
out.properties = self.object:get_properties()
return minetest.serialize(out)
end,
on_activate = function(self, staticdata, dtime_s)
@ -168,6 +171,12 @@ local arrow_entity = {
local data = minetest.deserialize(staticdata)
if not data then return end
-- Restore entity properties
if data.properties then
self.object:set_properties(data.properties)
data.properties = nil
end
-- Restore arrow state
local save_fields = self._save_fields
for i = 1,#save_fields do