Grab script for parts and models

this script works perfectly for parts all you got to do is place a ClickDetector inside it named “Grab”
i want to make it so that it can also work for models but i cant properly make them move

Global Script

--Place in ServerScriptService

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local moveObjectEvent = ReplicatedStorage:WaitForChild("MoveObjectEvent")

-- Ensure ObjectOwnership is a RemoteFunction
local objectOwnership = ReplicatedStorage:FindFirstChild("ObjectOwnership")
if not objectOwnership then
	objectOwnership = Instance.new("RemoteFunction")
	objectOwnership.Name = "ObjectOwnership"
	objectOwnership.Parent = ReplicatedStorage
end

local objectOwners = {} -- Dictionary to track object ownership

-- Function to handle moving the object on the server
local function onMoveObject(player, object, newPosition, release)
	if object and object:IsA("BasePart") then
		if release then
			-- Release the object
			objectOwners[object] = nil
			object.Position = newPosition
			object.Anchored = false
			object.CanCollide = true
		else
			-- Move the object
			object.Position = newPosition
			object.Anchored = true
			object.CanCollide = false
		end
	end
end

-- Function to check and set object ownership
local function onObjectOwnership(player, object)
	if objectOwners[object] == nil then
		objectOwners[object] = player
		return true
	else
		return false
	end
end

-- Connect RemoteEvent
moveObjectEvent.OnServerEvent:Connect(onMoveObject)
objectOwnership.OnServerInvoke = onObjectOwnership

local script

--Place in StarterPlayerScripts

local player = game.Players.LocalPlayer
local mouse = player:GetMouse()
local grabbedObject = nil
local bodyPosition = nil
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local moveObjectEvent = ReplicatedStorage:WaitForChild("MoveObjectEvent")
local objectOwnership = ReplicatedStorage:WaitForChild("ObjectOwnership") -- Ensure this is a RemoteFunction

local cooldown = false
local cooldownTime = 0.1 -- Cooldown time in seconds

-- Function to handle releasing the object
local function releaseObject()
	if grabbedObject then
		-- Release the object
		moveObjectEvent:FireServer(grabbedObject, grabbedObject.Position, true)
		grabbedObject.CanCollide = true
		grabbedObject.Anchored = false
		if bodyPosition then
			bodyPosition:Destroy()
		end
		mouse.TargetFilter = nil
		grabbedObject = nil
		bodyPosition = nil

		-- Set cooldown
		cooldown = true
		wait(cooldownTime)
		cooldown = false
	end
end

-- Function to handle grabbing the object
local function grabObject(object)
	if not cooldown then
		-- Check ownership before grabbing the object
		local canGrab = objectOwnership:InvokeServer(object)
		if canGrab then
			-- Grab the object
			grabbedObject = object
			grabbedObject.CanCollide = false
			grabbedObject.Anchored = false
			bodyPosition = Instance.new("BodyPosition")
			bodyPosition.MaxForce = Vector3.new(4000, 4000, 4000)
			bodyPosition.P = 10000
			bodyPosition.D = 1000
			bodyPosition.Position = object.Position -- Set initial position
			bodyPosition.Parent = grabbedObject
			mouse.TargetFilter = grabbedObject
		end
	end
end

-- Connect ClickDetector events
local function setupClickDetector(object)
	local clickDetector = object:FindFirstChildOfClass("ClickDetector")
	if clickDetector then
		clickDetector.MouseClick:Connect(function()
			script.Click:Play()
			grabObject(object)
		end)
	end
end

-- Connect ClickDetector events for existing objects
for _, object in ipairs(workspace:GetChildren()) do
	setupClickDetector(object)
end

-- Listen for new objects added to workspace
workspace.ChildAdded:Connect(function(child)
	setupClickDetector(child)
end)

-- Handle mouse click to release the object
mouse.Button1Down:Connect(function()
	if grabbedObject then
		releaseObject()
	end
end)

-- Update the object's position
game:GetService("RunService").RenderStepped:Connect(function()
	if grabbedObject and bodyPosition then
		local mousePosition = mouse.Hit.Position
		bodyPosition.Position = mousePosition
		moveObjectEvent:FireServer(grabbedObject, mousePosition, false)
	end
end)