Razón: La información desactualizada y actualizada se está mezclando en la página del protocolo de servidor desactualizado. Nota: Es un protocolo "Clásico", no "Actual". Los contenidos de esta página no son compatibles con Mojang Studios o Minecraft . Esta función es exclusiva de Java Edition.
Documentación sobre el protocolo de servidor utilizado por el servidor Minecraft Classic Creative.
Contenido
- 1 Comunicación de Minecraft.net
- 1.1 Latidos del corazón
- 1.2 Autenticación de usuario
- Protocolo de 2 paquetes
- 2.1 Tipos de datos de protocolo
- 2.2 Cliente → Paquetes de servidor
- 2.3 Servidor → Paquetes de cliente
- Posición de 3 jugadores
- 3.1 Punto fijo
- 3.2 Pararse sobre las cosas
- 3.3 Orientación
- 4 códigos de colores
Comunicación de Minecraft.net
Los latidos del corazón
Para poder conectarse a un servidor en Minecraft Classic desde la Lista de servidores, un servidor debe transmitir a minecraft.net un llamado "latido" cada pocos minutos.
El servidor de valores transmite este latido cada 45 segundos.
Un "latido" toma la forma de una solicitud HTTP a https://minecraft.net/heartbeat.jsp. Después de enviar un latido, se devuelve la URL del servidor.
Es fundamental para un latido exitoso que omita "www" en la solicitud HTTP, ya que lo apuntará como un URI, no como una URL.
Puede ser una solicitud GET o POST. A continuación se muestra una tabla de los parámetros requeridos:
Nombre | Detalles |
---|---|
Puerto | Número de puerto del servidor. Suele ser 25565 |
max | Número máximo de jugadores en el servidor |
nombre | El nombre del servidor |
público | Si el servidor es público (es decir, aparece en el lobby) o no. Puede ser Verdadero or Falso, en esa capitalización. |
versión | Versión de Minecraft, debería ser 7 |
sal | Una sal de base 16 aleatoria de 62 caracteres |
usuarios | Número de usuarios conectados al servidor |
La forma más sencilla de enviar un latido es abrir un socket TCP al puerto 80 en minecraft.net y enviar lo siguiente (con los valores cambiados, obviamente):
GET /heartbeat.jsp?port=25565&max=32&name=My%20Server&public=True&version=7&salt=wo6kVAHjxoJcInKx&users=0, más un CRLF (retorno de carro y salto de línea).
Asegúrese de que se escapen las cadenas, como el nombre.
Si todo va bien, en el cuerpo de la respuesta recibirás una URL del servidor. De lo contrario, obtendrá un bonito mensaje de error HTML. No hay encabezados HTML para analizar, ya que la versión HTTP no está especificada, por lo que se usa HTTP / 0.9, que no tiene encabezados.
Autenticacion de usuario
La "clave" proporcionada cuando un usuario se une al servidor se puede comparar con la suma de comprobación MD5 de la "sal" del servidor más el nombre de usuario para verificar que el usuario haya iniciado sesión en minecraft.net con ese nombre de usuario. Esto es útil para establecer suficiente confianza en el nombre proporcionado para prohibir u oprimir al jugador por su nombre.
if (player.key == md5 (server.salt + player.name)) {// el jugador ha iniciado sesión a través de minecraft.net} else {// el jugador está falsificando el nombre de usuario}
Esta es también la forma en que Notch evita que los clientes "pirateados" o pirateados accedan a los servidores en línea. Cuando un cliente crackeado intenta conectarse a un servidor en línea, aparecerá un error en la pantalla de conexión que dice: "Error al conectar: el usuario no es Premium".
Nota: Esto significa que debe asegurarse de que su "sal" se mantenga en secreto y se comparta solo con heartbeat.jsp. Si la "sal" de su servidor es visible en cualquier lugar para los usuarios, es trivial para los usuarios producir "claves" de apariencia válida sin haber iniciado sesión en minecraft.net.
Protocolo de paquetes
Cada paquete comienza con un byte que representa el ID del paquete.
Tipos de datos de protocolo
Tipo | Tamaño [bytes] | Descripción |
---|---|---|
Byte | 1 | Entero de un solo byte (0 a 255) |
SByte | 1 | Entero de un solo byte con signo (-128 a 127) |
Corto | 2 | Entero con signo, orden de red (-32768 a 32767) |
Cordón | 64 | Cadena codificada US-ASCII / ISO646-US rellenada con espacios (0x20) |
Matriz de bytes | 1024 | Datos binarios rellenados con bytes nulos (0x00) |
Paquetes de cliente → servidor
ID de paquete | Propósito | campo Descripción | Tipo de campo | |
---|---|---|---|---|
0x00 | Identificación del jugador | ID de paquete | Byte | Enviado por un jugador que se une a un servidor con información relevante. La versión actual del protocolo es 0x07. |
Versión del protocolo | Byte | |||
Usuario | Cordón | |||
Clave de verificación | Cordón | |||
No usado | Byte | |||
0x05 | Establecer bloque | ID de paquete | Byte | Enviado cuando un usuario cambia un bloque. El campo de modo indica si se creó un bloque (0x01) o se destruyó (0x00).
El tipo de bloque es siempre el tipo que el jugador sostiene (incluso al eliminar). El cliente asume que este paquete de comando siempre tiene éxito y, por lo tanto, dibuja el nuevo bloque inmediatamente. Para no permitir la creación de bloques, el servidor debe devolver el paquete Set Block con el tipo de bloque antiguo. Las coordenadas XYZ del bloque son solo números enteros que representan la coordenada del bloque. (A diferencia de las coordenadas del jugador donde los 5 bits inferiores son coordenadas fraccionarias) |
X | Corto | |||
Y | Corto | |||
Z | Corto | |||
Moda | Byte | |||
Tipo de bloque | Byte | |||
0x08 | Posición y orientación | ID de paquete | Byte | Enviado con frecuencia (incluso cuando no está en movimiento) por el jugador con la ubicación y orientación actual del jugador. El ID del jugador es siempre 255, refiriéndose a sí mismo. Las coordenadas del jugador son valores de punto fijo con los 5 bits más bajos que representan la posición fraccionaria (es decir, dividir por 32 para obtener la posición real en términos de coordenadas de bloque). Los parámetros de ángulo se escalan de manera que un valor de 255 correspondería a 360 grados. |
ID de jugador | Byte | |||
X | Corto | |||
Y | Corto | |||
Z | Corto | |||
Guiñada (rumbo) | Byte | |||
Paso | Byte | |||
0x0d | Mensaje | ID de paquete | Byte | Contienen mensajes de chat enviados por el jugador. |
Sin usar, tal vez el color del mensaje | Byte (0xFF) | |||
Mensaje | Cordón |
Servidor → Paquetes de cliente
ID de paquete | Propósito | campo Descripción | Tipo de campo | |
---|---|---|---|---|
0x00 | Identificación del servidor | ID de paquete | Byte | Respuesta a un jugador que se une. El tipo de usuario indica si un jugador es una operación (0x64) o no (0x00) La versión actual del protocolo es 0x07. |
Versión del protocolo | Byte | |||
Nombre del servidor | Cordón | |||
Servidor MOTD | Cordón | |||
Tipo de usuario | Byte | |||
0x01 | Ping | ID de paquete | Byte | Enviado a clientes periódicamente. La única forma en que un cliente puede desconectarse en este momento es forzar su cierre, lo que no deja saber al servidor. El paquete de ping se utiliza para determinar si la conexión aún está abierta. |
0x02 | Inicializar nivel | ID de paquete | Byte | Notifica al jugador de los datos de nivel entrantes. |
0x03 | Trozo de datos de nivel | ID de paquete | Byte | Contiene un fragmento de mapa comprimido con gzip (no el archivo level.dat). Después de la descompresión, el mapa consta de un int (4 bytes) que contiene el número de bloques + matriz de mapa sin procesar. (el fragmento tiene hasta 1024 bytes, relleno con 0x00 si es menos). |
Longitud del trozo | Corto | |||
Chunk Data | Matriz de bytes | |||
Porcentaje completo | Byte | |||
0x04 | Finalizar nivel | ID de paquete | Byte | Se envía después de que los datos del nivel estén completos y proporcionen las dimensiones del mapa. La coordenada y es la altura del mapa. |
Talla x | Corto | |||
Tamaño Y | Corto | |||
Tamaño Z | Corto | |||
0x06 | Establecer bloque | ID de paquete | Byte | Enviado para indicar un cambio de bloque por la física o por los jugadores. En el caso de un cambio de jugador, el servidor también hará eco del cambio de bloqueo al jugador que lo inició. |
X | Corto | |||
Y | Corto | |||
Z | Corto | |||
Tipo de bloque | Byte | |||
0x07 | Reproductor de generación | ID de paquete | Byte | Enviado para indicar dónde está apareciendo un nuevo jugador en el mundo. La posición y la orientación se codifican de la misma manera que para el paquete 0x08 a continuación. |
ID de jugador | SByte | |||
Nombre del jugador | Cordón | |||
X | Corto | |||
Y | Corto | |||
Z | Corto | |||
Guiñada (rumbo) | Byte | |||
Paso | Byte | |||
0x08 | Posición y orientación (Teletransporte de jugador) | ID de paquete | Byte | Enviado con cambios en la posición y rotación del jugador. Teletransporta al jugador al que se envía si el ID del jugador es <0 (para enviar la posición inicial en el mapa y / tp) |
ID de jugador | SByte | |||
X | Corto | |||
Y | Corto | |||
Z | Corto | |||
Guiñada (rumbo) | Byte | |||
Paso | Byte | |||
0x09 | Actualización de posición y orientación | ID de paquete | Byte | Enviado con cambios en la posición y rotación del jugador. Se envía cuando se cambia la posición y la orientación al mismo tiempo.
No es necesario para el funcionamiento del servidor. |
ID de jugador | SByte | |||
Cambio en X | SByte | |||
Cambio en Y | SByte | |||
Cambio en Z | SByte | |||
Guiñada (rumbo) | Byte | |||
Paso | Byte | |||
0x0a | Actualización de posición | ID de paquete | Byte | Enviado con cambios en la posición del jugador.
No es necesario para el funcionamiento del servidor. |
ID de jugador | SByte | |||
Cambio en X | SByte | |||
Cambio en Y | SByte | |||
Cambio en Z | SByte | |||
0x0b | Actualización de Orientación | ID de paquete | Byte | Enviado con cambios en la rotación de jugadores.
No es necesario para el funcionamiento del servidor. |
ID de jugador | SByte | |||
Guiñada (rumbo) | Byte | |||
Paso | Byte | |||
0x0c | Jugador desaparecido | ID de paquete | Byte | Enviado cuando el jugador se desconecta. |
ID de jugador | SByte | |||
0x0d | Mensaje | ID de paquete | Byte | Mensajes enviados por chat o desde la consola. |
ID de jugador | SByte | |||
Mensaje | Cordón | |||
0x0e | Desconectar jugador | ID de paquete | Byte | Enviado a un jugador cuando está desconectado del servidor.
|
Motivo de desconexión | Cordón | |||
0x0f | Actualizar el tipo de usuario | ID de paquete | Byte | Enviado cuando un jugador es optado / retirado
Dará o eliminará la capacidad del cliente de romper los bloques de Bedrock
|
Tipo de usuario | Byte |
Posición de jugador
Punto fijo
La posición del jugador se representa mediante coordenadas de punto fijo X, Y y Z. La porción fraccionaria es de 5 bits, por lo que dividiendo los enteros cortos recibidos en los paquetes de actualización de posición por 32, tendrá coordenadas de punto flotante para el jugador. Esta posición corresponde al centro de la ventana del cliente.
De pie sobre las cosas
La parte inferior de los pies del jugador se encuentra 1.59375 (punto fijo: 51) unidades debajo del centro de la ventana, por lo que para colocar al jugador en la parte superior de un bloque en particular, podría enviar un paquete de teletransporte (0x08) especificando un valor Y basado en la posición del bloque como: (Y x 32 + 51)
Orientación
Un valor de guiñada de 0 significa que el jugador está mirando en la dirección Z- (Z negativa). Este valor aumenta en el sentido de las agujas del reloj como se ve desde arriba. Si llamamos "Norte" a la dirección Z negativa, entonces una guiñada de 64 significa "Este", 128 significa "Sur" y 192 significa "Oeste".
Un valor de tono de 0 significa nivel y este valor aumenta en dirección descendente. 64 está inactivo y 192 está activo. Los valores de 65 a 191 nunca deben ocurrir porque el jugador no puede mirar más hacia arriba o hacia abajo que el rango 64 → 0, 255 → 192. Sin embargo, el cliente de Minecraft Classic no ignora los valores no válidos, por lo que es posible poner las cabezas de los jugadores "al revés".
Codigos de color
Este artículo trata sobre el protocolo de servidor clásico. Para conocer los códigos de color actualizados que se utilizan en la versión actual de Minecraft, consulte Códigos de formato.Los mensajes enviados desde el servidor al cliente pueden contener códigos de color, que permiten colorear el texto para diversos fines.
Un símbolo comercial (&) seguido de un dígito hexadecimal en el mensaje le dice al cliente que cambie de color mientras muestra el texto. La versión actual del juego usa un símbolo de sección (§), pero la versión 0.30 usa símbolos de unión. Para conocer los códigos de formato de la versión actual del juego, consulte Códigos de formato.
La codificación de colores al comienzo del mensaje solo funcionará si el byte de ID del jugador es menor que 127. Si es 127 o más, el juego agrega automáticamente & e antes del mensaje, haciéndolo amarillo. Sin embargo, los códigos de color después del primer carácter siguen funcionando. Si usa un ID por debajo de 127, no agrega un código de color, por lo que los que usa funcionarán.
Mapeo de dígitos hexadecimales a color.
Muestra | Código | Nombre común | Nombre alternativo | Color de primer plano | Color de fondo | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
R | G | B | MALEFICIO | R | G | B | MALEFICIO | ||||
&0 | Negro | Negro | 0 | 0 | 0 | #000 | 0 | 0 | 0 | #000000 | |
&1 | Azul oscuro | Azul | 0 | 0 | 170 | #00A | 0 | 0 | 42 | #00002A | |
&2 | Verde Oscuro | Verde | 0 | 170 | 0 | #0A0 | 0 | 42 | 0 | #002A00 | |
&3 | Teal | Teal | 0 | 170 | 170 | # 0AA | 0 | 42 | 42 | # 002A2A | |
&4 | Rojo Oscuro | Granate | 170 | 0 | 0 | # A00 | 42 | 0 | 0 | #2A0000 | |
&5 | Morado | Morado | 170 | 0 | 170 | # A0A | 42 | 0 | 42 | # 2A002A | |
&6 | Amarillo oscuro | Oro | 170 | 170 | 0 | #AA0 | 42 | 42 | 0 | # 2A2A00 | |
&7 | Gray | Plata | 170 | 170 | 170 | #AAA | 42 | 42 | 42 | # 2A2A2A | |
&8 | Gris oscuro | Gray | 85 | 85 | 85 | #555 | 21 | 21 | 21 | #151515 | |
&9 | Índigo | Blue | 85 | 85 | 255 | #55F | 21 | 21 | 63 | #15153F | |
&a | Verde brillante | Limón | 85 | 255 | 85 | # 5F5 | 21 | 63 | 21 | # 153F15 | |
&b | Cian | Aqua | 85 | 255 | 255 | # 5FF | 21 | 63 | 63 | # 153F3F | |
&c | Rojo | Rojo | 255 | 85 | 85 | # F55 | 63 | 21 | 21 | # 3F1515 | |
&d | Rosa | Rosa | 255 | 85 | 255 | # F5F | 63 | 21 | 63 | # 3F153F | |
&e | Amarillo | Amarillo | 255 | 255 | 85 | # FF5 | 63 | 63 | 21 | # 3F3F15 | |
&f | Blanco | Blanco | 255 | 255 | 255 | #FFF | 63 | 63 | 63 | # 3F3F3F |
Edición Java | |||||||
---|---|---|---|---|---|---|---|
versiones |
| ||||||
Desarrollo |
| ||||||
Apoyo técnico |
| ||||||
Multijugador |
| ||||||
Personalización del juego |
|