So here's the issue

I have a game that uses a custom explosion system so i can have more control over how it works. Recently i have tried to make it so players and objects that do not need to collide with explosions not collide with them.

But this doesn't seem to be working at all. Everything is still colliding with the explosions.

Code below

Explosion Module

local module = {}

function module:Explode(position,radius,damage,outercolor,innercolor)
	local map
	for i,v in pairs(workspace:GetChildren()) do
		if game.ServerStorage.Maps:FindFirstChild(v.Name) then
			map = v
		end
	end
	local explosionclone = game.ServerStorage.OuterExplosion:Clone()
	if outercolor ~= nil then
		explosionclone.Color = outercolor
	end
	local audio = game.ServerStorage.ExplosionAudio:Clone()
	audio.Parent = explosionclone
	audio.RollOffMinDistance = radius*2
	audio.RollOffMaxDistance = radius*5
	explosionclone.Size = Vector3.new(radius*2,radius*2,radius*2)
	explosionclone.Velocity = Vector3.new(radius,radius,radius)
	explosionclone.Position = position
	local iexplosionclone = game.ServerStorage.InnerExplosion:Clone()
	if innercolor ~= nil then
		iexplosionclone.Color = innercolor
	end
	iexplosionclone.Size = Vector3.new(radius*1.6,radius*1.6,radius*1.6)
	iexplosionclone.Position = position
	iexplosionclone.Velocity = Vector3.new(radius,radius,radius)
	explosionclone.Parent = workspace.Explosions
	iexplosionclone.Parent = workspace.Explosions
	audio:Play()
	for i,v in pairs(game.Players:GetChildren()) do
		if workspace:FindFirstChild(v.Name) then
			if (v.Character.HumanoidRootPart.Position-position).magnitude <= radius and v.Character.Humanoid.Health >= 1 and v.Dead.Value == false then
				v.Character.Humanoid.Health = v.Character.Humanoid.Health - damage
				if v.Character.Humanoid.Health <= 0 then
					game.ReplicatedStorage.ChatEvent:FireAllClients(v.Name.." got blown up.")
				end
			end
		end
	end
	for i,v in pairs(map.Map:GetChildren()) do
		if v.ClassName == "Part" or v.ClassName == "WedgePart" or v.ClassName == "MeshPart" or v.ClassName == "UnionOperation" then
			if (v.Position-position).magnitude <= radius then
				local rng = math.random(1,10)
				v.Anchored = false
				if rng >= 6 then
					v:ClearAllChildren()
				end
				if rng >= 9 then
					v:Destroy()
				end
			end 
		end
	end
end

return module

Collision Management

local ps = game:GetService("PhysicsService")

ps:CreateCollisionGroup("Objects")
ps:CreateCollisionGroup("Enemies")
ps:CreateCollisionGroup("Explosions")

local Players = game:GetService("Players")

local playerCollisionGroupName = "Players"
ps:CreateCollisionGroup(playerCollisionGroupName)
ps:CollisionGroupSetCollidable(playerCollisionGroupName, playerCollisionGroupName, false)

local previousCollisionGroups = {}

local function setCollisionGroup(object)
	if object:IsA("BasePart") then
		previousCollisionGroups[object] = object.CollisionGroupId
		ps:SetPartCollisionGroup(object, playerCollisionGroupName)
	end
end

local function setCollisionGroupRecursive(object)
	setCollisionGroup(object)

	for _, child in ipairs(object:GetChildren()) do
		setCollisionGroupRecursive(child)
	end
end

local function resetCollisionGroup(object)
	local previousCollisionGroupId = previousCollisionGroups[object]
	if not previousCollisionGroupId then return end 

	local previousCollisionGroupName = ps:GetCollisionGroupName(previousCollisionGroupId)
	if not previousCollisionGroupName then return end

	ps:SetPartCollisionGroup(object, previousCollisionGroupName)
	previousCollisionGroups[object] = nil
end

local function onCharacterAdded(character)
	setCollisionGroupRecursive(character)

	character.DescendantAdded:Connect(setCollisionGroup)
	character.DescendantRemoving:Connect(resetCollisionGroup)
end

local function onPlayerAdded(player)
	player.CharacterAdded:Connect(onCharacterAdded)
end

Players.PlayerAdded:Connect(onPlayerAdded)

ps:CollisionGroupsAreCollidable("Objects","Explosions",false)
ps:CollisionGroupsAreCollidable("Players","Explosions",false)
ps:CollisionGroupsAreCollidable("Enemies","Explosions",false)

workspace.ActiveDisasters.ChildAdded:Connect(function(child)
	if child.ClassName == "Model" then
		for i,v in pairs(child:GetChildren()) do
			if v.ClassName == "Part" or v.ClassName == "MeshPart" or v.ClassName == "UnionOperation" or v.ClassName == "WedgePart" then
				if child:FindFirstChild("Humanoid") then
					ps:SetPartCollisionGroup(v,"Enemies")
				else
					ps:SetPartCollisionGroup(v,"Objects")
				end
			end
		end
	elseif child.ClassName == "Part" or child.ClassName == "MeshPart" or child.ClassName == "UnionOperation" or child.ClassName == "WedgePart" then
		ps:SetPartCollisionGroup(child,"Objects")
	end
end)

workspace.Explosions.ChildAdded:Connect(function(child)
	ps:SetPartCollisionGroup(child,"Explosions")
end)

How i have tried to solve the issue:

Moved the setting part to the collision group for explosions into the explosion module (Didn't work, same issue occurred) Took the velocity out of the explosions (Didn't work, same issue occurred)

Yes I am aware Velocity is deprecated now, the module was made before it was deprecated.