Local collision grouping not applying to all players?

I have a local script that applies collision groups to each player locally. So the local player will be in the “Player” group and everybody else goes into the “OtherPlayers” group. This is repeated on each client through StarterCharacterScripts. But, I can’t seem to get the first player to set all of the others to the opposite group. Does anybody know why?

Here’s my code (The remote event if firing from a ServerScript that runs the PlayerAdded function:

-- variables
local plr = "Players"
local plrs = "OtherPlayers"

local ps = game:GetService("PhysicsService")

local players = game.Players:GetPlayers()
local currPlr = game.Players.LocalPlayer

local cge = game.ReplicatedStorage.Events.CollisionGroupingEvent

-- loop through players
local function initPlayers()
	for i, v in pairs(players) do
		if v ~= currPlr then
			local char = v.Character or v.CharacterAdded:Wait()

			for _, x in pairs(char:GetChildren()) do
				if x:IsA("BasePart") then
					ps:SetPartCollisionGroup(x, plrs)
					print("Other Players Collision Group Set")
				end
			end
		end
	end
	
	local char = currPlr.Character or currPlr.CharacterAdded:Wait()
	for _, x in pairs(char:GetChildren()) do
		if x:IsA("BasePart") then
			ps:SetPartCollisionGroup(x, plr)
			print("Set: "..currPlr.Name.." to Player group.")
		end
	end
end
cge.OnClientEvent:Connect(initPlayers)