ViaVersion lets a newer client join an older server jar, and it does that by rewriting network packets on the fly in both directions. That translation is genuinely clever, and it is also the exact reason certain glitches show up that have nothing to do with lag.
Translating a protocol is not the same as speaking it natively
Every Minecraft version defines its own packet formats — which numeric ID means what, which fields a packet carries, how block and item data is encoded. A server and client on the same version simply agree on all of that. ViaVersion sits between a newer client and an older server and rewrites packets crossing that gap so each side receives something in the format it expects — which works well for anything that has a direct equivalent on both sides, and produces visible seams for anything that does not.
Why specific glitches happen
| Symptom | Why translation causes it |
|---|---|
| Blocks flicker or briefly disappear | A block state introduced after the server's version has no exact equivalent to translate to, so it is approximated |
| Hitboxes feel slightly off | Entity size or collision data changed between versions and is being converted, not read natively |
| Anti-cheat plugins false-flag translated players | Movement packets carry timing and precision characteristics specific to translation rather than a native connection, which some anti-cheat heuristics were not written to expect |
| Some newer particles or effects do not render | They do not exist as a concept on the older server version being translated down to |
None of this is caused by server load, and no amount of TPS headroom fixes it — it is a translation-layer limitation between two protocol versions that were never designed to speak to each other directly. The fix is a ViaVersion or ViaBackwards configuration adjustment, or in some cases whitelisting the affected feature per version, not a performance investigation.
If an anti-cheat is false-flagging translated clients, exempting «anyone on an old protocol» from all checks is broader than the actual problem and opens a real gap. Most anti-cheat plugins support exempting specific check types for translated connections rather than disabling detection for them entirely.