
Protocole de serveur classique – Le wiki officiel de Minecraft – Resoudre les problemes d’un serveur MineCraft
Avertissement ! La traduction française des termes techniques n'est pas nécessairement très bonne. Si vous souhaitez plus d'informations sur certains points techniques, rendez-vous sur la page en anglais. |
Documentation du protocole de serveur utilisé par les serveurs Minecraft Classic.
Sommaire
Pulsations cardiaques[[[[Éditer | modifier le wikicode]
Pour pouvoir se connecter à un serveur Minecraft Classic à partir de la liste des serveurs, le serveur doit envoyer à minecraft.net un "battement de coeur" (environ "battement de coeur") toutes les minutes, environ.
Le serveur stocke ce rythme cardiaque pendant 45 secondes.
Le «battement de cœur» prend la forme d'une demande HTTP sur http://www.minecraft.net/heartbeat.jsp.
Après avoir envoyé la pulsation, l'URL du serveur est renvoyée.
Cela peut être une demande POST ou GET. Voici le tableau des paramètres ci-dessous:
Nom | Détails |
---|---|
port | Le port du serveur. La valeur par défaut est 25565 |
max | Le quota maximum de joueurs sur le serveur. |
Nom | Le nom du serveur. |
Publique | Si le serveur est public (c'est-à-dire s'il apparaît dans la liste) ou non. Cela peut être Vrai ou Faux (même forme). |
version | Historique des versions, normalement la version doit être 0x07. |
sel | Une clé aléatoire de 16 caractères en base 62 (appelée "sel" ou "grain de sel") |
utilisateurs | Le nombre de joueurs actuellement connectés au serveur. |
La façon la plus simple d'envoyer un battement de cœur est d'ouvrir un socket TCP sur le port 80 à l'adresse suivante: www.minecraft.net, et d'envoyer les valeurs (qui doivent être modifiées, bien sûr).
GET /heartbeat.jsp?port=25565&max=32&name=My%20Server&public=True&version=7&salt=wo6kVAHjxoJcInKx&users=0, avec un CRLF (retour chariot et saut de ligne, traduit par retour chariot et saut de ligne).
Assurez-vous que toutes les chaînes sont échappées, c'est-à-dire un retour chariot à la fin de la ligne.
Dans le corps de la réponse, vous pourrez récupérer l'URL. Sinon, vous recevrez une erreur HTML, souvent limitée à un simple ""dans la version Client.
(Remarque: aucun en-tête n'est renvoyé si vous utilisez le format de requête HTTP / 0.9 comme indiqué précédemment, ce qui rend cette méthode plus simple qu'auparavant.)
Authentification d'utilisateur[[[[Éditer | modifier le wikicode]
La clé qui est donnée lorsqu'un utilisateur rejoint le serveur doit être comparée à la vérification MD5 du serveur "salt" avec le nom d'utilisateur pour vérifier que l'utilisateur est enregistré sur minecraft.net avec ce nom d'utilisateur. Grâce à cela, le nom du joueur devient un critère suffisamment fiable pour bannir ou noter par son nom.
if (player.key == md5 (server.salt + player.name)) // le joueur est inscrit sur Minecraft.net autre // le joueur n'est pas enregistré.
N.B.: Cela signifie que votre "grain de sel" doit être gardé secret et ne doit être partagé qu'avec heartbeat.jsp. Si le "grain de sel" de votre serveur est visible n'importe où par n'importe quel utilisateur, cela devient un jeu d'enfant pour les pirates de créer une clé qui semble valide, sans avoir besoin de s'authentifier sur minecraft.net.
Skins[[[[Éditer | modifier le wikicode]
Les skins pour un joueur sont téléchargés par le client à l'adresse suivante: https://s3.amazonaws.com/MinecraftSkins/skinname.png et à http://minecraft.net/skin/skinname.png, ou "skinname" est le nom du joueur. Cela signifie que le nom du joueur peut être erroné pour donner à un joueur un skin spécial.
Les messages envoyés par le serveur au lecteur peuvent contenir des couleurs, ce qui permet de colorer le texte pour différentes utilisations.
Une esperluette (&) suivie d'une valeur hexadécimale dans le message indique au client la couleur à utiliser.
Les couleurs ne fonctionneront que si l'ID du joueur est inférieur à 127. S'il est de 127 ou plus, le jeu ajoutera automatiquement un & e (couleur jaune) avant le message, qui deviendra jaune. Cependant, les codes de couleur après le premier caractère fonctionnent toujours. Si vous utilisez un ID inférieur à 127, il n'ajoutera pas de code couleur, vous pouvez donc choisir n'importe quelle couleur.
Il est important de noter que si une esperluette à la fin d'un message n'est pas suivie d'une valeur hexadécimale, tous les clients qui reçoivent cette valeur se bloqueront. Il est donc nécessaire de garantir les données que le serveur envoie.

Couleur | Codé | Nom commun | Couleur du texte | Couleur d'ombre | ||||
---|---|---|---|---|---|---|---|---|
R | g | B | R | g | B | |||
& 0 | Noir | 0 | 0 | 0 | 0 | 0 | 0 | |
& 1 | Bleu foncé | 0 | 0 | 191 | 0 | 0 | 47 | |
& 2 | Vert foncé | 0 | 191 | 0 | 0 | 47 | 0 | |
& 3 | Turquoise foncé | 0 | 191 | 191 | 0 | 47 | 47 | |
& 4 | Rouge foncé | 191 | 0 | 0 | 47 | 0 | 0 | |
& 5 | Violet | 191 | 0 | 191 | 47 | 0 | 47 | |
& 6 | Or | 191 | 191 | 0 | 47 | 47 | 0 | |
& sept | Gris | 191 | 191 | 191 | 47 | 47 | 47 | |
& 8 | Gris foncé | 64 | 64 | 64 | 16 | 16 | 16 | |
& 9 | Bleu | 64 | 64 | 255 | 16 | 16 | 63 | |
&à | Vert clair | 64 | 255 | 64 | 16 | 63 | 16 | |
& b | Turquoise | 64 | 255 | 255 | 16 | 63 | 63 | |
&contre | rouge | 255 | 64 | 64 | 63 | 16 | 16 | |
& ré | Rose | 255 | 64 | 255 | 63 | 16 | 63 | |
& e | Jaune | 255 | 255 | 64 | 63 | 63 | 16 | |
& F | blanc | 255 | 255 | 255 | 63 | 63 | 63 |
Chaque package commence par une variable de type "octet" qui représente l'ID du package.
Types de données de protocole[[[[Éditer | modifier le wikicode]
Type | Couper[octets] | La description |
---|---|---|
Octet | 1 | Un octet représentant un entier non signé (0 à 255) |
SByte | 1 | Un octet représentant un entier signé (-128 à 127) |
Short | 2 | Un entier signé, ordre réseau (-32768 à 32767) |
Chaîne | 64 | US-ASCII / ISO646-US: chaîne de caractères codée complétée par des espaces (0x20) |
Tableau d'octets | 1024 | Données binaires complétées par "octets nuls" (0x00) |
Client -> Packages serveur[[[[Éditer | modifier le wikicode]
Identifiant du package | Affectation | La description | Type | Remarques |
---|---|---|---|---|
0x00 | Identification du joueur | Identifiant du package | Octet | Envoyé par un joueur avec des informations pertinentes. Le protocole Minecraft Classic est en version 0x07. |
Version du protocole | Octet | |||
Nom d'utilisateur | Chaîne | |||
Clé de vérification | Chaîne | |||
Non utilisé | Octet | |||
0x05 | Définir le bloc | Identifiant du package | Octet | Est envoyé lorsqu'un joueur modifie un bloc. Le mode 0x01 indique que le bloc est installé, 0x00 indique que le bloc est détruit.
Le type de bloc est toujours le type de bloc que le joueur a en main. Le client suppose que ce package est toujours réussi et crée donc le nouveau bloc immédiatement. Pour interdire la création de blocs, le serveur doit répondre avec un paquet Set Block pour modifier ce bloc avec l'ancien type de bloc. Les coordonnées XYZ du bloc ne sont que des entiers qui représentent les coordonnées du bloc. (Contrairement aux coordonnées du joueur dont les 5 premiers bits représentent la partie décimale). |
X | Short | |||
Oui | Short | |||
Z | Short | |||
Mode | Octet | |||
Type de bloc | Octet | |||
0x08 | Position et orientation | Identifiant du package | Octet | Envoyé fréquemment (même si le joueur ne bouge pas) par le joueur avec la position et l'orientation du joueur. L'ID du joueur est toujours 255, ce qui fait référence à lui-même. Les coordonnées du joueur sont des points fixes (5 bits) qui représentent la position de partage (astuce: divisez par 32 pour obtenir la position actuelle). Le paramètre "angle" est mis à l'échelle de sorte qu'une valeur de 256 doit correspondre à 360 °. |
Identifiant du joueur | Octet | |||
X | Short | |||
Oui | Short | |||
Z | Short | |||
Lacet (cap) | Octet | |||
Pas | Octet | |||
0x0d | Message | Identifiant du package | Octet | Contient les messages des joueurs envoyés dans le chat. |
Non utilisé, peut-être les couleurs du message. | Octet (0xFF) | |||
Message | Chaîne |
Serveur → Paquets clients[[[[Éditer | modifier le wikicode]
Identifiant du package | Affectation | La description | Type | Remarques |
---|---|---|---|---|
0x00 | Identification du serveur | Identifiant du package | Octet | La réponse à un joueur essayant de rejoindre le serveur. Le type d'utilisateur indique si le joueur est un opérateur (0x64) ou non (0x00). La version du protocole en ce moment est 0x07. |
Version du protocole | Octet | |||
Nom du serveur | Chaîne | |||
MOTD depuis le serveur | Chaîne | |||
Type d'utilisateur | Octet | |||
0x01 | Ping | Identifiant du package | Octet | Est envoyé aux clients périodiquement. La seule façon de se déconnecter pour un client est de forcer la déconnexion, mais dans ce cas, le serveur ne sait pas si le lecteur n'est plus là ou s'il est toujours connecté. Le paquet ping est utilisé pour déterminer si la connexion est toujours ouverte. |
0x02 | Initialisation de niveau | Identifiant du package | Octet | Avertit le joueur que les données de la carte arrivent. Dès lors, le client affiche un écran de chargement. |
0x03 | Données au niveau de la section | Identifiant du package | Octet | Ce package vous permet d'envoyer au client un fragment des données cartographiques. Les données cartographiques sont présentées sous la forme d'une table d'octets compressée au format GZip comprenant:
Chaque section est un fragment des données cartographiques de 1024 octets. Si la taille de la section est inférieure à 1024, elle est complétée par 0x00. |
Longueur de section | Short | |||
Données de section | Tableau d'octets | |||
Pourcentage achevé | Octet | |||
0x04 | Achèvement du niveau | Identifiant du package | Octet | Ce paquet est envoyé après le dernier tronçon et contient la taille de la carte. Cela a pour effet de supprimer l'écran de chargement du client. |
Taille X | Short | |||
Taille Y | Short | |||
Taille Z | Short | |||
0x06 | Modification de bloc (serveur) | Identifiant du package | Octet | Envoyé pour indiquer un changement de bloc par des événements physiques ou des joueurs. Le colis doit être envoyé à tous les joueurs sur la même carte. |
X | Short | |||
Oui | Short | |||
Z | Short | |||
Type de bloc | Octet | |||
0x07 | Apparence du joueur | Identifiant du package | Octet | Est envoyé pour indiquer qu'un nouvel utilisateur apparaît sur le monde. L'ID est généré aléatoirement par le serveur et doit être unique pour chaque joueur sur la même carte. La position et l'orientation sont codées de la même manière, comme le paquet 0x08 ci-dessus.
Ce colis doit également être envoyé au client lorsqu'il apparaît sur la carte, avec l'identifiant du joueur 255 (lui-même). Cela définit sa position d'apparence. |
Identifiant du joueur | SByte | |||
Nom de joueur | Chaîne | |||
X | Short | |||
Oui | Short | |||
Z | Short | |||
Lacet (cap) | Octet | |||
Pas | Octet | |||
0x08 | Mise à jour absolue de la position et de l'orientation du joueur. | Identifiant du package | Octet | Ce package vous permet de téléporter le joueur en position (X; Y; Z) et de l'orienter. Si le client est connecté, l'ID du joueur doit être 255. Il est également utilisé pour informer le client des mouvements des autres joueurs.
Dans ce dernier cas, il est nécessaire d'envoyer ce paquet lorsque le joueur a déplacé un nombre de blocs strictement inférieur à -4,00 (-128 ou 0xFF en SByte), ou à partir d'une position supérieure ou égale à 4,00 (+127 ou 0x7F dans SByte). Si le joueur n'a déplacé qu'un petit nombre de blocs (inférieur à -4,00 ou supérieur ou égal à 4,00), il est préférable d'envoyer le paquet n ° 9 pour économiser la bande passante, bien que ce ne soit pas obligatoire. |
Identifiant du joueur | SByte | |||
X | Short | |||
Oui | Short | |||
Z | Short | |||
Lacet (cap) | Octet | |||
Pas | Octet | |||
0x09 | Mise à jour de :
|
Identifiant du package | Octet | Ce package permet de mettre à jour la position du lecteur de manière relative, ainsi que son orientation. L'utilisation de ce paquet au lieu du paquet n ° 8 permet d'économiser 3 octets, mais uniquement à condition que la position du joueur n'ait été modifiée que par un nombre de blocs strictement inférieur à 4,00 ou supérieur ou égal à 4,00. Si cette condition n'est pas remplie, le package # 8 doit être utilisé à la place. |
Identifiant du joueur | SByte | |||
Changements dans X | SByte | |||
Changements dans Y | SByte | |||
Z change | SByte | |||
Lacet (cap) | Octet | |||
Pas | Octet | |||
0x0a | Mise à jour de la position du joueur (par rapport à son ancienne position) | Identifiant du package | Octet | Ce package met à jour la position du joueur relativement. Ce pack peut être utilisé lorsque le joueur n'a pas tourné la tête et n'a déplacé qu'un nombre de blocs strictement inférieur à 4,00 ou supérieur ou égal à 4,00. Si cette condition n'est pas remplie, le package # 8 doit être utilisé à la place. |
ID joueur | SByte | |||
Changements dans X | SByte | |||
Changements dans Y | SByte | |||
Changements dans | SByte | |||
0x0b | Mise à jour de l'orientation du joueur | Identifiant du package | Octet | Ce package met à jour l'orientation du lecteur. Ce package peut être utilisé lorsque seule l'orientation du joueur a été modifiée, pas sa position. |
Identifiant du joueur | SByte | |||
Lacet (cap) | Octet | |||
Pas | Octet | |||
0x0c | Disparition du joueur | Identifiant du package | Octet | Envoyé lorsqu'un joueur se déconnecte. |
ID joueur | SByte | |||
0x0d | Message | Identifiant du package | Octet | Messages envoyés par chat ou console. |
ID joueur | SByte | |||
Message | Chaîne | |||
0x0e | Déconnexion du joueur. | Identifiant du package | Octet | Ce paquet a pour effet de déconnecter le client et d'afficher la raison de la déconnexion sur son écran. |
Raison de la déconnexion | Chaîne | |||
0x0f | Mise à jour du type d'utilisateur. | Identifiant du package | Octet | Ce paquet est envoyé lorsque le statut du joueur change (type = 0x64 lorsque le joueur devient op, type = 0x00 lorsque le joueur redevient un joueur normal). |
Type d'utilisateur | Octet |
Un point fixe[[[[Éditer | modifier le wikicode]
La position du joueur est représentée par les points fixes X, Y, Z. La partie fractionnaire est de 5 bits, donc divisez les entiers de type "court" dans la mise à jour de position par 32, vous avez une variable qui contient les coordonnées du joueur. Cette position représente le centre de la vue du joueur.
Sur un bloc[[[[Éditer | modifier le wikicode]
Le bas des pieds du joueur est situé à 1,59375 (point: 51) unité avant le centre. Ainsi, la position du joueur sur un bloc particulier devrait vous envoyer un paquet de "téléportation" (0x08) avec une valeur Y basée sur la position du bloc comme (Y x 32 + 51)
Orientation[[[[Éditer | modifier le wikicode]
A & # 39; Yaw & # 39; une valeur de 0 signifie que le joueur regarde dans une direction négative de Z (Z = 0). Cette valeur incrémente une direction dans le sens horaire, comme indiqué précédemment. Si une direction Z négative est appelée "Nord", le "Lacet" de 64 est l'Est, 128 est le Sud et 192 est l'Ouest.
Une valeur de pas de 0 signifie "niveau" et cette valeur augmente dans une direction opposée. 64 en bas et 192 en haut. Les valeurs de 65 à 191 ne doivent pas être rencontrées car le joueur ne peut regarder que dans l'intervalle [64; 191]. Cependant, Minecraft Classic prend en compte les valeurs non valides, il est donc possible de faire tourner la tête des joueurs.
Commentaires
Laisser un commentaire