I personally use Profile Service to save this data.
Only save when the player leaves the game, and some saves every 5 minutes in case of a server crash.
Save a table to this, you can create custom types if you’d like, and include attributes like the coordinates so your game can quickly retrieve them and place them.
So lets say the player placed a blue cube at -100, 5, -300, but of course that isnt gonna be the same location every time they load presumably, because they may claim a different plot, so find the difference from whatever point you’d like, I like starting at the lowest x, y, and z coordinates so that our new 0,0,0 point in respect to the plot is in a corner. Find this value based on the corner, then save that.
So now Shedletsky has his data as:
PlayerData = {
PlacedBlocks = {
[1] = {
["Name"] = "BlueBlock",
["XYZ"] = Vector3.new(4,1,5),
["Orientation"] = Vector3.new(0,0,0)
}
}
etc. etc.