@vaitosoi/minejs 0.2.2 → 0.4.0

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 (149) hide show
  1. package/README.md +1 -1
  2. package/assets/minecraft/26.2/packets.json +4758 -0
  3. package/dist/base/buffer.d.ts +2 -0
  4. package/dist/base/buffer.d.ts.map +1 -0
  5. package/dist/base/buffer.js +12 -0
  6. package/dist/base/buffer.js.map +1 -0
  7. package/dist/base/error.d.ts +59 -3
  8. package/dist/base/error.d.ts.map +1 -1
  9. package/dist/base/error.js +123 -7
  10. package/dist/base/error.js.map +1 -1
  11. package/dist/base/http.d.ts +2 -0
  12. package/dist/base/http.d.ts.map +1 -0
  13. package/dist/base/http.js +14 -0
  14. package/dist/base/http.js.map +1 -0
  15. package/dist/base/math.d.ts +22 -1
  16. package/dist/base/math.d.ts.map +1 -1
  17. package/dist/base/math.js +49 -2
  18. package/dist/base/math.js.map +1 -1
  19. package/dist/base/typing.d.ts +7 -1
  20. package/dist/base/typing.d.ts.map +1 -1
  21. package/dist/client/auth.d.ts +41 -7
  22. package/dist/client/auth.d.ts.map +1 -1
  23. package/dist/client/auth.js +96 -39
  24. package/dist/client/auth.js.map +1 -1
  25. package/dist/client/client.d.ts +73 -17
  26. package/dist/client/client.d.ts.map +1 -1
  27. package/dist/client/client.js +111 -44
  28. package/dist/client/client.js.map +1 -1
  29. package/dist/client/tcp.d.ts +17 -206
  30. package/dist/client/tcp.d.ts.map +1 -1
  31. package/dist/client/tcp.js +37 -715
  32. package/dist/client/tcp.js.map +1 -1
  33. package/dist/index.d.ts +12 -12
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +12 -12
  36. package/dist/index.js.map +1 -1
  37. package/dist/message/link.d.ts +10 -0
  38. package/dist/message/link.d.ts.map +1 -0
  39. package/dist/message/link.js +22 -0
  40. package/dist/message/link.js.map +1 -0
  41. package/dist/message/sigCache.d.ts +13 -0
  42. package/dist/message/sigCache.d.ts.map +1 -0
  43. package/dist/message/sigCache.js +26 -0
  44. package/dist/message/sigCache.js.map +1 -0
  45. package/dist/{translator → packet}/decoder.d.ts +14 -1
  46. package/dist/packet/decoder.d.ts.map +1 -0
  47. package/dist/{translator → packet}/decoder.js +24 -3
  48. package/dist/packet/decoder.js.map +1 -0
  49. package/dist/packet/dispatcher.d.ts +53 -0
  50. package/dist/packet/dispatcher.d.ts.map +1 -0
  51. package/dist/packet/dispatcher.js +738 -0
  52. package/dist/packet/dispatcher.js.map +1 -0
  53. package/dist/{translator → packet}/encoder.d.ts +4 -3
  54. package/dist/packet/encoder.d.ts.map +1 -0
  55. package/dist/{translator → packet}/encoder.js +18 -7
  56. package/dist/packet/encoder.js.map +1 -0
  57. package/dist/packet/static.d.ts.map +1 -0
  58. package/dist/packet/static.js.map +1 -0
  59. package/dist/{base → physics}/aabb.d.ts +2 -2
  60. package/dist/physics/aabb.d.ts.map +1 -0
  61. package/dist/{base → physics}/aabb.js +5 -5
  62. package/dist/physics/aabb.js.map +1 -0
  63. package/dist/physics/direction.d.ts.map +1 -0
  64. package/dist/physics/direction.js.map +1 -0
  65. package/dist/{base → physics}/player.d.ts +25 -28
  66. package/dist/physics/player.d.ts.map +1 -0
  67. package/dist/{base → physics}/player.js +81 -68
  68. package/dist/physics/player.js.map +1 -0
  69. package/dist/version/codec.d.ts +18 -0
  70. package/dist/version/codec.d.ts.map +1 -0
  71. package/dist/version/codec.js +235 -0
  72. package/dist/version/codec.js.map +1 -0
  73. package/dist/version/registry.d.ts +236 -0
  74. package/dist/version/registry.d.ts.map +1 -0
  75. package/dist/version/registry.js +284 -0
  76. package/dist/version/registry.js.map +1 -0
  77. package/dist/{base → world}/block.d.ts +5 -5
  78. package/dist/world/block.d.ts.map +1 -0
  79. package/dist/{base → world}/block.js +13 -13
  80. package/dist/world/block.js.map +1 -0
  81. package/dist/{base → world}/entity.d.ts +4 -4
  82. package/dist/world/entity.d.ts.map +1 -0
  83. package/dist/{base → world}/entity.js +6 -6
  84. package/dist/world/entity.js.map +1 -0
  85. package/dist/world/state.d.ts +175 -0
  86. package/dist/world/state.d.ts.map +1 -0
  87. package/dist/world/state.js +163 -0
  88. package/dist/world/state.js.map +1 -0
  89. package/dist/world/tick.d.ts.map +1 -0
  90. package/dist/world/tick.js.map +1 -0
  91. package/package.json +7 -2
  92. package/src/base/buffer.ts +12 -0
  93. package/src/base/error.ts +93 -4
  94. package/src/base/http.ts +10 -0
  95. package/src/base/math.ts +55 -3
  96. package/src/base/typing.ts +9 -1
  97. package/src/client/auth.ts +130 -52
  98. package/src/client/client.ts +182 -50
  99. package/src/client/tcp.ts +45 -967
  100. package/src/index.ts +12 -12
  101. package/src/message/link.ts +17 -0
  102. package/src/message/sigCache.ts +25 -0
  103. package/src/{translator → packet}/decoder.ts +24 -3
  104. package/src/packet/dispatcher.ts +919 -0
  105. package/src/{translator → packet}/encoder.ts +20 -9
  106. package/src/{base → physics}/aabb.ts +5 -5
  107. package/src/{base → physics}/player.ts +106 -65
  108. package/src/version/codec.ts +248 -0
  109. package/src/version/registry.ts +328 -0
  110. package/src/{base → world}/block.ts +12 -11
  111. package/src/{base → world}/entity.ts +5 -5
  112. package/src/world/state.ts +300 -0
  113. package/test/adapter/index.ts +14 -0
  114. package/test/client/index.ts +28 -21
  115. package/test/json/index.ts +3 -0
  116. package/dist/base/aabb.d.ts.map +0 -1
  117. package/dist/base/aabb.js.map +0 -1
  118. package/dist/base/block.d.ts.map +0 -1
  119. package/dist/base/block.js.map +0 -1
  120. package/dist/base/direction.d.ts.map +0 -1
  121. package/dist/base/direction.js.map +0 -1
  122. package/dist/base/entity.d.ts.map +0 -1
  123. package/dist/base/entity.js.map +0 -1
  124. package/dist/base/player.d.ts.map +0 -1
  125. package/dist/base/player.js.map +0 -1
  126. package/dist/base/registry.d.ts +0 -50
  127. package/dist/base/registry.d.ts.map +0 -1
  128. package/dist/base/registry.js +0 -89
  129. package/dist/base/registry.js.map +0 -1
  130. package/dist/base/tick.d.ts.map +0 -1
  131. package/dist/base/tick.js.map +0 -1
  132. package/dist/translator/decoder.d.ts.map +0 -1
  133. package/dist/translator/decoder.js.map +0 -1
  134. package/dist/translator/encoder.d.ts.map +0 -1
  135. package/dist/translator/encoder.js.map +0 -1
  136. package/dist/translator/static.d.ts.map +0 -1
  137. package/dist/translator/static.js.map +0 -1
  138. package/src/base/registry.ts +0 -87
  139. /package/assets/minecraft/{blocks.json → 26.2/blocks.json} +0 -0
  140. /package/assets/minecraft/{entities.json → 26.2/entities.json} +0 -0
  141. /package/dist/{translator → packet}/static.d.ts +0 -0
  142. /package/dist/{translator → packet}/static.js +0 -0
  143. /package/dist/{base → physics}/direction.d.ts +0 -0
  144. /package/dist/{base → physics}/direction.js +0 -0
  145. /package/dist/{base → world}/tick.d.ts +0 -0
  146. /package/dist/{base → world}/tick.js +0 -0
  147. /package/src/{translator → packet}/static.ts +0 -0
  148. /package/src/{base → physics}/direction.ts +0 -0
  149. /package/src/{base → world}/tick.ts +0 -0
@@ -1,7 +1,7 @@
1
- import { TCPClient } from "../client/tcp";
2
- import { AABB } from "./aabb";
1
+ import { AABB } from "../physics/aabb";
2
+ import { SharedState } from "./state";
3
3
  export declare class EntitiesManager {
4
- private tcp;
4
+ private state;
5
5
  /**
6
6
  * Split chunks into 16x16x16 sections, so each chunk sections will contain a set of entities
7
7
  *
@@ -12,7 +12,7 @@ export declare class EntitiesManager {
12
12
  * A map mapping entity ID to section key.
13
13
  */
14
14
  entityToSection: Map<number, string>;
15
- constructor(tcp: TCPClient);
15
+ constructor(state: SharedState);
16
16
  /**
17
17
  * Clear data
18
18
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/world/entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,qBAAa,eAAe;IAYZ,OAAO,CAAC,KAAK;IAXzB;;;;OAIG;IACI,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAa;IACtD;;OAEG;IACI,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAExD,YAAoB,KAAK,EAAE,WAAW,EAAK;IAE3C;;OAEG;IACI,IAAI,SAGV;IAED;;OAEG;IACH,OAAc,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,UAI1D;IAED;;OAEG;IACI,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,QAK3D;IAED;;OAEG;IACI,MAAM,CAAC,QAAQ,EAAE,MAAM,QAM7B;IAED;;OAEG;IACI,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,QAM9D;IAED;;;;OAIG;IACI,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,GAAE,MAAM,EAAO,UAyBrD;CACJ"}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EntitiesManager = void 0;
4
- const aabb_1 = require("./aabb");
4
+ const aabb_1 = require("../physics/aabb");
5
5
  class EntitiesManager {
6
- tcp;
6
+ state;
7
7
  /**
8
8
  * Split chunks into 16x16x16 sections, so each chunk sections will contain a set of entities
9
9
  *
@@ -14,8 +14,8 @@ class EntitiesManager {
14
14
  * A map mapping entity ID to section key.
15
15
  */
16
16
  entityToSection = new Map();
17
- constructor(tcp) {
18
- this.tcp = tcp;
17
+ constructor(state) {
18
+ this.state = state;
19
19
  }
20
20
  /**
21
21
  * Clear data
@@ -68,7 +68,7 @@ class EntitiesManager {
68
68
  * @returns
69
69
  */
70
70
  queryAABB(queryBB, exclude = []) {
71
- this.tcp.checkReady();
71
+ this.state.checkReady();
72
72
  const { minX, minY, minZ, maxX, maxY, maxZ } = queryBB;
73
73
  const results = [];
74
74
  const sx0 = minX >> 4, sx1 = maxX >> 4;
@@ -82,7 +82,7 @@ class EntitiesManager {
82
82
  for (const id of bucket) {
83
83
  if (exclude.includes(id))
84
84
  continue;
85
- const entity = this.tcp.world.entities[id];
85
+ const entity = this.state.world.entities[id];
86
86
  const entityBB = aabb_1.AABB.fromEntityType(entity.type);
87
87
  if (queryBB.isIntersect(entityBB))
88
88
  results.push(entityBB);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/world/entity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,175 @@
1
+ import { Cipheriv, Decipheriv } from "node:crypto";
2
+ import { If } from "../base/typing";
3
+ import { Angle, BaseVec3 } from "../physics/direction";
4
+ import { ClientEvents, ClientOption } from "../client/client";
5
+ import { AuthClient } from "../client/auth";
6
+ import { MessageLink } from "../message/link";
7
+ import { SignatureCache } from "../message/sigCache";
8
+ export interface Server {
9
+ knownPacks?: ServerKnownPack;
10
+ }
11
+ export interface ServerKnownPack {
12
+ namespace: string;
13
+ id: string;
14
+ version: string;
15
+ }
16
+ /**
17
+ * Represent world information
18
+ */
19
+ export interface ServerWorld {
20
+ /** Is hardcore enabled */
21
+ hardcore: boolean;
22
+ /** All dimensions */
23
+ dimensions: string[];
24
+ /** Max players allowed */
25
+ maxPlayers: number;
26
+ /** View distances */
27
+ viewDistance: number;
28
+ /** Simulation distance */
29
+ simulationDistance: number;
30
+ /**
31
+ * The record key is a chunk section position packed as `Player Dimension:Chunk X:Chunk Z[Section Y]`
32
+ *
33
+ * For `Section Y`, a chunk is splitted into several cubic 16x16x16 sections, or in other word, a chunk is a bund of 16x16x16 sections stacked on each other.
34
+ */
35
+ chunks: Record<string, ChunkColumn>;
36
+ /**
37
+ * The record key is entity ID
38
+ */
39
+ entities: Record<number, Entity>;
40
+ }
41
+ /**
42
+ * Represent a chunk collumns, which may contains multiple chunks sections
43
+ */
44
+ export interface ChunkColumn {
45
+ sections: Record<number, ChunkSection>;
46
+ blockEntities: Record<number, BlockEntity>;
47
+ }
48
+ export interface ChunkSection {
49
+ block: PaletteContainer;
50
+ biome: PaletteContainer;
51
+ }
52
+ /**
53
+ * Used for indirect mapping
54
+ *
55
+ * @see https://minecraft.wiki/w/Java_Edition_protocol/Chunk_format#Paletted_Container_structure
56
+ */
57
+ export interface PaletteContainer {
58
+ bpe: number;
59
+ palette: number[];
60
+ data: BigInt64Array | null;
61
+ }
62
+ /** Represent a block entity */
63
+ export interface BlockEntity {
64
+ type: number;
65
+ data: Record<string, any>;
66
+ }
67
+ /** Represent an entity */
68
+ export interface Entity {
69
+ id: number;
70
+ type: number;
71
+ position: BaseVec3;
72
+ velocity: BaseVec3;
73
+ angle: Angle;
74
+ data: number;
75
+ }
76
+ export declare enum GameMode {
77
+ Survival = 0,
78
+ Creative = 1,
79
+ Adventure = 2,
80
+ Spectator = 3
81
+ }
82
+ export interface ClientPlayer {
83
+ /** Player UUID */
84
+ uuid: string;
85
+ /** Player username */
86
+ username: string;
87
+ /** Player entity ID */
88
+ entityId: number;
89
+ /** Current game mode */
90
+ gameMode: GameMode;
91
+ position: BaseVec3;
92
+ velocity: BaseVec3;
93
+ angle: Angle;
94
+ /** Current dimension */
95
+ dimension: string;
96
+ }
97
+ export declare enum ClientStatus {
98
+ Disconnected = 0,
99
+ Connecting = 1,
100
+ Logining = 2,
101
+ Ready = 3
102
+ }
103
+ export declare enum ConnectionState {
104
+ Disconnected = 0,
105
+ Handshake = 1,
106
+ Login = 2,
107
+ Configure = 3,
108
+ Play = 4
109
+ }
110
+ export interface ServerRegistryEntry {
111
+ id: string;
112
+ data: object;
113
+ }
114
+ export type MutateState = (state: SharedState) => void;
115
+ export type EmittedEvent = {
116
+ [K in keyof ClientEvents]: {
117
+ event: K;
118
+ args: ClientEvents[K];
119
+ };
120
+ }[keyof ClientEvents];
121
+ export type SendingPacket = {
122
+ id: string | number;
123
+ data: Record<string, any>;
124
+ };
125
+ export declare class SharedState<IsReady extends boolean = boolean> {
126
+ clientOptions: ClientOption;
127
+ private mutationQueue;
128
+ private eventQueue;
129
+ private sendQueue;
130
+ state: ConnectionState;
131
+ status: ClientStatus;
132
+ compressionThreshold: number;
133
+ authClient: AuthClient | undefined;
134
+ playerUUID: string | undefined;
135
+ publicKey: Buffer | undefined;
136
+ signature: Buffer | undefined;
137
+ signatureExpireTime: number | undefined;
138
+ private signatureTimeoutInstance;
139
+ sharedSecret: Buffer | undefined;
140
+ cipher: Cipheriv | undefined;
141
+ decipher: Decipheriv | undefined;
142
+ useEncryption: boolean;
143
+ sessionID: Buffer | undefined;
144
+ server: Server | undefined;
145
+ registry: Record<string, ServerRegistryEntry[]> | undefined;
146
+ world: If<IsReady, ServerWorld>;
147
+ player: If<IsReady, ClientPlayer>;
148
+ /**
149
+ * For maintaining message order.
150
+ *
151
+ * A UUID map to a MessageLink.
152
+ */
153
+ messageLinks: Record<string, MessageLink> | undefined;
154
+ messageSignatureCache: SignatureCache | undefined;
155
+ constructor(clientOptions: ClientOption);
156
+ isReady(): this is SharedState<true>;
157
+ checkReady(): void;
158
+ pruneStates(): void;
159
+ getSignature(): {
160
+ publicKey: Buffer<ArrayBufferLike>;
161
+ signature: Buffer<ArrayBufferLike>;
162
+ };
163
+ private fetchSignature;
164
+ startSignatureLoop(): Promise<void>;
165
+ stopSignatureLoop(): void;
166
+ enqueueMutation(mutation: MutateState): void;
167
+ enqueuePacket(packet: string, data: object): void;
168
+ enqueuePacket(packet: SendingPacket): void;
169
+ enqueueEvent<K extends keyof ClientEvents>(event: K, ...args: ClientEvents[K]): void;
170
+ enqueueEvent(event: EmittedEvent): void;
171
+ drainMutation(): void;
172
+ drainEvent(): EmittedEvent[];
173
+ drainPacket(): SendingPacket[];
174
+ }
175
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/world/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SharedState = exports.ConnectionState = exports.ClientStatus = exports.GameMode = void 0;
4
+ const error_1 = require("../base/error");
5
+ const sigCache_1 = require("../message/sigCache");
6
+ var GameMode;
7
+ (function (GameMode) {
8
+ GameMode[GameMode["Survival"] = 0] = "Survival";
9
+ GameMode[GameMode["Creative"] = 1] = "Creative";
10
+ GameMode[GameMode["Adventure"] = 2] = "Adventure";
11
+ GameMode[GameMode["Spectator"] = 3] = "Spectator";
12
+ })(GameMode || (exports.GameMode = GameMode = {}));
13
+ var ClientStatus;
14
+ (function (ClientStatus) {
15
+ ClientStatus[ClientStatus["Disconnected"] = 0] = "Disconnected";
16
+ ClientStatus[ClientStatus["Connecting"] = 1] = "Connecting";
17
+ ClientStatus[ClientStatus["Logining"] = 2] = "Logining";
18
+ ClientStatus[ClientStatus["Ready"] = 3] = "Ready";
19
+ })(ClientStatus || (exports.ClientStatus = ClientStatus = {}));
20
+ var ConnectionState;
21
+ (function (ConnectionState) {
22
+ ConnectionState[ConnectionState["Disconnected"] = 0] = "Disconnected";
23
+ ConnectionState[ConnectionState["Handshake"] = 1] = "Handshake";
24
+ ConnectionState[ConnectionState["Login"] = 2] = "Login";
25
+ ConnectionState[ConnectionState["Configure"] = 3] = "Configure";
26
+ ConnectionState[ConnectionState["Play"] = 4] = "Play";
27
+ })(ConnectionState || (exports.ConnectionState = ConnectionState = {}));
28
+ class SharedState {
29
+ clientOptions;
30
+ mutationQueue = [];
31
+ eventQueue = [];
32
+ sendQueue = [];
33
+ state = ConnectionState.Disconnected;
34
+ status = ClientStatus.Disconnected;
35
+ compressionThreshold = 0;
36
+ // Auth stuffs
37
+ authClient = undefined;
38
+ playerUUID = undefined;
39
+ publicKey = undefined;
40
+ signature = undefined;
41
+ signatureExpireTime = undefined;
42
+ // eslint-disable-next-line no-undef
43
+ signatureTimeoutInstance = undefined;
44
+ sharedSecret = undefined;
45
+ cipher = undefined;
46
+ decipher = undefined;
47
+ useEncryption = false;
48
+ sessionID = undefined;
49
+ server = undefined;
50
+ registry = undefined;
51
+ world = null;
52
+ player = null;
53
+ /**
54
+ * For maintaining message order.
55
+ *
56
+ * A UUID map to a MessageLink.
57
+ */
58
+ messageLinks = undefined;
59
+ messageSignatureCache = undefined;
60
+ constructor(clientOptions) {
61
+ this.clientOptions = clientOptions;
62
+ }
63
+ isReady() {
64
+ return this.status === ClientStatus.Ready;
65
+ }
66
+ checkReady() {
67
+ if (!this.isReady())
68
+ throw new error_1.ClientNotReady();
69
+ }
70
+ pruneStates() {
71
+ this.mutationQueue = [];
72
+ this.eventQueue = [];
73
+ this.sendQueue = [];
74
+ this.state = ConnectionState.Disconnected;
75
+ this.status = ClientStatus.Disconnected;
76
+ this.compressionThreshold = 0;
77
+ this.authClient = undefined;
78
+ this.playerUUID = undefined;
79
+ this.publicKey = undefined;
80
+ this.signature = undefined;
81
+ this.sharedSecret = undefined;
82
+ this.cipher = undefined;
83
+ this.decipher = undefined;
84
+ this.useEncryption = false;
85
+ this.sessionID = undefined;
86
+ this.signatureTimeoutInstance = undefined;
87
+ this.server = undefined;
88
+ this.registry = undefined;
89
+ this.world = undefined;
90
+ this.player = undefined;
91
+ if (this.clientOptions.shouldVerifyMessageSignature)
92
+ this.messageSignatureCache = sigCache_1.SignatureCache.default();
93
+ else
94
+ this.messageSignatureCache = undefined;
95
+ if (this.clientOptions.shouldVerifyMessageOrder)
96
+ this.messageLinks = {};
97
+ else
98
+ this.messageLinks = undefined;
99
+ }
100
+ getSignature() {
101
+ if (this.publicKey && this.signature)
102
+ return {
103
+ publicKey: this.publicKey,
104
+ signature: this.signature
105
+ };
106
+ throw new error_1.AuthRelatedNotFound("public key and signature");
107
+ }
108
+ async fetchSignature() {
109
+ if (!this.authClient)
110
+ throw new error_1.AuthRelatedNotFound("instance of class AuthClient");
111
+ const { publicKey, signature, expiresAt } = await this.authClient.getKeyPair();
112
+ this.publicKey = Buffer.from(publicKey);
113
+ this.signature = Buffer.from(signature);
114
+ return expiresAt;
115
+ }
116
+ async startSignatureLoop() {
117
+ const expiresAt = await this.fetchSignature();
118
+ this.signatureTimeoutInstance = setTimeout(async () => await this.startSignatureLoop(), expiresAt - Date.now() - 10_000);
119
+ }
120
+ stopSignatureLoop() {
121
+ clearTimeout(this.signatureTimeoutInstance);
122
+ }
123
+ enqueueMutation(mutation) { this.mutationQueue.push(mutation); }
124
+ enqueuePacket(packet, data) {
125
+ if (typeof packet === "string")
126
+ this.sendQueue.push({
127
+ id: packet,
128
+ data: data
129
+ });
130
+ else
131
+ this.sendQueue.push(packet);
132
+ }
133
+ enqueueEvent(event, ...args) {
134
+ if (typeof event === "string")
135
+ this.eventQueue.push({
136
+ event,
137
+ args: args
138
+ });
139
+ else
140
+ this.eventQueue.push(event);
141
+ }
142
+ drainMutation() {
143
+ while (true) {
144
+ const mutation = this.mutationQueue.shift();
145
+ if (mutation)
146
+ mutation(this);
147
+ else
148
+ break;
149
+ }
150
+ }
151
+ drainEvent() {
152
+ const events = structuredClone(this.eventQueue);
153
+ this.eventQueue = [];
154
+ return events;
155
+ }
156
+ drainPacket() {
157
+ const packets = structuredClone(this.sendQueue);
158
+ this.sendQueue = [];
159
+ return packets;
160
+ }
161
+ }
162
+ exports.SharedState = SharedState;
163
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/world/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tick.d.ts","sourceRoot":"","sources":["../../src/world/tick.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,QAAQ;IAUb,OAAO,CAAC,MAAM;IATlB,gBAAuB,OAAO,MAAM;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAqC;IACpE,gBAAuB,iBAAiB,MAAM;IAE9C,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,KAAK,CAAa;IAE1B,YACY,MAAM,EAAE,MAAM,GAAG,EAI5B;IAEM,KAAK,SAIX;IAEM,IAAI,SAIV;IAED,OAAO,CAAC,IAAI;CAiBf"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tick.js","sourceRoot":"","sources":["../../src/world/tick.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH;IAUgB,MAAM;IATX,MAAM,CAAU,OAAO,GAAG,EAAE,CAAC;IAC5B,MAAM,CAAU,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,QAAU,CAAC;IAC7D,MAAM,CAAU,iBAAiB,GAAG,EAAE,CAAC;IAEtC,OAAO,CAAU;IACjB,YAAY,CAAS;IACrB,KAAK,GAAQ,IAAI,CAAC;IAE1B,YACY,MAAiB;sBAAjB,MAAM;QAEd,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC;IAEM,IAAI;QACP,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAEO,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAE/B,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC,YAAY,GAAG,GAAG,IAAI,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YACtE,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,OAAO,CAAC;YACtC,QAAQ,EAAE,CAAC;QACf,CAAC;QAED,IAAI,QAAQ,IAAI,QAAQ,CAAC,iBAAiB;YACtC,IAAI,CAAC,YAAY,GAAG,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC;QAE/C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;QAClF,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,CAAC;CACJ"}
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@vaitosoi/minejs",
3
- "version": "0.2.2",
3
+ "version": "0.4.0",
4
4
  "description": "A Minecraft client package",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "url": "git+https://github.com/VaitoSoi/minejs"
8
8
  },
9
+ "homepage": "https://minejs.vaito.dev/",
9
10
  "publishConfig": {
10
11
  "registry": "https://registry.npmjs.org/",
11
12
  "access": "public"
@@ -23,6 +24,9 @@
23
24
  "engines": {
24
25
  "node": ">=22"
25
26
  },
27
+ "scripts": {
28
+ "prepare": "eslint . --fix && tsc --noEmit"
29
+ },
26
30
  "devDependencies": {
27
31
  "@clean-jsdoc-theme/typedoc": "5.0.5",
28
32
  "@eslint/js": "^10.0.1",
@@ -38,7 +42,8 @@
38
42
  "typescript-eslint": "^8.60.1"
39
43
  },
40
44
  "dependencies": {
41
- "bitset": "^5.2.3"
45
+ "bitset": "^5.2.3",
46
+ "zod": "^4.4.3"
42
47
  },
43
48
  "packageManager": "pnpm@11.15.1+sha512.81350b07e53c9538a02f1f2303b4290fa2d7be04e56e2a970c4cc4b417dc761de196edabd49d55c7dc9580db81007c44143e4e3d7e462b3000d23c255122d065"
44
49
  }
@@ -0,0 +1,12 @@
1
+ export function sliceBuffer<T = Buffer>(
2
+ buf: Buffer,
3
+ byteLength: number,
4
+ transform?: (buf: Buffer, ind: number) => T
5
+ ): T[] {
6
+ const chunks: Buffer[] = [];
7
+ for (let i = 0; i < buf.length; i += byteLength)
8
+ chunks.push(buf.subarray(i, i + byteLength));
9
+ if (transform)
10
+ return chunks.map(transform);
11
+ return chunks as T[];
12
+ }
package/src/base/error.ts CHANGED
@@ -1,3 +1,10 @@
1
+ /** @hidden */
2
+ export class ClientNotReady extends Error {
3
+ constructor() {
4
+ super(`client is not ready`);
5
+ }
6
+ }
7
+
1
8
  /** @hidden */
2
9
  export class UnexpectedValue extends Error {
3
10
  constructor(
@@ -33,6 +40,10 @@ export class InvalidValue extends Error {
33
40
  }
34
41
  }
35
42
 
43
+ /*
44
+ * TCP connection
45
+ */
46
+
36
47
  /** @hidden */
37
48
  export class SockerIsNotWritable extends Error {
38
49
  constructor() {
@@ -40,6 +51,10 @@ export class SockerIsNotWritable extends Error {
40
51
  }
41
52
  }
42
53
 
54
+ /*
55
+ * Authenticating...
56
+ */
57
+
43
58
  /** @hidden */
44
59
  export class CantGetMsAuthToken extends Error {
45
60
  constructor() {
@@ -55,12 +70,19 @@ export class CantGetMsAccessToken extends Error {
55
70
  }
56
71
 
57
72
  /** @hidden */
58
- export class AuthError extends Error {
59
- constructor(public error: string) {
73
+ export class OAuthError extends Error {
74
+ constructor(public error: string, public detail?: any) {
60
75
  super(`got oauth error: ${error}, for more info: https://datatracker.ietf.org/doc/html/rfc6749#section-5.2`);
61
76
  }
62
77
  }
63
78
 
79
+ /** @hidden */
80
+ export class AuthClientError extends Error {
81
+ constructor(public error: string, public detail?: any) {
82
+ super(error, detail);
83
+ }
84
+ }
85
+
64
86
  /** @hidden */
65
87
  export class XboxError extends Error {
66
88
  constructor(public code: string) {
@@ -68,6 +90,12 @@ export class XboxError extends Error {
68
90
  }
69
91
  }
70
92
 
93
+ /** @hidden */
94
+ export class MinecraftError extends Error {
95
+ constructor(public error: string) {
96
+ super(`minecraft auth error: ${error}`);
97
+ }
98
+ }
71
99
  /** @hidden */
72
100
  export class ProfileNotFound extends Error {
73
101
  constructor() {
@@ -103,16 +131,77 @@ export class MissingAuthOption extends Error {
103
131
  }
104
132
  }
105
133
 
134
+ export class AuthRelatedNotFound extends Error {
135
+ constructor(public component: string) {
136
+ super(`auth option is enabled, but the auth related component (${component}) is not found`);
137
+ }
138
+ }
139
+
140
+ /*
141
+ * Packets
142
+ */
143
+
106
144
  /** @hidden */
107
145
  export class RegistryItemNotFound extends Error {
108
146
  constructor(public item: string) {
109
147
  super(`cant find registry item: ${item}`);
110
148
  }
111
149
  }
150
+ /** @hidden */
151
+ export class VersionNotSupport extends Error {
152
+ constructor(public version: string) {
153
+ super(`version ${version} is not supported`);
154
+ }
155
+ }
112
156
 
113
157
  /** @hidden */
114
- export class ClientNotReady extends Error {
158
+ export class CantReadFile extends Error {
159
+ constructor(public path: string) {
160
+ super(`can't read file at "${path}"`);
161
+ }
162
+ }
163
+
164
+ /** @hidden */
165
+ export class InvalidPacketStructure extends Error {
166
+ constructor(public path: string, public zodIssue?: any[]) {
167
+ super(`packet structure in file "${path}" is invalid` + (zodIssue?.length ? ", zod issue: " + JSON.stringify(zodIssue, null, 4) : ""));
168
+ }
169
+ }
170
+
171
+
172
+ /** @hidden */
173
+ export class MissingPacketField extends Error {
174
+ constructor(public packetId: number, public field: string, public need: string) {
175
+ super(`${packetId}: ${field} need ${need}, but not found`);
176
+ }
177
+ }
178
+
179
+ /** @hidden */
180
+ export class MissingField extends Error {
181
+ constructor(public field: string, public where: string) {
182
+ super(`missing ${field} in ${where}`);
183
+ }
184
+ }
185
+
186
+ /** @hidden */
187
+ export class NotImplemented extends Error {
115
188
  constructor() {
116
- super(`client is not ready`);
189
+ super("if you are dev, please create an issue on github. if you are vaito, hey, this function is not injected >:(");
190
+ }
191
+ }
192
+
193
+ /*
194
+ * Messages
195
+ */
196
+
197
+ export class MessageLinkNotFound extends Error {
198
+ constructor(public senderUUID: string) {
199
+ super(`message link of sender ${senderUUID} not found, maybe because server has sent out of order packet`);
200
+ }
201
+ }
202
+
203
+ export class HaveSignatureButNotIndex extends Error {
204
+ constructor() {
205
+ super (`expecting both shouldVerifyMessageOrder set to true when shouldVerifyMessageSignature set to true`);
117
206
  }
118
207
  }
@@ -0,0 +1,10 @@
1
+ import { AuthClientError } from "./error";
2
+
3
+ export async function getJson(res: Response, source: string) {
4
+ const data = await res.text();
5
+ try {
6
+ return JSON.parse(data);
7
+ } catch (e) {
8
+ throw new AuthClientError(`cant parse json from ${source}`, data);
9
+ }
10
+ }