Comment savoir si le joueur est premium ou crack et comprendre pourquoi il est impossible de le savoir avec un spigot 🔮
✨ Actuellement à l'heure d'aujourd'hui plusieurs personnes n'ont pas de compte minecraft pour diverses raisons mais souhaite jouer sur les serveurs, mais comment nous développeurs pouvons faire la différence entre un joueur crack et premium ?
Un packet est struturé de la manière suivante:
Field Name | Notes |
---|---|
lenght | taille du packet id + data |
packet id | correspond au type du packet |
data | dépend de l'état de la connexion et de l'identifiant du paquet |
Il a y a 4 état de connexion differente
- HANDSHAKE
- STATUS
- LOGIN
- PLAY
Et en fonction de l'etat de connexion le packet ne sera pas le même
Le packet handshake possède l'id 0
.
Le packet status marche par pair(entrée/sortie) 🎓, donc les deux premiers ont le même id soit 0
et les deux suivants 1
.
Lors de l'envoie du handshake voici ce qu'on peut récupérer:
C'est d'ailleurs le premier packet envoyé 🎉 et nous donnes les informations suivantes, la version du jeu, l'adresse ip qu'il a entré, le port qu'il a entré et le type du handshake(STATUS ou LOGIN). Du coup avec ces informations on peut déjà dire qu'envoyer le packet de login pour savoir si il est crack ou premium est simplement impossible car le client est en état de PLAY a l'heure de l'envoie de votre packet. Vous allez provoquer un quiproquo🎭 entre le client et le server ⚒ On ne peut pas se baser sur son pseudo car tout le monde peut l'utiliser. Le uuid est générer en fonction du pseudo:
UUID.nameUUIDFromBytes(("OfflinePlayer:" + username)
On pourrait avec bungeecord stocker le pseudo du joueur qui a essayé de se connecter pour que a la prochaine connexion on le connecte en tant que crack mais c'est bancale 🎞 comme approche.
It's so amazing !