It’s impossible to fully prevent cheating in Project Zomboid (or any Java game). Investing time in anti-cheat at the client level is a waste of development resources and mostly serves to give server admins a false sense of security.
Java is inherently insecure for anti-cheat.
Java bytecode can be easily decompiled, modified, and recompiled.
Even with obfuscation, it’s trivial to inject hooks or alter game logic.
Client-side anti-cheat is fundamentally flawed.
Any kind of validation (hash checks, memory protection, process monitoring) can be bypassed.
If you check file hashes, I can just write a function that returns the expected hash to the server.
Differences between Windows, Linux, and macOS will cause false positives anyway.
The only "almost" effective solution is server-side authority.
The server must control all critical logic: movement, combat, health, item spawns.
The client should only handle inputs and rendering, nothing else.
Even singleplayer should run on a local dedicated server to enforce that—but guess what?
It doesn't. Most logic still runs client-side.
and in the actual state of B42 this mean, TIS need to rewrite PZ from scratch
So even if TIS tried harder, they'd just be wasting time and resources.
Don’t want cheaters?
Disable PvP, and eliminate the incentive to cheat.
And let’s be real...
People are already paying for cheats, which means cheat developers will always have the motivation to bypass whatever anti-cheat is in place.
Meanwhile, no one is paying for anti-cheat, and most server admins even disable existing protections just to run mods that let players dance or turn invisible to zombies.
So why waste time? There is no winning this fight.