I found a model that is supposed to make sure my tool doesn't fall out of the players hand. It works with parts only, and I have unions in my tool so I've tweaked it a little but it isn't working, here is the script:
function Weld(x,y) local W = Instance.new("Weld") W.Part0 = x W.Part1 = y local CJ = CFrame.new(x.Position) local C0 = x.CFrame:inverse()*CJ local C1 = y.CFrame:inverse()*CJ W.C0 = C0 W.C1 = C1 W.Parent = x end function Get(A) if A:IsA("BasePart") or A:IsA("UnionOperation") then Weld(script.Parent.Handle, A) A.Anchored = false else local C = A:GetChildren() for i=1, #C do Get(C[i]) end end end Get(script.Parent)