So I'm creating a pet sim where instead of having multiple pets, you just have one which you add onto for example arms, legs and tails, meaning all pets aren't going to be the same size. There is a part called "Driver" that holds all the BodyPosition and BodyGyro stuff.

But the problem I have with his now is that the Driver will not always be at the center of the pet. Meaning let's say the player adds arms the extend significantly forwards, the arms would overlap with the players shoulders as the pet hovers 3 studs behind, up and right to the players HumanoidRootPart.

I tried to counter this by using model:GetExtentsSize(), where I divide the size of the model and add an extra 3 studs behind the player. But this can only go so far as the determining position of the pet is determined by the Driver, which is not always going to be at the center of the pet.

Now I discovered something called model:GetModelCFrame() which I heard was deprecated but works fine in the command line of Studio. But applying the system to the pet, it doesn't do anything. The driver remains in the same position as it was before. Below is the code:

Driver.Parent = Plr.Character
Driver.CFrame = Pet:GetModelCFrame()
Driver.Parent = Pet
Pet.PrimaryPart = Driver

The driver is removed from the Pet model because it would be considered as part of the model and therefore count towards the model size even when it is outside the model itself.