@vaitosoi/minejs 0.2.1 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/assets/minecraft/26.2/packets.json +4741 -0
  2. package/dist/base/bitset.d.ts +9 -0
  3. package/dist/base/bitset.d.ts.map +1 -0
  4. package/dist/base/bitset.js +46 -0
  5. package/dist/base/bitset.js.map +1 -0
  6. package/dist/base/error.d.ts +105 -0
  7. package/dist/base/error.d.ts.map +1 -0
  8. package/dist/base/error.js +194 -0
  9. package/dist/base/error.js.map +1 -0
  10. package/dist/base/event.d.ts +7 -0
  11. package/dist/base/event.d.ts.map +1 -0
  12. package/dist/base/event.js +3 -0
  13. package/dist/base/event.js.map +1 -0
  14. package/dist/base/math.d.ts +25 -0
  15. package/dist/base/math.d.ts.map +1 -0
  16. package/dist/base/math.js +69 -0
  17. package/dist/base/math.js.map +1 -0
  18. package/dist/base/typing.d.ts +9 -0
  19. package/dist/base/typing.d.ts.map +1 -0
  20. package/dist/base/typing.js +3 -0
  21. package/dist/base/typing.js.map +1 -0
  22. package/dist/client/auth.d.ts +39 -0
  23. package/dist/client/auth.d.ts.map +1 -0
  24. package/dist/client/auth.js +307 -0
  25. package/dist/client/auth.js.map +1 -0
  26. package/dist/client/client.d.ts +73 -0
  27. package/dist/client/client.d.ts.map +1 -0
  28. package/dist/client/client.js +136 -0
  29. package/dist/client/client.js.map +1 -0
  30. package/dist/client/static.d.ts +28 -0
  31. package/dist/client/static.d.ts.map +1 -0
  32. package/dist/client/static.js +43 -0
  33. package/dist/client/static.js.map +1 -0
  34. package/dist/client/tcp.d.ts +84 -0
  35. package/dist/client/tcp.d.ts.map +1 -0
  36. package/dist/client/tcp.js +173 -0
  37. package/dist/client/tcp.js.map +1 -0
  38. package/dist/index.d.ts +21 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +12 -12
  41. package/dist/index.js.map +1 -0
  42. package/dist/packet/decoder.d.ts +293 -0
  43. package/dist/packet/decoder.d.ts.map +1 -0
  44. package/dist/packet/decoder.js +668 -0
  45. package/dist/packet/decoder.js.map +1 -0
  46. package/dist/packet/dispatcher.d.ts +46 -0
  47. package/dist/packet/dispatcher.d.ts.map +1 -0
  48. package/dist/packet/dispatcher.js +626 -0
  49. package/dist/packet/dispatcher.js.map +1 -0
  50. package/dist/packet/encoder.d.ts +163 -0
  51. package/dist/packet/encoder.d.ts.map +1 -0
  52. package/dist/packet/encoder.js +441 -0
  53. package/dist/packet/encoder.js.map +1 -0
  54. package/dist/packet/static.d.ts +33 -0
  55. package/dist/packet/static.d.ts.map +1 -0
  56. package/dist/packet/static.js +42 -0
  57. package/dist/packet/static.js.map +1 -0
  58. package/dist/physics/aabb.d.ts +197 -0
  59. package/dist/physics/aabb.d.ts.map +1 -0
  60. package/dist/physics/aabb.js +576 -0
  61. package/dist/physics/aabb.js.map +1 -0
  62. package/dist/physics/direction.d.ts +153 -0
  63. package/dist/physics/direction.d.ts.map +1 -0
  64. package/dist/physics/direction.js +288 -0
  65. package/dist/physics/direction.js.map +1 -0
  66. package/dist/physics/player.d.ts +110 -0
  67. package/dist/physics/player.d.ts.map +1 -0
  68. package/dist/physics/player.js +558 -0
  69. package/dist/physics/player.js.map +1 -0
  70. package/dist/version/codec.d.ts +18 -0
  71. package/dist/version/codec.d.ts.map +1 -0
  72. package/dist/version/codec.js +214 -0
  73. package/dist/version/codec.js.map +1 -0
  74. package/dist/version/registry.d.ts +236 -0
  75. package/dist/version/registry.d.ts.map +1 -0
  76. package/dist/version/registry.js +289 -0
  77. package/dist/version/registry.js.map +1 -0
  78. package/dist/world/block.d.ts +86 -0
  79. package/dist/world/block.d.ts.map +1 -0
  80. package/dist/world/block.js +232 -0
  81. package/dist/world/block.js.map +1 -0
  82. package/dist/world/entity.d.ts +43 -0
  83. package/dist/world/entity.d.ts.map +1 -0
  84. package/dist/world/entity.js +97 -0
  85. package/dist/world/entity.js.map +1 -0
  86. package/dist/world/state.d.ts +151 -0
  87. package/dist/world/state.d.ts.map +1 -0
  88. package/dist/world/state.js +108 -0
  89. package/dist/world/state.js.map +1 -0
  90. package/dist/world/tick.d.ts +19 -0
  91. package/dist/world/tick.d.ts.map +1 -0
  92. package/dist/world/tick.js +49 -0
  93. package/dist/world/tick.js.map +1 -0
  94. package/package.json +7 -2
  95. package/src/base/error.ts +36 -0
  96. package/src/base/typing.ts +9 -1
  97. package/src/client/client.ts +99 -42
  98. package/src/client/tcp.ts +49 -954
  99. package/src/index.ts +12 -12
  100. package/src/{translator → packet}/decoder.ts +3 -3
  101. package/src/packet/dispatcher.ts +785 -0
  102. package/src/{translator → packet}/encoder.ts +20 -9
  103. package/src/{base → physics}/aabb.ts +5 -5
  104. package/src/{base → physics}/player.ts +41 -25
  105. package/src/version/codec.ts +227 -0
  106. package/src/version/registry.ts +333 -0
  107. package/src/{base → world}/block.ts +12 -11
  108. package/src/{base → world}/entity.ts +5 -5
  109. package/src/world/state.ts +232 -0
  110. package/test/adapter/index.ts +14 -0
  111. package/test/client/index.ts +1 -1
  112. package/test/json/index.ts +3 -0
  113. package/src/base/registry.ts +0 -87
  114. /package/assets/minecraft/{blocks.json → 26.2/blocks.json} +0 -0
  115. /package/assets/minecraft/{entities.json → 26.2/entities.json} +0 -0
  116. /package/src/{translator → packet}/static.ts +0 -0
  117. /package/src/{base → physics}/direction.ts +0 -0
  118. /package/src/{base → world}/tick.ts +0 -0
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AuthClient = void 0;
7
+ const node_http_1 = __importDefault(require("node:http"));
8
+ const node_crypto_1 = __importDefault(require("node:crypto"));
9
+ const node_net_1 = __importDefault(require("node:net"));
10
+ const node_child_process_1 = require("node:child_process");
11
+ const error_1 = require("../base/error");
12
+ // From assets dir
13
+ const ErrorHTML = `
14
+ <!DOCTYPE html>
15
+ <html>
16
+ <head>
17
+ <title>MineJS</title>
18
+ <style>
19
+ p { margin: 0; }
20
+ </style>
21
+ </head>
22
+ <body>
23
+ <div style="display: flex; height: 100vh; width: 100vw;">
24
+ <div style="margin: auto; display: flex; flex-direction: column; text-align: center">
25
+ <p style="font-size: 30px">An error is occurred while MineJS trying to get the token</p>
26
+ <p style="font-size: 35px; color: crimson">{error}</p>
27
+ <p style="font-size: 28px">{error_description}</p>
28
+ </div>
29
+ </div>
30
+ </body>
31
+ </html>
32
+ `;
33
+ const SuccessHTML = `
34
+ <!DOCTYPE html>
35
+ <html>
36
+ <head>
37
+ <title>MineJS</title>
38
+ <style>
39
+ p { margin: 0; }
40
+ </style>
41
+ </head>
42
+ <body>
43
+ <div style="display: flex; height: 100vh; width: 100vw;">
44
+ <div style="margin: auto; display: flex; flex-direction: column; text-align: center">
45
+ <p style="font-size: 40px; font-weight: bold; color: darkcyan;">Done!</p>
46
+ <p style="font-size: 30px;">You can close this tab</p>
47
+ </div>
48
+ </div>
49
+ </body>
50
+ </html>
51
+ `;
52
+ const InvalidHTML = `
53
+ <!DOCTYPE html>
54
+ <html>
55
+ <head>
56
+ <title>MineJS</title>
57
+ <style>
58
+ p { margin: 0; }
59
+ </style>
60
+ </head>
61
+ <body>
62
+ <div style="display: flex; height: 100vh; width: 100vw;">
63
+ <div style="margin: auto; display: flex; flex-direction: column; text-align: center">
64
+ <p style="font-size: 35px; color: crimson">Invalid request >:&lpar;</p>
65
+ <p style="font-size: 30px; color: crimson">{reason}</p>
66
+ </div>
67
+ </div>
68
+ </body>
69
+ </html>
70
+ `;
71
+ function open(url, log) {
72
+ // From https://stackoverflow.com/a/49013356/17106809
73
+ switch (process.platform) {
74
+ case "linux":
75
+ (0, node_child_process_1.exec)(`xdg-open "${url}"`);
76
+ break;
77
+ case "win32":
78
+ (0, node_child_process_1.exec)(`start "${url}"`);
79
+ break;
80
+ case "darwin":
81
+ (0, node_child_process_1.exec)(`open "${url}"`);
82
+ break;
83
+ default:
84
+ log(`${process.platform} is not supported`);
85
+ log(`please open this url in your browser: ${url}`);
86
+ break;
87
+ }
88
+ }
89
+ // Got this from https://github.com/sindresorhus/get-port/blob/main/index.js#L47
90
+ const getFreePort = () => new Promise((resolve) => {
91
+ const server = node_net_1.default.createServer();
92
+ server.listen(0, () => {
93
+ const port = server.address().port;
94
+ server.close(() => resolve(port));
95
+ });
96
+ });
97
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
98
+ /**
99
+ * Auth client, for authenticating Microsoft account
100
+ */
101
+ class AuthClient {
102
+ option;
103
+ codeVerifier;
104
+ codeChallenge;
105
+ // private refreshToken?: string;
106
+ constructor(option) {
107
+ this.option = option;
108
+ const codeVerifier = node_crypto_1.default.randomBytes(32).toString("hex");
109
+ const hashed = node_crypto_1.default.hash("sha256", codeVerifier, "base64url");
110
+ this.option.log ||= console.log;
111
+ this.codeVerifier = codeVerifier;
112
+ this.codeChallenge = hashed;
113
+ }
114
+ async auth() {
115
+ if (this.option.method === "loopback")
116
+ return this.loopback();
117
+ else
118
+ return this.deviceCode();
119
+ }
120
+ async loopback() {
121
+ const freePort = await getFreePort();
122
+ const expectState = node_crypto_1.default.randomBytes(8).toString("hex");
123
+ const authUrl = new URL("https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize");
124
+ authUrl.searchParams.append("client_id", this.option.client_id);
125
+ authUrl.searchParams.append("response_type", "code");
126
+ authUrl.searchParams.append("redirect_uri", `http://127.0.0.1:${freePort}`);
127
+ authUrl.searchParams.append("scope", "XboxLive.signin offline_access");
128
+ authUrl.searchParams.append("code_challenge", this.codeChallenge);
129
+ authUrl.searchParams.append("code_challenge_method", "S256");
130
+ authUrl.searchParams.append("state", expectState);
131
+ if (this.option.openBrowser === true)
132
+ open(authUrl.toString(), this.option.log);
133
+ else
134
+ this.option.log(`please open this url in your browser: ${authUrl.toString()}`);
135
+ const msAuthToken = await new Promise((resolve) => {
136
+ const server = node_http_1.default.createServer((req, res) => {
137
+ const end = (html, result = null) => {
138
+ res.end(html);
139
+ server.close();
140
+ return resolve(result);
141
+ };
142
+ const url = new URL(req.url || "", `http://127.0.0.1:${freePort}`);
143
+ const error = url.searchParams.get("error");
144
+ if (error) {
145
+ const description = url.searchParams.get("error_description");
146
+ end(ErrorHTML.replace("{error}", error).replace("{error_description}", description));
147
+ }
148
+ const code = url.searchParams.get("code");
149
+ if (!code)
150
+ end(InvalidHTML.replace("{reason}", "Missing <code>code</code> parameter"));
151
+ const state = url.searchParams.get("state");
152
+ if (!state)
153
+ end(InvalidHTML.replace("{reason}", "Missing <code>state</code> parameter"));
154
+ if (state !== expectState)
155
+ end(InvalidHTML.replace("{reason}", "Mismatch state"));
156
+ return end(SuccessHTML, code);
157
+ });
158
+ server.listen(freePort);
159
+ });
160
+ if (!msAuthToken)
161
+ throw new error_1.CantGetMsAccessToken();
162
+ const msTokenUrl = new URL("https://login.microsoftonline.com/consumers/oauth2/v2.0/token");
163
+ const msTokenBody = new URLSearchParams();
164
+ msTokenBody.append("client_id", this.option.client_id);
165
+ msTokenBody.append("code", msAuthToken);
166
+ msTokenBody.append("scope", "XboxLive.signin offline_access");
167
+ msTokenBody.append("redirect_uri", `http://127.0.0.1:${freePort}`);
168
+ msTokenBody.append("grant_type", "authorization_code");
169
+ msTokenBody.append("code_verifier", this.codeVerifier);
170
+ const msTokenRequest = await fetch(msTokenUrl, {
171
+ headers: {
172
+ "Content-Type": "application/x-www-form-urlencoded"
173
+ },
174
+ method: "POST",
175
+ body: msTokenBody.toString()
176
+ });
177
+ const msTokenResponse = await msTokenRequest.json();
178
+ if ("error" in msTokenResponse)
179
+ throw new error_1.AuthError(msTokenResponse["error"]);
180
+ const msToken = msTokenResponse["access_token"];
181
+ return this.getMcToken(msToken);
182
+ }
183
+ async deviceCode() {
184
+ const codeUrl = new URL("https://login.microsoftonline.com/consumers/oauth2/v2.0/devicecode");
185
+ const codeBody = new URLSearchParams();
186
+ codeBody.set("client_id", this.option.client_id);
187
+ codeBody.append("scope", "XboxLive.signin offline_access");
188
+ const codeRequest = await fetch(codeUrl, {
189
+ headers: {
190
+ "Content-Type": "application/x-www-form-urlencoded"
191
+ },
192
+ method: "POST",
193
+ body: codeBody.toString()
194
+ });
195
+ const codeResponse = await codeRequest.json();
196
+ const deviceCode = codeResponse["device_code"];
197
+ const message = codeResponse["message"];
198
+ let interval = Number(codeResponse["interval"]);
199
+ this.option.log(message);
200
+ let msToken;
201
+ const msTokenUrl = new URL("https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token");
202
+ const msTokenBody = new URLSearchParams();
203
+ msTokenBody.set("grant_type", "urn:ietf:params:oauth:grant-type:device_code");
204
+ msTokenBody.set("client_id", this.option.client_id);
205
+ msTokenBody.set("device_code", deviceCode);
206
+ while (true) {
207
+ await sleep(interval * 1000);
208
+ const msTokenRequest = await fetch(msTokenUrl, {
209
+ headers: {
210
+ "Content-Type": "application/x-www-form-urlencoded"
211
+ },
212
+ method: "POST"
213
+ });
214
+ const msTokenResponse = await msTokenRequest.json();
215
+ if ("error" in msTokenResponse)
216
+ switch (msTokenResponse["error"]) {
217
+ case "authorization_pending": continue;
218
+ case "slow_down":
219
+ interval += 5;
220
+ continue;
221
+ case "auth_denied": throw new error_1.AuthDenied();
222
+ case "expired_token": throw new error_1.AuthTokenExpired();
223
+ default: throw new error_1.AuthError(msTokenResponse["error"]);
224
+ }
225
+ else {
226
+ msToken = msTokenResponse["access_token"];
227
+ break;
228
+ }
229
+ }
230
+ if (!msToken)
231
+ throw new error_1.CantGetMsAccessToken();
232
+ return this.getMcToken(msToken);
233
+ }
234
+ async getMcToken(msToken) {
235
+ // Get Xbox Live token
236
+ const xboxRequest = await fetch("https://user.auth.xboxlive.com/user/authenticate", {
237
+ headers: {
238
+ "Content-Type": "application/json",
239
+ Accept: "application/json"
240
+ },
241
+ body: JSON.stringify({
242
+ "Properties": {
243
+ "AuthMethod": "RPS",
244
+ "SiteName": "user.auth.xboxlive.com",
245
+ "RpsTicket": `d=${msToken}`
246
+ },
247
+ "RelyingParty": "http://auth.xboxlive.com",
248
+ "TokenType": "JWT"
249
+ }),
250
+ method: "POST"
251
+ });
252
+ const xboxReponse = await xboxRequest.json();
253
+ const xboxToken = xboxReponse["Token"];
254
+ const userHash = xboxReponse["DisplayClaims"]["xui"][0]["uhs"];
255
+ const xboxSecurityRequest = await fetch("https://xsts.auth.xboxlive.com/xsts/authorize", {
256
+ headers: {
257
+ "Content-Type": "application/json",
258
+ Accept: "application/json"
259
+ },
260
+ body: JSON.stringify({
261
+ "Properties": {
262
+ "SandboxId": "RETAIL",
263
+ "UserTokens": [xboxToken]
264
+ },
265
+ "RelyingParty": "rp://api.minecraftservices.com/",
266
+ "TokenType": "JWT"
267
+ }),
268
+ method: "POST"
269
+ });
270
+ const xboxSecurityReponse = await xboxSecurityRequest.json();
271
+ if ("XErr" in xboxSecurityReponse)
272
+ throw new error_1.XboxError(xboxSecurityReponse["XErr"]);
273
+ const xboxSecurityToken = xboxSecurityReponse["Token"];
274
+ const minecraftRequest = await fetch("https://api.minecraftservices.com/authentication/login_with_xbox", {
275
+ headers: {
276
+ "Content-Type": "application/json",
277
+ Accept: "application/json"
278
+ },
279
+ body: JSON.stringify({
280
+ "identityToken": `XBL3.0 x=${userHash};${xboxSecurityToken}"`
281
+ }),
282
+ method: "POST"
283
+ });
284
+ const minecraftResponse = await minecraftRequest.json();
285
+ const minecraftToken = minecraftResponse["access_token"];
286
+ const mcProfileRequest = await fetch("https://api.minecraftservices.com/minecraft/profile", {
287
+ headers: {
288
+ "Authorization": `Bearer ${minecraftToken}`
289
+ },
290
+ method: "GET"
291
+ });
292
+ const mcProfileResponse = await mcProfileRequest.json();
293
+ if ("error" in mcProfileResponse) {
294
+ if (mcProfileResponse["error"] === "NOT_FOUND")
295
+ throw new error_1.ProfileNotFound();
296
+ else
297
+ throw new error_1.ProfileError(mcProfileResponse["error"], mcProfileResponse["errorMessage"]);
298
+ }
299
+ return {
300
+ token: minecraftToken,
301
+ uuid: mcProfileResponse["id"],
302
+ name: mcProfileResponse["name"]
303
+ };
304
+ }
305
+ }
306
+ exports.AuthClient = AuthClient;
307
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/client/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { BlockState } from "../world/block";
2
+ import { MoveDirection } from "../physics/player";
3
+ import { Message, TCPClientOption } from "./tcp";
4
+ import { TypedEmmiter as TypedEmitter } from "../base/event";
5
+ import { BaseVec3 } from "../physics/direction";
6
+ import { TextComponent } from "../base/typing";
7
+ import { Entity } from "../world/state";
8
+ export type ClientOption = Omit<TCPClientOption, "protocolVersion"> & {
9
+ version: string;
10
+ };
11
+ export interface ClientEvents {
12
+ connect: [];
13
+ destroy: [];
14
+ ready: [];
15
+ disconnect: [reason: string];
16
+ disconnectRaw: [textComponent: TextComponent];
17
+ playerPosition: [position: BaseVec3];
18
+ loadChunk: [chunkX: number, sectionY: number, chunkZ: number];
19
+ unloadChunk: [chunkX: number, chunkZ: number];
20
+ spawnEntity: [entity: Entity];
21
+ updateEntity: [entityId: number];
22
+ removeEntity: [entityId: number];
23
+ message: [message: Message];
24
+ systemMessage: [message: string];
25
+ systemMessageRaw: [textComponent: TextComponent];
26
+ actionBar: [message: string];
27
+ actionBarRaw: [textComponent: TextComponent];
28
+ }
29
+ declare const Client_base: new () => TypedEmitter<ClientEvents>;
30
+ /**
31
+ * High-level client.
32
+ */
33
+ export declare class Client<IsReady extends boolean = boolean> extends Client_base {
34
+ private options;
35
+ private static loadRegistry;
36
+ private tickLoop;
37
+ private blocks;
38
+ private entities;
39
+ private player;
40
+ private uuid;
41
+ private tcp;
42
+ private state;
43
+ constructor(options: ClientOption);
44
+ private emitEvent;
45
+ private loadRegistries;
46
+ /**
47
+ * Create a connection to the server
48
+ */
49
+ connect(): Promise<void>;
50
+ /**
51
+ * Destroy the connection
52
+ */
53
+ disconnect(): void;
54
+ /**
55
+ * Press and hold a key
56
+ */
57
+ hold(direction: MoveDirection): void;
58
+ /**
59
+ * Release a key
60
+ */
61
+ release(direction: MoveDirection): void;
62
+ /**
63
+ * Release all key
64
+ */
65
+ stopMoving(): void;
66
+ /**
67
+ * Get the block state at position
68
+ */
69
+ at(x: number, y: number, z: number): BlockState | null;
70
+ at(position: BaseVec3): BlockState | null;
71
+ }
72
+ export {};
73
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAU,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAAE,OAAO,EAAa,eAAe,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,YAAY,IAAI,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAQ,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAgC,MAAM,EAAe,MAAM,gBAAgB,CAAC;AAMnF,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzF,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,EAAE,CAAC;IACZ,OAAO,EAAE,EAAE,CAAC;IAEZ,KAAK,EAAE,EAAE,CAAC;IACV,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAE9C,cAAc,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAErC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9C,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAGjC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5B,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjC,gBAAgB,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IACjD,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7B,YAAY,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;CAChD;qCAKyF,YAAY,CAAC,YAAY,CAAC;AAHpH;;GAEG;AACH,qBAAa,MAAM,CAAC,OAAO,SAAS,OAAO,GAAG,OAAO,CAAE,SAAQ,WAAsD;IAarG,OAAO,CAAC,OAAO;IAZ3B,OAAO,CAAC,MAAM,CAAC,YAAY,CAAkB;IAE7C,OAAO,CAAC,QAAQ,CAAW;IAE3B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAA2B;IAEvC,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,KAAK,CAAuB;IAEpC,YAAoB,OAAO,EAAE,YAAY,EAgDxC;IAED,OAAO,CAAC,SAAS;YAIH,cAAc;IAU5B;;OAEG;IACU,OAAO,kBAuBnB;IACD;;OAEG;IACI,UAAU,SAEhB;IAGD;;OAEG;IACI,IAAI,CAAC,SAAS,EAAE,aAAa,QAEnC;IACD;;OAEG;IACI,OAAO,CAAC,SAAS,EAAE,aAAa,QAEtC;IACD;;OAEG;IACI,UAAU,SAEhB;IAGD;;OAEG;IACI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IACvD,EAAE,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC;CAKpD"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Client = void 0;
4
+ const node_stream_1 = require("node:stream");
5
+ const block_1 = require("../world/block");
6
+ const entity_1 = require("../world/entity");
7
+ const player_1 = require("../physics/player");
8
+ const tick_1 = require("../world/tick");
9
+ const tcp_1 = require("./tcp");
10
+ const registry_1 = require("../version/registry");
11
+ const direction_1 = require("../physics/direction");
12
+ const state_1 = require("../world/state");
13
+ const dispatcher_1 = require("../packet/dispatcher");
14
+ const codec_1 = require("../version/codec");
15
+ const auth_1 = require("./auth");
16
+ const math_1 = require("../base/math");
17
+ /**
18
+ * High-level client.
19
+ */
20
+ class Client extends node_stream_1.EventEmitter {
21
+ options;
22
+ static loadRegistry = false;
23
+ tickLoop;
24
+ blocks;
25
+ entities;
26
+ player;
27
+ uuid = Buffer.alloc(0);
28
+ tcp;
29
+ state;
30
+ constructor(options) {
31
+ super();
32
+ this.options = options;
33
+ // For managing shared data
34
+ this.state = new state_1.SharedState(options, () => this.uuid);
35
+ // For handling packet
36
+ const dispatcher = new dispatcher_1.Dispatcher(this.state, this.emit.bind(this));
37
+ // For reading packet
38
+ const versionCodec = new codec_1.VersionCodec(this.state);
39
+ // For throwing packet through internet
40
+ this.tcp = new tcp_1.TCPClient(this.state, {
41
+ ...options,
42
+ protocolVersion: registry_1.ProtocolVersionMapping[options.version]
43
+ });
44
+ this.tcp.forwardPacket = versionCodec.handlePacket.bind(versionCodec);
45
+ this.tcp.parsePacket = versionCodec.encodePacket.bind(versionCodec);
46
+ this.tcp.sendInitPacket = () => {
47
+ dispatcher.sendHandshake();
48
+ dispatcher.sendLoginStart();
49
+ };
50
+ dispatcher.sendPacket = this.tcp.sendPacket.bind(this.tcp);
51
+ dispatcher.tcpDisconnect = this.tcp.disconnect.bind(this.tcp);
52
+ versionCodec.consumePacket = dispatcher.handlePacket.bind(dispatcher);
53
+ // For querying data
54
+ this.blocks = new block_1.BlockManager(this.state);
55
+ this.entities = new entity_1.EntitiesManager(this.state);
56
+ // For physics things
57
+ this.player = new player_1.Player(this.state, this.on, this.entities, this.blocks);
58
+ // For tick-tock tick-tock
59
+ this.tickLoop = new tick_1.TickLoop(() => {
60
+ this.state.drainMutation();
61
+ this.state.drainEvent()
62
+ .forEach(event => this.emitEvent(event));
63
+ this.state.drainPacket()
64
+ .forEach((packet) => this.tcp.sendPacket(packet.id, packet.data));
65
+ this.player.tick();
66
+ });
67
+ }
68
+ emitEvent(event) {
69
+ this.emit(event.event, ...event.args);
70
+ }
71
+ async loadRegistries() {
72
+ if (Client.loadRegistry)
73
+ return;
74
+ Client.loadRegistry = true;
75
+ await registry_1.BlockRegistry.load(this.options.version);
76
+ await registry_1.EntityRegistry.load(this.options.version);
77
+ await registry_1.PacketRegistry.load(this.options.version);
78
+ }
79
+ // Start / stop
80
+ /**
81
+ * Create a connection to the server
82
+ */
83
+ async connect() {
84
+ await this.loadRegistries();
85
+ if (!this.uuid.length) {
86
+ if (this.options.auth) {
87
+ const authClient = new auth_1.AuthClient(this.options.auth);
88
+ const { uuid } = await authClient.auth();
89
+ this.uuid = Buffer.from(uuid);
90
+ }
91
+ else
92
+ this.uuid = (0, math_1.computeUUID)(this.options.playerName);
93
+ }
94
+ this.tcp.connect();
95
+ this.once("ready", () => {
96
+ this.player.pruneInitialVal();
97
+ this.player.setInitialVal();
98
+ this.tickLoop.start();
99
+ });
100
+ this.once("disconnect", () => {
101
+ this.tickLoop.stop();
102
+ this.player.pruneInitialVal();
103
+ });
104
+ }
105
+ /**
106
+ * Destroy the connection
107
+ */
108
+ disconnect() {
109
+ this.tcp.disconnect();
110
+ }
111
+ // Inputs
112
+ /**
113
+ * Press and hold a key
114
+ */
115
+ hold(direction) {
116
+ this.player.input(direction);
117
+ }
118
+ /**
119
+ * Release a key
120
+ */
121
+ release(direction) {
122
+ this.player.releaseInput(direction);
123
+ }
124
+ /**
125
+ * Release all key
126
+ */
127
+ stopMoving() {
128
+ this.player.releaseAllInputs();
129
+ }
130
+ at(a, b, c) {
131
+ const vec3 = direction_1.Vec3.loadArgs(a, b, c);
132
+ return this.blocks.at(vec3);
133
+ }
134
+ }
135
+ exports.Client = Client;
136
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /** @hidden */
2
+ export declare const SectionsPerChunk: Record<string, number>;
3
+ /** @hidden */
4
+ export declare const LevelHeightLimit: Record<string, [min: number, max: number]>;
5
+ /**
6
+ * Packed block position within a chunk column to an integer
7
+ *
8
+ * A packed position look like this:
9
+ * `[9 bits of Y][4 bits of Z][4 bits of X]`
10
+ *
11
+ * @param x relative within chunk column
12
+ * @param y world height
13
+ * @param z relative within chunk column
14
+ * @hidden
15
+ */
16
+ export declare const packBlockPos: (x: number, y: number, z: number) => number;
17
+ /**
18
+ * Unpacked block position within a chunk column from an integer
19
+ *
20
+ * @returns unpacked position
21
+ * @hidden
22
+ */
23
+ export declare const readPackedBlockPos: (packed: number) => {
24
+ x: number;
25
+ z: number;
26
+ y: number;
27
+ };
28
+ //# sourceMappingURL=static.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../../src/client/static.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKnD,CAAC;AAEF,cAAc;AACd,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAKvE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,MAAO,MAAM,KAAK,MAAM,KAAK,MAAM,WAAwB,CAAC;AAGrF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,WAAY,MAAM;IAC7C,CAAC;IACD,CAAC;IACD,CAAC;CACH,CAAC"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readPackedBlockPos = exports.packBlockPos = exports.LevelHeightLimit = exports.SectionsPerChunk = void 0;
4
+ /** @hidden */
5
+ exports.SectionsPerChunk = {
6
+ "minecraft:overworld": 24,
7
+ "minecraft:overworld_caves": 24,
8
+ "minecraft:the_end": 16,
9
+ "minecraft:the_nether": 8,
10
+ };
11
+ /** @hidden */
12
+ exports.LevelHeightLimit = {
13
+ "minecraft:overworld": [-64, 320],
14
+ "minecraft:overworld_caves": [-64, 320],
15
+ "minecraft:the_end": [0, 256],
16
+ "minecraft:the_nether": [0, 0],
17
+ };
18
+ /**
19
+ * Packed block position within a chunk column to an integer
20
+ *
21
+ * A packed position look like this:
22
+ * `[9 bits of Y][4 bits of Z][4 bits of X]`
23
+ *
24
+ * @param x relative within chunk column
25
+ * @param y world height
26
+ * @param z relative within chunk column
27
+ * @hidden
28
+ */
29
+ const packBlockPos = (x, y, z) => y << 8 & z << 4 & x;
30
+ exports.packBlockPos = packBlockPos;
31
+ /**
32
+ * Unpacked block position within a chunk column from an integer
33
+ *
34
+ * @returns unpacked position
35
+ * @hidden
36
+ */
37
+ const readPackedBlockPos = (packed) => ({
38
+ x: packed & 0xF,
39
+ z: (packed >> 4) & 0xF,
40
+ y: (packed >> 8) & 0x1FF,
41
+ });
42
+ exports.readPackedBlockPos = readPackedBlockPos;
43
+ //# sourceMappingURL=static.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/client/static.ts"],"names":[],"mappings":";;;AAAA,cAAc;AACD,QAAA,gBAAgB,GAA2B;IACpD,qBAAqB,EAAE,EAAE;IACzB,2BAA2B,EAAE,EAAE;IAC/B,mBAAmB,EAAE,EAAE;IACvB,sBAAsB,EAAE,CAAC;CAC5B,CAAC;AAEF,cAAc;AACD,QAAA,gBAAgB,GAA+C;IACxE,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC;IACjC,2BAA2B,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC;IACvC,mBAAmB,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC;IAC7B,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;CACjC,CAAC;AAEF;;;;;;;;;;GAUG;AACI,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAAxE,QAAA,YAAY,GAAZ,YAAY,CAA4D;AAGrF;;;;;GAKG;AACI,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC,EAAE,MAAM,GAAG,GAAG;IACf,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,GAAG;IACtB,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK;CAC3B,CAAC,CAAC;AAJU,QAAA,kBAAkB,GAAlB,kBAAkB,CAI5B"}