Protocole – wiki.vg – Monter un serveur MineCraft
Author: Titanfall —
Short summary: Cette page présente une dissection du courant Protocole Minecraft. Si vous rencontrez des problèmes, consultez la FAQ ou demandez de l'aide sur le canal IRC #mcdevs sur chat.freenode.net (pour plus d'informations). Remarque: Bien que vous puissiez utiliser le contenu de cette page sans restriction pour créer des serveurs, des clients, des bots, etc., vous devez […]
Quick overview
- Site
- Tutos GameServer
- Canonical URL
- https://tutos-gameserver.fr/2019/08/12/protocole-wiki-vg-monter-un-serveur-minecraft/
- LLM HTML version
- https://tutos-gameserver.fr/2019/08/12/protocole-wiki-vg-monter-un-serveur-minecraft/llm
- LLM JSON version
- https://tutos-gameserver.fr/2019/08/12/protocole-wiki-vg-monter-un-serveur-minecraft/llm.json
- Manifest
- https://tutos-gameserver.fr/llm-endpoints-manifest.json
- Estimated reading time
- 7 minutes (362 seconds)
- Word count
- 1205
Key points
- Cette page présente une dissection du courant Protocole Minecraft.
- Si vous rencontrez des problèmes, consultez la FAQ ou demandez de l'aide sur le canal IRC #mcdevs sur chat.freenode.net (pour plus d'informations).
- Remarque: Bien que vous puissiez utiliser le contenu de cette page sans restriction pour créer des serveurs, des clients, des bots, etc., vous devez néanmoins attribuer une attribution à #mcdevs si vous copiez le contenu de cette page pour le publier ailleurs.
- Les modifications entre les versions peuvent être consultées dans l’historique du protocole.
Primary visual
Structured content
Cette page présente une dissection du courant Protocole Minecraft.
Si vous rencontrez des problèmes, consultez la FAQ ou demandez de l'aide sur le canal IRC #mcdevs sur chat.freenode.net (pour plus d'informations).
Remarque: Bien que vous puissiez utiliser le contenu de cette page sans restriction pour créer des serveurs, des clients, des bots, etc., vous devez néanmoins attribuer une attribution à #mcdevs si vous copiez le contenu de cette page pour le publier ailleurs.
Les modifications entre les versions peuvent être consultées dans l’historique du protocole.
Définitions Le serveur Minecraft accepte les connexions des clients TCP et communique avec eux via les paquets. Un paquet est une séquence d'octets envoyés via la connexion TCP. La signification d'un paquet dépend à la fois de son ID de paquet et de l'état actuel de la connexion. L'état initial de chaque connexion est Handshaking, et l'état est commuté à l'aide des paquets Handshake et Login Success.
Types de données Toutes les données envoyées sur le réseau (à l'exception de VarInt et de VarLong) sont big-endian, c'est-à-dire que les octets sont envoyés d'octet le plus significatif à l'octet le moins significatif. La majorité des ordinateurs de la vie courante étant de type little-endian, il peut être nécessaire de modifier l’endianisme avant d’envoyer des données sur le réseau.
prénom
Taille (octets)
Encode
Remarques
Booléen
1
Faux ou vrai
True est codé comme 0x01, faux comme 0x00.
Octet
1
Un entier compris entre -128 et 127
Entier de 8 bits signé, complément à deux
Octet non signé
1
Un entier compris entre 0 et 255
Nombre entier non signé de 8 bits
Court
2
Un entier compris entre -32768 et 32767
Entier signé de 16 bits, complément à deux
Short non signé
2
Un entier compris entre 0 et 65535
Entier 16 bits non signé
Int
4
Un entier compris entre -2147483648 et 2147483647
Entier 32 bits signé, complément à deux
Longue
8
Un entier compris entre -9223372036854775808 et 9223372036854775807
Entier 64 bits signé, complément à deux
Flotte
4
Nombre à virgule flottante IEEE 754 32 bits à simple précision
Double
8
Nombre à virgule flottante IEEE 754 64 bits double précision
String (n)
≥ 1 ≤ (n × 4) + 3
Une séquence de valeurs scalaires Unicode
La chaîne UTF-8 est préfixée avec sa taille en octets sous la forme d'un VarInt. Longueur maximale de n les caractères, qui varient selon le contexte; Jusqu'à n × 4 les octets peuvent être utilisés pour encoder n caractères et ces deux limites sont vérifiées. Maximum n La valeur est 32767. Le + 3 est dû à la taille maximale d'une longueur valide VarInt.
Bavarder
≥ 1 ≤ (32767 × 4) + 3
Voir le chat
Encodé en tant que chaîne avec une longueur maximale de 32767.
Identifiant
≥ 1 ≤ (32767 × 4) + 3
Voir Identifiant ci-dessous
Encodé en tant que chaîne avec une longueur maximale de 32767.
VarInt
≥ 1 ≤ 5
Un entier compris entre -2147483648 et 2147483647
Données de longueur variable codant un entier de 32 bits signé avec complément à deux; plus d'infos dans leur section
VarLong
≥ 1 ≤ 10
Un entier compris entre -9223372036854775808 et 9223372036854775807
Données de longueur variable codant un entier de 64 bits signé avec complément à deux; plus d'infos dans leur section
Métadonnées d'entité
Varie
Informations diverses sur une entité
Voir Entités # Format de métadonnées d'entité
Fente
Varie
Une pile d'objets dans un inventaire ou un conteneur
Voir les données d'emplacement
NBT Tag
Varie
Dépend du contexte
Voir NBT
Position
8
Un nombre entier / bloc: x (-33554432 à 33554431), y (-2048 à 2047), z (-33554432 à 33554431)
x en tant qu'entier sur 26 bits, suivi de y en tant qu'entier sur 12 bits, suivi de z en tant qu'entier sur 26 bits (tous signés, complément à deux). Voir aussi la section ci-dessous.
Angle
1
Un angle de rotation par paliers de 1/256 de tour complet
Peu importe que cela soit signé ou non, puisque les angles obtenus sont les mêmes.
UUID
16
Un UUID
Encodé sous la forme d'un entier non signé de 128 bits (ou de deux entiers non signés de 64 bits: les 64 bits les plus significatifs, puis les 64 bits les moins significatifs)
X optionnel
0 ou taille de X
Un champ de type X ou rien
Que le champ soit présent ou non doit être connu du contexte.
Tableau de X
compte fois la taille de X
Zéro ou plusieurs champs de type X
Le compte doit être connu du contexte.
X Enum
taille de X
Une valeur spécifique d'une liste donnée
La liste des valeurs possibles et la manière dont chacune est codée en tant que X doivent être connues à partir du contexte. Une valeur non valide envoyée par l'un ou l'autre côté entraînera généralement la déconnexion du client avec une erreur ou même un crash.
Tableau d'octets
Varie
Dépend du contexte
Ceci est juste une séquence de zéro octet ou plus, sa signification doit être expliquée ailleurs, par exemple. dans la description du paquet. La longueur doit également être connue à partir du contexte.
Identifiant Les identifiants sont un lieu d'espacement de noms, sous la forme: minecraft: chose. Si l'espace de nom n'est pas fourni, sa valeur par défaut est Minecraft (c'est à dire. chose est minecraft: chose. Le contenu personnalisé doit toujours figurer dans son propre espace de noms, pas celui par défaut. L'espace de noms ne doit utiliser que les caractères 01 234 5 6 78 9abcdefghijklmnopqrstuvwxyz-_; les noms réels peuvent contenir plus de symboles. La convention de nommage est lower_case_with_underscores. Plus d'information.
VarInt et VarLong Format de longueur variable tel que des nombres plus petits utilisent moins d'octets. Celles-ci sont très similaires à Varints de la mémoire tampon de protocole: les 7 bits les moins significatifs servent à coder la valeur et le bit le plus significatif indique s'il existe un autre octet après celui-ci pour la partie suivante du nombre. Le groupe le moins significatif est écrit en premier, suivi de chacun des groupes les plus significatifs; ainsi, les VarInts sont en réalité un peu endian (cependant, les groupes sont composés de 7 bits et non de 8).
VarInts ne dépasse jamais 5 octets et VarLongs ne dépasse jamais 10 octets.
Pseudocode pour lire et écrire VarInts et VarLongs:
public static int readVarInt () int numRead = 0; int result = 0; octet lu; faire read = readByte (); int valeur = (lire & 0b01111111); résultat while ((lire & 0b10000000)! = 0);
retourne le résultat;
public statique long readVarLong () int numRead = 0; résultat long = 0; octet lu; faire read = readByte (); int valeur = (lire & 0b01111111); résultat while ((lire & 0b10000000)! = 0);
retourne le résultat;
public statique void writeVarInt (int value) faire octet temp = (octet) (valeur & 0b01111111); // Remarque: >>> signifie que le bit de signe est décalé avec le reste du nombre plutôt que d'être laissé seul valeur >>> = 7; si (valeur! = 0) temp writeByte (temp); while (valeur! = 0);
public statique vide writeVarLong (valeur longue) faire octet temp = (octet) (valeur & 0b01111111); // Remarque: >>> signifie que le bit de signe est décalé avec le reste du nombre plutôt que d'être laissé seul valeur >>> = 7; si (valeur! = 0) temp writeByte (temp); while (valeur! = 0);
Topics and keywords
Themes: Serveur minecraft
License & attribution
License: CC BY-ND 4.0.
Attribution required: yes.
Manifest: https://tutos-gameserver.fr/llm-endpoints-manifest.json
LLM Endpoints plugin version 1.1.2.