Physics does not replicate to parts locally moved to ReplicatedStorage

For anyone trying to do something similar, I have found a workaround. It’s ridiculous, but it does work.

Instead of parenting to ReplicatedStorage, parent it to a ViewportFrame in workspace. When it’s time to re-show the part, parent it to ReplicatedStorage for 1 frame before putting it back in workspace. For example:

local RunService = game:GetService("RunService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local vf = Instance.new("ViewportFrame", workspace)

local target = workspace.Part

local function hide()
  target.Parent = vf
end

local function show()
  target.Parent = ReplicatedStorage
  RunService.RenderStepped:Wait()
  target.Parent = workspace
end

The fact that you have to parent it to ReplicatedStorage for 1 frame is a bug in it of itself, but that’s a report for another day.