How to prevent FireTouchInterest() while also keeping the tool's functionality almost unchanged?

With Synapse’s recent update, all parts/tools that are on the client’s network and have the .Touched function are able to be spoofed, faking their position in order to make that very brick detect a touch without the person/object actually touching it.

I tried to rework my sword-like tool (linked sword, but with a different handle base) with Raycasts/Region3, but both have proven to be unprecise (although raycasts do a bit better job than Region3). I also tried using Magnitude, but it doesn’t follow up as fast as I thought it would and laggy players aren’t having their hits properly registered. Touched. event has always been the standard for melee objects and, as an owner of a competitive-based community, reworking the tool with, as mentioned above, unprecise measurements will only bring more bad than good.

I heavily rely on this tool - with it being exploit-prone, I really have no other choice than to either delay my community events or shut the group down till further notice.

If there’s anyone out there who may have an idea on what could be done, please pitch it below. If not, if there’s anyone who has experience with reworking tools, I am more than ready to hire you to create it. It really isn’t a problem.

You could implement a check to see if the hit item is within a certain magnitude before applying the rest of the function. (Assuming neither parts are extremely fast moving objects)

Forgot to add to the post, sorry:

I used magnitude, but it’s unprecise; laggy players can easily not go through the detection and will not inflict damage.

I more-so mean checking upon event trigger. Like this.

local MaxDistanceAwayFromTouch = 2 --This'll need tweaking depending on latency, etc. 
Object.Touched:connect(function(Hit)
	if (Object.Position - Hit.Position).Magnitude > MaxDistanceAwayFromTouch then return end
	--Do stuff.
end)

This just makes sure that when the touched event is triggered, the hit object has to actually be within distance. If it’s supposed to be a player, you could take it a step further and compare it to their Head.Position instead of Hit.Position and/or Object.Position.

I made an anti-cheat yesterday with magnitude, this same exact concept, which has proven to be unstable for laggy players/players with bad latency/players who tend to move or rotate quick after initiating a .Touched event.

It is not a safe choice; it is faulty.