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 */