cerca de 70% da tradução está concluída
A documentação sobre o protocolo usado pelo servidor Minecraft Classic Creative server.
Comunicação Minecraft.net
Heartbeats
o ser capaz de se conectar a um servidor em Minecraft Classic para o Server List,um servidor deve transmitir a minecraft.net uma chamada "pulsação" a cada poucos minutos.
The stock server broadcasts this heartbeat every 45 seconds.
A "batimento cardíaco" assume a forma de uma solicitação HTTP para https://minecraft.net/heartbeat.jsp. Depois de enviar um piscar de olhos, a URL para o servidor é retornado.
É fundamental um piscar de olhos bem sucedida que você deixar de fora o "www" na solicitação HTTP, como você está indo para ser alvo-lo como um URI, e não uma URL.
Pode ser uma solicitação GET ou POST. Uma tabela dos parâmetros necessários está abaixo:
Name | Details |
---|---|
port | Port number of the server. This is usually 25565 |
max | Maximum number of players on the server |
name | The name of the server |
public | Whether the server is public (i.e. appears in the lobby) or not. Can be True or False, in that capitalization. |
version | Minecraft version, this should be 7 |
salt | A random, 16-character base-62 salt |
users | Number of users connected to the server |
A maneira mais simples para enviar uma pulsação do coração é para abrir um soquete TCP para a porta 80 no minecraft.net, e enviar a seguinte (com os valores alterados, obviamente):
OBTER/heartbeat.jsp?port=25565&max=32&name=My%20Server&public=True&version=7&salt=wo6kVAHjxoJcInKx&users=0, acrescido de um CRLF (Carriage-retorno e alimentação de linha).
Certifique-se de quaisquer cordas, como nome, escapamos.
Se tudo correr bem, no corpo da resposta você receberá um URL para o servidor. Caso contrário, você vai ter uma agradável mensagem de erro HTML. Não existem quaisquer cabeçalhos HTML para analisar, como a versão HTTP não é especificado de modo HTTP / 0.9 é usado, que não tem cabeçalhos.
Autenticação De Usuário
A "chave" fornecido quando um usuário se junta o servidor pode ser comparado com o MD5 checksum de "sal" do servidor mais o nome de usuário para verificar se o usuário está conectado para minecraft.net com esse nome de usuário. Isso é útil para estabelecer a confiança suficiente do nome fornecido para proibir ou o jogador
if( player.key == md5( server.salt + player.name ) ) { // jogador é registrado em via minecraft.net } else { // jogador está forjando o nome de usuário }
Esta é também a maneira que impede Notch "cracking", ou pirateado, os clientes acessem servidores online. Quando um cliente rachado tenta se conectar a um servidor online, um erro irá aparecer na tela de conexão, dizendo: "Falha ao conectar: Usuário Não premium"
Nota: Isso significa que você deve se certificar que seu "sal" é mantido em segredo e compartilhada apenas com heartbeat.jsp. Se "sal" do seu servidor é visível em qualquer lugar para usuários, é trivial para os usuários a produzir válida para o futuro "chave" s sem ser conectado para minecraft.net.
Protocolo Packet
Cada pacote inicia-se com um byte representando a ID do pacote.
Tipos de protocolo de dados
tipo | tamanho [bytes] | Descrição |
---|---|---|
Byte | 1 | Inteiro byte único (0 a 255) |
SByte | 1 | Integer único byte assinado (-128 a 127) |
Short | 2 | Inteiro assinado, network order (-32768 to 32767) |
String | 64 | US-ASCII / ISO646-US seqüência codificada preenchido com espaços(0x20) |
Byte array | 1024 | Dados binários preenchidos com bytes nulos (0x00) |
Pacotes de cliente → servidor
Packet ID | Purpose | Field Description | Field Type | Notes |
---|---|---|---|---|
0x00 | Player Identification | Packet ID | Byte | Sent by a player joining a server with relevant information. Current protocol version is 0x07. |
Protocol version | Byte | |||
Username | String | |||
Verification key | String | |||
Unused | Byte | |||
0x05 | Set Block | Packet ID | Byte | Sent when a user changes a block. The mode field indicates whether a block was created (0x01) or destroyed (0x00).
Block type is always the type player is holding, (even when deleting). Client assumes that this command packet always succeeds, and so draws the new block immediately. To disallow block creation, server must send back Set Block packet with the old block type. The XYZ coordinates of the block are just integers representing the coordinate of the block. (As opposed to player coordinates where the lower 5 bits are fractional coordinates) |
X | Short | |||
Y | Short | |||
Z | Short | |||
Mode | Byte | |||
Block type | Byte | |||
0x08 | Position and Orientation | Packet ID | Byte | Sent frequently (even while not moving) by the player with the player's current location and orientation. Player ID is always 255, referring to itself. Player coordinates are fixed-point values with the lowest 5 bits representing the fractional position (i.e. divide by 32 to get actual position in terms of block coordinates). The angle parameters are scaled such that a value of 256 would correspond to 360 degrees. |
Player ID | Byte | |||
X | Short | |||
Y | Short | |||
Z | Short | |||
Yaw (Heading) | Byte | |||
Pitch | Byte | |||
0x0d | Message | Packet ID | Byte | Contain chat messages sent by player. |
Unused, maybe message color | Byte (0xFF) | |||
Message | String |
Servidor → pacotes de cliente
Packet ID | Purpose | Field Description | Field Type | Notes |
---|---|---|---|---|
0x00 | Server Identification | Packet ID | Byte | Response to a joining player. The user type indicates whether a player is an op (0x64) or not (0x00) Current protocol version is 0x07. |
Protocol version | Byte | |||
Server name | String | |||
Server MOTD | String | |||
User type | Byte | |||
0x01 | Ping | Packet ID | Byte | Sent to clients periodically. The only way a client can disconnect at the moment is to force it closed, which does not let the server know. The ping packet is used to determine if the connection is still open. |
0x02 | Level Initialize | Packet ID | Byte | Notifies player of incoming level data. |
0x03 | Level Data Chunk | Packet ID | Byte | Contains a chunk of gzipped map (not level.dat file). After decompression the map consists of an int(4 bytes) containing number of blocks + raw map array. (chunk is up to 1024 bytes, padded with 0x00s if less). |
Chunk Length | Short | |||
Chunk Data | Byte Array | |||
Percent Complete | Byte | |||
0x04 | Level Finalize | Packet ID | Byte | Sent after level data is complete and gives map dimensions. The y coordinate is how tall the map is. |
X Size | Short | |||
Y Size | Short | |||
Z Size | Short | |||
0x06 | Set Block | Packet ID | Byte | Sent to indicate a block change by physics or by players. In the case of a player change, the server will also echo the block change back to the player who initiated it. |
X | Short | |||
Y | Short | |||
Z | Short | |||
Block Type | Byte | |||
0x07 | Spawn Player | Packet ID | Byte | Sent to indicate where a new player is spawning in the world. Position and orientation are encoded the same as for packet 0x08 below. |
Player ID | SByte | |||
Player Name | String | |||
X | Short | |||
Y | Short | |||
Z | Short | |||
Yaw (Heading) | Byte | |||
Pitch | Byte | |||
0x08 | Position and Orientation (Player Teleport) | Packet ID | Byte | Sent with changes in player position and rotation. Teleports player it's sent to if player ID < 0 (For sending initial position in map, and /tp) |
Player ID | SByte | |||
X | Short | |||
Y | Short | |||
Z | Short | |||
Yaw (Heading) | Byte | |||
Pitch | Byte | |||
0x09 | Position and Orientation Update | Packet ID | Byte | Sent with changes in player position and rotation. Sent when both position and orientation is changed at the same time.
Not required for server operation. |
Player ID | SByte | |||
Change in X | SByte | |||
Change in Y | SByte | |||
Change in Z | SByte | |||
Yaw (Heading) | Byte | |||
Pitch | Byte | |||
0x0a | Position Update | Packet ID | Byte | Sent with changes in player position.
Not required for server operation. |
Player ID | SByte | |||
Change in X | SByte | |||
Change in Y | SByte | |||
Change in Z | SByte | |||
0x0b | Orientation Update | Packet ID | Byte | Sent with changes in player rotation.
Not required for server operation. |
Player ID | SByte | |||
Yaw (Heading) | Byte | |||
Pitch | Byte | |||
0x0c | Despawn Player | Packet ID | Byte | Sent when player disconnects. |
Player ID | SByte | |||
0x0d | Message | Packet ID | Byte | Messages sent by chat or from the console. |
Player ID | SByte | |||
Message | String | |||
0x0e | Disconnect player | Packet ID | Byte | Sent to a player when they're disconnected from the server.
|
Disconnect reason | String | |||
0x0f | Update user type | Packet ID | Byte | Sent when a player is opped/deopped
Will give or remove the client's ability of breaking Bedrock blocks
|
User type | Byte |
Posição do Jogador
Ponto Fixo
Posição do jogador é representado através de X, Y, Z e coordenadas de ponto fixo. A parte fracionária é de 5 bits, então dividindo os inteiros curtos recebidos em pacotes de atualização de posição por 32, você terá ponto flutuante coordenadas para o jogador. Esta posição corresponde ao centro da janela do cliente.
Estar em Coisas
A parte inferior do pé do jogador está localizado 1,59375 (ponto fixo: 51) unidades abaixo do centro da janela de visualização, de modo a posicionar o aparelho em cima de um bloco especial que você poderia enviar um pacote de teletransporte (0x08) especificando um valor de Y com base em a posição do bloco como: (Y x 32 + 51)
orientação
Um valor de guinada de 0 significa que o jogador está enfrentando no (Z negativo) direcção Z-. Este valor aumenta no sentido horário como visto a partir de cima. Se chamarmos a direção Z negativa "do Norte", em seguida, uma guinada de 64 significa "Oriente", 128 significa "do Sul", e 192 significa "Ocidente".
Um valor de inclinação de 0 significa nível e este valor aumenta no sentido descendente. 64 é baixo, e 192 é para cima. Os valores de 65-191 nunca deve ocorrer porque o jogador não pode olhar mais para cima ou para baixo do que o intervalo de 64 → 0, 255 → 192. No entanto, o cliente Minecraft clássico não ignora valores inválidos, por isso, é possível fazer as cabeças dos jogadores "upside-down".
Color Codes

Hex digit to color mapping
As mensagens enviadas a partir do servidor para o cliente pode conter códigos de cores, que permitem coloração de texto para vários fins.
Um símbolo comercial (&) seguido de um dígito hex na mensagem informa o cliente para mudar as cores ao exibir texto. A versão atual do jogo usa um símbolo da seção (§), mas a versão 0.30 usa ampersands. Para os códigos de formatação para a versão atual do jogo, consulte Formatando códigos.
O código de cores no início da mensagem só vai funcionar se o byte player ID é inferior a 127. Se for 127 ou superior, o jogo adiciona automaticamente & e antes que a mensagem, tornando-se amarelo. No entanto, os códigos de cores após a primeira personagem ainda funcionam. Se você usar um ID abaixo 127, ele não adiciona um código de cor, então aqueles que você usa irá funcionar.
Sample | Code | Common Name | Alternate Name | Foreground Color | Background Color | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
R | G | B | HEX | R | G | B | HEX | ||||
&0 | Black | Black | 0 | 0 | 0 | #000 | 0 | 0 | 0 | #000000 | |
&1 | Dark Blue | Navy | 0 | 0 | 170 | #00A | 0 | 0 | 42 | #00002A | |
&2 | Dark Green | Green | 0 | 170 | 0 | #0A0 | 0 | 42 | 0 | #002A00 | |
&3 | Teal | Teal | 0 | 170 | 170 | #0AA | 0 | 42 | 42 | #002A2A | |
&4 | Dark Red | Maroon | 170 | 0 | 0 | #A00 | 42 | 0 | 0 | #2A0000 | |
&5 | Purple | Purple | 170 | 0 | 170 | #A0A | 42 | 0 | 42 | #2A002A | |
&6 | Dark Yellow | Gold | 170 | 170 | 0 | #AA0 | 42 | 42 | 0 | #2A2A00 | |
&7 | Grey | Silver | 170 | 170 | 170 | #AAA | 42 | 42 | 42 | #2A2A2A | |
&8 | Dark Grey | Grey | 85 | 85 | 85 | #555 | 21 | 21 | 21 | #151515 | |
&9 | Indigo | Blue | 85 | 85 | 255 | #55F | 21 | 21 | 63 | #15153F | |
&a | Bright Green | Lime | 85 | 255 | 85 | #5F5 | 21 | 63 | 21 | #153F15 | |
&b | Cyan | Aqua | 85 | 255 | 255 | #5FF | 21 | 63 | 63 | #153F3F | |
&c | Red | Red | 255 | 85 | 85 | #F55 | 63 | 21 | 21 | #3F1515 | |
&d | Pink | Pink | 255 | 85 | 255 | #F5F | 63 | 21 | 63 | #3F153F | |
&e | Yellow | Yellow | 255 | 255 | 85 | #FF5 | 63 | 63 | 21 | #3F3F15 | |
&f | White | White | 255 | 255 | 255 | #FFF | 63 | 63 | 63 | #3F3F3F |
Ajuda | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Telas do menu |
| ||||||||||||||||||
Personalização do jogo | |||||||||||||||||||
Edições |
| ||||||||||||||||||
Diversos |