Properly synchronizing client and server on SWEPs?

How would one properly synchronize SWEPs? IsFirstTimePredicted() doesn’t seem to work: it messes up my PrimaryFire func. Any ideas?