master uint/magnolia / include / net / mc_proto.h
  1#ifndef MC_PROTO_H
  2#define MC_PROTO_H
  3
  4#include <stddef.h>
  5
  6#include "types.h"
  7
  8#define MC_PROTOCOL_1_8_9 47
  9
 10typedef struct MCClient MCClient;
 11
 12typedef struct {
 13	const char* username;
 14	const char* profile_uuid;
 15	const char* access_token;
 16} MCAccount;
 17
 18typedef struct {
 19	i32    id;
 20	u8*    data;
 21	size_t size;
 22} MCPacket;
 23
 24typedef enum {
 25	MC_EC_OK,
 26	MC_EC_INVALID_ADDRESS,
 27	MC_EC_RESOLVE_FAILED,
 28	MC_EC_CONNECT_FAILED,
 29	MC_EC_SOCKET_READ,
 30	MC_EC_SOCKET_WRITE,
 31	MC_EC_INVALID_PACKET_LENGTH,
 32	MC_EC_INVALID_COMPRESSED_PACKET,
 33	MC_EC_ZLIB,
 34	MC_EC_MALFORMED_PACKET,
 35	MC_EC_OUT_OF_MEMORY,
 36	MC_EC_INVALID_PUBLIC_KEY,
 37	MC_EC_RSA_MESSAGE_TOO_LARGE,
 38	MC_EC_RSA_ENCRYPT,
 39	MC_EC_RANDOM,
 40	MC_EC_TLS_INIT,
 41	MC_EC_TLS_CONFIG,
 42	MC_EC_TLS_CONNECT,
 43	MC_EC_TLS_WRITE,
 44	MC_EC_TLS_READ,
 45	MC_EC_SESSION_REJECTED,
 46	MC_EC_LOGIN_DISCONNECT,
 47	MC_EC_UNEXPECTED_LOGIN_PACKET,
 48	MC_EC_INVALID_CLIENT,
 49	MC_EC_POLL,
 50	MC_EC_CONNECTION_CLOSED,
 51	MC_EC_LOGIN_START,
 52	MC_EC_INVALID_ACCOUNT,
 53	MC_EC_CRYPTO_DISABLED,
 54
 55	MC_EC_LAST
 56} MCErrorCode;
 57
 58/* log in to minecraft server
 59   returns 1 on success, 0 on failure */
 60i8 mc_client_login(MCClient** out, const char* address, const MCAccount* account, char* error, size_t error_size);
 61
 62/* interrupt blocking client operations */
 63void mc_client_interrupt(MCClient* client);
 64
 65/* destroy minecraft client */
 66void mc_client_destroy(MCClient* client);
 67
 68/* read next packet from client
 69   returns 1 on success, 0 on failure */
 70i8 mc_client_read(MCClient* client, MCPacket* packet, char* error, size_t error_size);
 71
 72/* write packet to client
 73   returns 1 on success, 0 on failure */
 74i8 mc_client_write(MCClient* client, i32 packet_id, const void* data, size_t size);
 75
 76/* poll for packets
 77   returns 1: packet recieved, 0: no packet awaiting, -1: connection error */
 78i8 mc_client_poll(MCClient* client, MCPacket* packet, char* error, size_t error_size);
 79
 80/* free packet data */
 81void mc_packet_free(MCPacket* packet);
 82
 83/* send server player look data
 84   returns 1 on success, 0 on failure */
 85i8 mc_client_send_position_look(MCClient* client, double x, double feet_y, double z, float yaw, float pitch,
 86                                i8 grounded);
 87
 88/* get client username
 89   returns username, or empty string for null client */
 90const char* mc_client_username(const MCClient* client);
 91
 92/* get client uuid
 93   returns uuid, or empty string for null client */
 94const char* mc_client_uuid(const MCClient* client);
 95
 96/* get last minecraft client error code
 97   returns last error code */
 98MCErrorCode mc_last_error_code(void);
 99
100#endif /* MC_PROTO_H */