ViaVersion permet à un client plus récent de rejoindre un jar de serveur plus ancien, et il y parvient en réécrivant les paquets réseau à la volée dans les deux sens. Cette traduction est réellement astucieuse, et c'est aussi exactement la raison pour laquelle certains bugs visuels apparaissent, sans rapport avec le lag.
Traduire un protocole n'est pas la même chose que le parler nativement
Chaque version de Minecraft définit ses propres formats de paquets — quel identifiant numérique signifie quoi, quels champs porte un paquet, comment les données de blocs et d'objets sont encodées. Un serveur et un client sur la même version sont simplement d'accord sur tout cela. ViaVersion se place entre un client plus récent et un serveur plus ancien et réécrit les paquets qui traversent cet écart pour que chaque côté reçoive quelque chose dans le format qu'il attend — ce qui fonctionne bien pour tout ce qui a un équivalent direct des deux côtés, et produit des coutures visibles pour ce qui n'en a pas.
Pourquoi des bugs précis arrivent
| Symptôme | Pourquoi la traduction le cause |
|---|---|
| Des blocs clignotent ou disparaissent brièvement | Un état de bloc introduit après la version du serveur n'a pas d'équivalent exact vers lequel traduire, il est donc approximé |
| Les hitbox paraissent légèrement décalées | La taille ou les données de collision d'entité ont changé entre versions et sont converties, pas lues nativement |
| Les extensions anti-triche signalent à tort les joueurs traduits | Les paquets de mouvement portent une précision et un rythme propres à la traduction plutôt qu'à une connexion native, que certaines heuristiques anti-triche n'étaient pas écrites pour attendre |
| Certaines nouvelles particules ou nouveaux effets ne s'affichent pas | Ils n'existent pas en tant que concept sur l'ancienne version de serveur vers laquelle on traduit |
Rien de tout cela n'est causé par la charge du serveur, et aucune marge de TPS ne le corrige — c'est une limitation de la couche de traduction entre deux versions de protocole qui n'ont jamais été conçues pour se parler directement. Le correctif est un ajustement de configuration de ViaVersion ou ViaBackwards, ou parfois une mise en liste blanche de la fonctionnalité concernée par version, pas une enquête de performance.
Si un anti-triche signale à tort des clients traduits, exempter « quiconque a un ancien protocole » de toutes les vérifications est plus large que le problème réel et ouvre une vraie brèche. La plupart des extensions anti-triche permettent d'exempter des types de vérification précis pour les connexions traduites plutôt que de désactiver entièrement la détection pour elles.