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.