@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.
- package/README.md +1 -1
- package/assets/minecraft/26.2/packets.json +4758 -0
- package/dist/base/buffer.d.ts +2 -0
- package/dist/base/buffer.d.ts.map +1 -0
- package/dist/base/buffer.js +12 -0
- package/dist/base/buffer.js.map +1 -0
- package/dist/base/error.d.ts +59 -3
- package/dist/base/error.d.ts.map +1 -1
- package/dist/base/error.js +123 -7
- package/dist/base/error.js.map +1 -1
- package/dist/base/http.d.ts +2 -0
- package/dist/base/http.d.ts.map +1 -0
- package/dist/base/http.js +14 -0
- package/dist/base/http.js.map +1 -0
- package/dist/base/math.d.ts +22 -1
- package/dist/base/math.d.ts.map +1 -1
- package/dist/base/math.js +49 -2
- package/dist/base/math.js.map +1 -1
- package/dist/base/typing.d.ts +7 -1
- package/dist/base/typing.d.ts.map +1 -1
- package/dist/client/auth.d.ts +41 -7
- package/dist/client/auth.d.ts.map +1 -1
- package/dist/client/auth.js +96 -39
- package/dist/client/auth.js.map +1 -1
- package/dist/client/client.d.ts +73 -17
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +111 -44
- package/dist/client/client.js.map +1 -1
- package/dist/client/tcp.d.ts +17 -206
- package/dist/client/tcp.d.ts.map +1 -1
- package/dist/client/tcp.js +37 -715
- package/dist/client/tcp.js.map +1 -1
- package/dist/index.d.ts +12 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/dist/message/link.d.ts +10 -0
- package/dist/message/link.d.ts.map +1 -0
- package/dist/message/link.js +22 -0
- package/dist/message/link.js.map +1 -0
- package/dist/message/sigCache.d.ts +13 -0
- package/dist/message/sigCache.d.ts.map +1 -0
- package/dist/message/sigCache.js +26 -0
- package/dist/message/sigCache.js.map +1 -0
- package/dist/{translator → packet}/decoder.d.ts +14 -1
- package/dist/packet/decoder.d.ts.map +1 -0
- package/dist/{translator → packet}/decoder.js +24 -3
- package/dist/packet/decoder.js.map +1 -0
- package/dist/packet/dispatcher.d.ts +53 -0
- package/dist/packet/dispatcher.d.ts.map +1 -0
- package/dist/packet/dispatcher.js +738 -0
- package/dist/packet/dispatcher.js.map +1 -0
- package/dist/{translator → packet}/encoder.d.ts +4 -3
- package/dist/packet/encoder.d.ts.map +1 -0
- package/dist/{translator → packet}/encoder.js +18 -7
- package/dist/packet/encoder.js.map +1 -0
- package/dist/packet/static.d.ts.map +1 -0
- package/dist/packet/static.js.map +1 -0
- package/dist/{base → physics}/aabb.d.ts +2 -2
- package/dist/physics/aabb.d.ts.map +1 -0
- package/dist/{base → physics}/aabb.js +5 -5
- package/dist/physics/aabb.js.map +1 -0
- package/dist/physics/direction.d.ts.map +1 -0
- package/dist/physics/direction.js.map +1 -0
- package/dist/{base → physics}/player.d.ts +25 -28
- package/dist/physics/player.d.ts.map +1 -0
- package/dist/{base → physics}/player.js +81 -68
- package/dist/physics/player.js.map +1 -0
- package/dist/version/codec.d.ts +18 -0
- package/dist/version/codec.d.ts.map +1 -0
- package/dist/version/codec.js +235 -0
- package/dist/version/codec.js.map +1 -0
- package/dist/version/registry.d.ts +236 -0
- package/dist/version/registry.d.ts.map +1 -0
- package/dist/version/registry.js +284 -0
- package/dist/version/registry.js.map +1 -0
- package/dist/{base → world}/block.d.ts +5 -5
- package/dist/world/block.d.ts.map +1 -0
- package/dist/{base → world}/block.js +13 -13
- package/dist/world/block.js.map +1 -0
- package/dist/{base → world}/entity.d.ts +4 -4
- package/dist/world/entity.d.ts.map +1 -0
- package/dist/{base → world}/entity.js +6 -6
- package/dist/world/entity.js.map +1 -0
- package/dist/world/state.d.ts +175 -0
- package/dist/world/state.d.ts.map +1 -0
- package/dist/world/state.js +163 -0
- package/dist/world/state.js.map +1 -0
- package/dist/world/tick.d.ts.map +1 -0
- package/dist/world/tick.js.map +1 -0
- package/package.json +7 -2
- package/src/base/buffer.ts +12 -0
- package/src/base/error.ts +93 -4
- package/src/base/http.ts +10 -0
- package/src/base/math.ts +55 -3
- package/src/base/typing.ts +9 -1
- package/src/client/auth.ts +130 -52
- package/src/client/client.ts +182 -50
- package/src/client/tcp.ts +45 -967
- package/src/index.ts +12 -12
- package/src/message/link.ts +17 -0
- package/src/message/sigCache.ts +25 -0
- package/src/{translator → packet}/decoder.ts +24 -3
- package/src/packet/dispatcher.ts +919 -0
- package/src/{translator → packet}/encoder.ts +20 -9
- package/src/{base → physics}/aabb.ts +5 -5
- package/src/{base → physics}/player.ts +106 -65
- package/src/version/codec.ts +248 -0
- package/src/version/registry.ts +328 -0
- package/src/{base → world}/block.ts +12 -11
- package/src/{base → world}/entity.ts +5 -5
- package/src/world/state.ts +300 -0
- package/test/adapter/index.ts +14 -0
- package/test/client/index.ts +28 -21
- package/test/json/index.ts +3 -0
- package/dist/base/aabb.d.ts.map +0 -1
- package/dist/base/aabb.js.map +0 -1
- package/dist/base/block.d.ts.map +0 -1
- package/dist/base/block.js.map +0 -1
- package/dist/base/direction.d.ts.map +0 -1
- package/dist/base/direction.js.map +0 -1
- package/dist/base/entity.d.ts.map +0 -1
- package/dist/base/entity.js.map +0 -1
- package/dist/base/player.d.ts.map +0 -1
- package/dist/base/player.js.map +0 -1
- package/dist/base/registry.d.ts +0 -50
- package/dist/base/registry.d.ts.map +0 -1
- package/dist/base/registry.js +0 -89
- package/dist/base/registry.js.map +0 -1
- package/dist/base/tick.d.ts.map +0 -1
- package/dist/base/tick.js.map +0 -1
- package/dist/translator/decoder.d.ts.map +0 -1
- package/dist/translator/decoder.js.map +0 -1
- package/dist/translator/encoder.d.ts.map +0 -1
- package/dist/translator/encoder.js.map +0 -1
- package/dist/translator/static.d.ts.map +0 -1
- package/dist/translator/static.js.map +0 -1
- package/src/base/registry.ts +0 -87
- /package/assets/minecraft/{blocks.json → 26.2/blocks.json} +0 -0
- /package/assets/minecraft/{entities.json → 26.2/entities.json} +0 -0
- /package/dist/{translator → packet}/static.d.ts +0 -0
- /package/dist/{translator → packet}/static.js +0 -0
- /package/dist/{base → physics}/direction.d.ts +0 -0
- /package/dist/{base → physics}/direction.js +0 -0
- /package/dist/{base → world}/tick.d.ts +0 -0
- /package/dist/{base → world}/tick.js +0 -0
- /package/src/{translator → packet}/static.ts +0 -0
- /package/src/{base → physics}/direction.ts +0 -0
- /package/src/{base → world}/tick.ts +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { AABB } from "../physics/aabb";
|
|
2
|
+
import { SharedState } from "./state";
|
|
3
3
|
export declare class EntitiesManager {
|
|
4
|
-
private
|
|
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(
|
|
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("
|
|
4
|
+
const aabb_1 = require("../physics/aabb");
|
|
5
5
|
class EntitiesManager {
|
|
6
|
-
|
|
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(
|
|
18
|
-
this.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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(
|
|
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
|
}
|
package/src/base/http.ts
ADDED
|
@@ -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
|
+
}
|