I haven’t used Stravant’s Model Reflect plugin, but I wrote a script that (I assume) has the same effect. Simply put, to flip symmetrical objects, all you have to do is to flip their position and orientation. This means that for basic parts, cylinders etc. it will work fine. For a more advanced object like a mesh it is much more difficult (i.e. you need a second mesh), and what I wrote only covers the first instance. Welds are also another edge case that I didn’t need to deal with, as I wasn’t making a generalised plugin.
Basically, you want to flip their CFrame across a certain axis:
local function newCFrame(pos,vx,vy,vz)
return CFrame.new(pos.x, pos.y, pos.z, vx.x, vy.x, vz.x, vx.y, vy.y, vz.y, vx.z, vy.z, vz.z)
end
local function flipVector(vec)
return vec * Vector3.new(1,1,-1)
end
local function flipCFrame(cfr)
return newCFrame(
flipVector(cfr.p),
flipVector(-cfr.rightVector),
flipVector(cfr.upVector),
flipVector(-cfr.lookVector)
)
end
I was only writing it for a specific case, so this specifically flips across the Z axis (the plane along the X & Y axes), and it would need some alteration to work on other axes. You’d need to add a lot of stuff to get it to reflect across an arbitrary plane, but this is a start. To be honest I wrote it a long time ago and can’t remember the exact process I went through when figuring it out, and it’s late so I won’t be doing it now haha.
To flip a part would be simple:
part.CFrame = flipCFrame(part.CFrame)
Flipping a model is just a matter of flipping every single part in the model. If you want to flip something along an arbitrary plane, or flipping objects more complex (flipping Velocities, RotVelocities, Welds, etc.) you’ll have to edit what’s there and add a lot of extra stuff.
It’s not exactly what you’re looking for, but hope it’s some help.