]> git.lizzy.rs Git - minetest.git/commitdiff
Attachments: Avoid data loss caused by set_attach() in callbacks (#11181)
authorSmallJoker <SmallJoker@users.noreply.github.com>
Tue, 13 Apr 2021 18:02:18 +0000 (20:02 +0200)
committerGitHub <noreply@github.com>
Tue, 13 Apr 2021 18:02:18 +0000 (20:02 +0200)
src/server/unit_sao.cpp

index 2371640cabc1b5fa08420d3cc454e5da88f826ed..fa6c8f0f4c7dca19c6d2aecbd79c1aba0049a4cb 100644 (file)
@@ -134,16 +134,21 @@ void UnitSAO::setAttachment(int parent_id, const std::string &bone, v3f position
 
        int old_parent = m_attachment_parent_id;
        m_attachment_parent_id = parent_id;
+
+       // The detach callbacks might call to setAttachment() again.
+       // Ensure the attachment params are applied after this callback is run.
+       if (parent_id != old_parent)
+               onDetach(old_parent);
+
+       m_attachment_parent_id = parent_id;
        m_attachment_bone = bone;
        m_attachment_position = position;
        m_attachment_rotation = rotation;
        m_force_visible = force_visible;
        m_attachment_sent = false;
 
-       if (parent_id != old_parent) {
-               onDetach(old_parent);
+       if (parent_id != old_parent)
                onAttach(parent_id);
-       }
 }
 
 void UnitSAO::getAttachment(int *parent_id, std::string *bone, v3f *position,