Currently, I have a datastore serialization system in place for my plot-based building game. However, if you save in one plot and rejoin, it will still load into the first plot even if you don’t own it.
How could I translate a part’s last position to fit in a new plot?
You can use the functions CFrame:ToObjectSpace() and CFrame:ToWorldSpace() documentation can be found here.
ToObjectSpace() gets the CFrame of the object relative to the base part. In this case object.CFrame:ToObjectSpace(BasePart.CFrame) would treat the BasePart as the centre of the world and gets the object’s position relative to it.
ToWorldSpace() does exactly opposite and gets the object’s CFrame relative to the centre of the world. In this case object.CFrame:ToWorldSpace(NewBasePart.CFrame) would get the new CFrame based on the new Plot.
Just a quick warning, the orientation of the BaseParts has to be the same, otherwise, you might see some issues such as objects being on the opposite side or the opposite surface.
If you mean the warning I said at the bottom it is for the BasePart, not the objects that you place. You can do whatever you want with the objects you place after loading them in.