specprotocol 1.0.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 (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +174 -0
  3. package/bin/specprotocol.js +136 -0
  4. package/dist/auth/microsoft.d.ts +23 -0
  5. package/dist/auth/microsoft.d.ts.map +1 -0
  6. package/dist/auth/microsoft.js +167 -0
  7. package/dist/auth/microsoft.js.map +1 -0
  8. package/dist/auth/offline.d.ts +20 -0
  9. package/dist/auth/offline.d.ts.map +1 -0
  10. package/dist/auth/offline.js +67 -0
  11. package/dist/auth/offline.js.map +1 -0
  12. package/dist/bot.d.ts +190 -0
  13. package/dist/bot.d.ts.map +1 -0
  14. package/dist/bot.js +624 -0
  15. package/dist/bot.js.map +1 -0
  16. package/dist/entity/entity.d.ts +71 -0
  17. package/dist/entity/entity.d.ts.map +1 -0
  18. package/dist/entity/entity.js +157 -0
  19. package/dist/entity/entity.js.map +1 -0
  20. package/dist/index.d.ts +36 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +73 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/plugins/built-in/chat.d.ts +19 -0
  25. package/dist/plugins/built-in/chat.d.ts.map +1 -0
  26. package/dist/plugins/built-in/chat.js +62 -0
  27. package/dist/plugins/built-in/chat.js.map +1 -0
  28. package/dist/plugins/built-in/combat.d.ts +20 -0
  29. package/dist/plugins/built-in/combat.d.ts.map +1 -0
  30. package/dist/plugins/built-in/combat.js +42 -0
  31. package/dist/plugins/built-in/combat.js.map +1 -0
  32. package/dist/plugins/plugin-manager.d.ts +49 -0
  33. package/dist/plugins/plugin-manager.d.ts.map +1 -0
  34. package/dist/plugins/plugin-manager.js +76 -0
  35. package/dist/plugins/plugin-manager.js.map +1 -0
  36. package/dist/protocol/compression.d.ts +23 -0
  37. package/dist/protocol/compression.d.ts.map +1 -0
  38. package/dist/protocol/compression.js +85 -0
  39. package/dist/protocol/compression.js.map +1 -0
  40. package/dist/protocol/connection.d.ts +73 -0
  41. package/dist/protocol/connection.d.ts.map +1 -0
  42. package/dist/protocol/connection.js +212 -0
  43. package/dist/protocol/connection.js.map +1 -0
  44. package/dist/protocol/encryption.d.ts +29 -0
  45. package/dist/protocol/encryption.d.ts.map +1 -0
  46. package/dist/protocol/encryption.js +116 -0
  47. package/dist/protocol/encryption.js.map +1 -0
  48. package/dist/protocol/packet.d.ts +75 -0
  49. package/dist/protocol/packet.d.ts.map +1 -0
  50. package/dist/protocol/packet.js +140 -0
  51. package/dist/protocol/packet.js.map +1 -0
  52. package/dist/protocol/states/handshake.d.ts +19 -0
  53. package/dist/protocol/states/handshake.d.ts.map +1 -0
  54. package/dist/protocol/states/handshake.js +32 -0
  55. package/dist/protocol/states/handshake.js.map +1 -0
  56. package/dist/protocol/states/login.d.ts +77 -0
  57. package/dist/protocol/states/login.d.ts.map +1 -0
  58. package/dist/protocol/states/login.js +125 -0
  59. package/dist/protocol/states/login.js.map +1 -0
  60. package/dist/protocol/states/play.d.ts +187 -0
  61. package/dist/protocol/states/play.d.ts.map +1 -0
  62. package/dist/protocol/states/play.js +316 -0
  63. package/dist/protocol/states/play.js.map +1 -0
  64. package/dist/protocol/types.d.ts +210 -0
  65. package/dist/protocol/types.d.ts.map +1 -0
  66. package/dist/protocol/types.js +495 -0
  67. package/dist/protocol/types.js.map +1 -0
  68. package/dist/types.d.ts +36 -0
  69. package/dist/types.d.ts.map +1 -0
  70. package/dist/types.js +6 -0
  71. package/dist/types.js.map +1 -0
  72. package/dist/utils/events.d.ts +23 -0
  73. package/dist/utils/events.d.ts.map +1 -0
  74. package/dist/utils/events.js +44 -0
  75. package/dist/utils/events.js.map +1 -0
  76. package/dist/utils/logger.d.ts +19 -0
  77. package/dist/utils/logger.d.ts.map +1 -0
  78. package/dist/utils/logger.js +47 -0
  79. package/dist/utils/logger.js.map +1 -0
  80. package/dist/utils/vec3.d.ts +25 -0
  81. package/dist/utils/vec3.d.ts.map +1 -0
  82. package/dist/utils/vec3.js +66 -0
  83. package/dist/utils/vec3.js.map +1 -0
  84. package/dist/world/block.d.ts +39 -0
  85. package/dist/world/block.d.ts.map +1 -0
  86. package/dist/world/block.js +84 -0
  87. package/dist/world/block.js.map +1 -0
  88. package/dist/world/world.d.ts +55 -0
  89. package/dist/world/world.d.ts.map +1 -0
  90. package/dist/world/world.js +95 -0
  91. package/dist/world/world.js.map +1 -0
  92. package/docs/README.md +29 -0
  93. package/docs/api/auth.md +210 -0
  94. package/docs/api/bot.md +137 -0
  95. package/docs/api/events.md +166 -0
  96. package/docs/api/plugins.md +207 -0
  97. package/docs/api/protocol.md +129 -0
  98. package/docs/api/world.md +138 -0
  99. package/docs/first-bot.md +114 -0
  100. package/docs/getting-started.md +103 -0
  101. package/docs/guides/architecture.md +122 -0
  102. package/docs/guides/custom-plugins.md +211 -0
  103. package/docs/guides/raw-packets.md +80 -0
  104. package/package.json +55 -0
package/dist/bot.js ADDED
@@ -0,0 +1,624 @@
1
+ "use strict";
2
+ /**
3
+ * Bot — the main orchestrator class.
4
+ *
5
+ * This is the primary entry point for users. It coordinates:
6
+ * - TCP connection to the server
7
+ * - Authentication (offline or Microsoft)
8
+ * - Protocol state transitions (Handshake → Login → Configuration → Play)
9
+ * - Keep-alive responses
10
+ * - Entity and world state management
11
+ * - Plugin system
12
+ * - High-level API (chat, move, dig, attack)
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.Bot = void 0;
16
+ exports.createBot = createBot;
17
+ const connection_js_1 = require("./protocol/connection.js");
18
+ const events_js_1 = require("./utils/events.js");
19
+ const logger_js_1 = require("./utils/logger.js");
20
+ const vec3_js_1 = require("./utils/vec3.js");
21
+ const types_js_1 = require("./protocol/types.js");
22
+ // Auth
23
+ const offline_js_1 = require("./auth/offline.js");
24
+ const microsoft_js_1 = require("./auth/microsoft.js");
25
+ const encryption_js_1 = require("./protocol/encryption.js");
26
+ // Protocol states
27
+ const handshake_js_1 = require("./protocol/states/handshake.js");
28
+ const login_js_1 = require("./protocol/states/login.js");
29
+ const play_js_1 = require("./protocol/states/play.js");
30
+ // World & Entity
31
+ const world_js_1 = require("./world/world.js");
32
+ const entity_js_1 = require("./entity/entity.js");
33
+ // Plugins
34
+ const plugin_manager_js_1 = require("./plugins/plugin-manager.js");
35
+ const chat_js_1 = require("./plugins/built-in/chat.js");
36
+ const combat_js_1 = require("./plugins/built-in/combat.js");
37
+ // ─── Bot Class ──────────────────────────────────────────
38
+ class Bot extends events_js_1.TypedEventEmitter {
39
+ // Connection
40
+ connection;
41
+ logger;
42
+ // State
43
+ _username = '';
44
+ _uuid = '';
45
+ _entityId = 0;
46
+ _health = 20;
47
+ _food = 20;
48
+ _saturation = 5;
49
+ _gameMode = 0;
50
+ _isAlive = true;
51
+ // Auth
52
+ authMode;
53
+ accessToken;
54
+ // Subsystems
55
+ world;
56
+ entities;
57
+ plugins;
58
+ entity;
59
+ // Config
60
+ options;
61
+ // Packet handlers for play state
62
+ packetHandlers = new Map();
63
+ constructor(options) {
64
+ super();
65
+ this.options = {
66
+ host: options.host,
67
+ port: options.port ?? 25565,
68
+ version: options.version ?? handshake_js_1.PROTOCOL_VERSION,
69
+ viewDistance: options.viewDistance ?? 10,
70
+ };
71
+ this.authMode = options.auth ?? 'offline';
72
+ this._username = options.username;
73
+ this.logger = new logger_js_1.Logger('Bot', options.logLevel ?? logger_js_1.LogLevel.INFO);
74
+ // Initialize subsystems
75
+ this.world = new world_js_1.World();
76
+ this.entities = new entity_js_1.EntityManager();
77
+ this.plugins = new plugin_manager_js_1.PluginManager();
78
+ this.entity = new entity_js_1.Entity(0, '', 0);
79
+ // Initialize connection
80
+ this.connection = new connection_js_1.Connection({
81
+ host: this.options.host,
82
+ port: this.options.port,
83
+ logLevel: options.logLevel,
84
+ });
85
+ // Register built-in plugins (deferred init)
86
+ this.plugins.register(new chat_js_1.ChatPlugin());
87
+ this.plugins.register(new combat_js_1.CombatPlugin());
88
+ // Register user plugins
89
+ if (options.plugins) {
90
+ for (const plugin of options.plugins) {
91
+ this.plugins.register(plugin);
92
+ }
93
+ }
94
+ // Initialize all plugins with bot instance
95
+ this.plugins.initializeAll(this);
96
+ }
97
+ // ─── Getters ────────────────────────────────────────
98
+ get username() { return this._username; }
99
+ get uuid() { return this._uuid; }
100
+ get entityId() { return this._entityId; }
101
+ get health() { return this._health; }
102
+ get food() { return this._food; }
103
+ get saturation() { return this._saturation; }
104
+ get gameMode() { return this._gameMode; }
105
+ get isAlive() { return this._isAlive; }
106
+ get position() { return this.entity.position; }
107
+ // ─── Connect & Login ────────────────────────────────
108
+ /**
109
+ * Connect to the server and begin the login process.
110
+ */
111
+ async connect() {
112
+ this.logger.info(`Connecting to ${this.options.host}:${this.options.port}...`);
113
+ // Setup error/close handling
114
+ this.connection.on('error', (err) => this.emit('error', err));
115
+ this.connection.on('close', () => this.emit('end'));
116
+ // Connect TCP
117
+ await this.connection.connect();
118
+ this.emit('connect');
119
+ // Perform authentication and login
120
+ await this.performLogin();
121
+ }
122
+ async performLogin() {
123
+ // Step 1: Send Handshake
124
+ this.logger.info('Sending handshake...');
125
+ this.connection.sendPacket(0x00, (0, handshake_js_1.buildHandshakePacket)(this.options.version, this.options.host, this.options.port, handshake_js_1.NextState.LOGIN));
126
+ // Step 2: Authenticate and get profile
127
+ let uuid;
128
+ if (this.authMode === 'offline') {
129
+ const profile = (0, offline_js_1.createOfflineProfile)(this._username);
130
+ uuid = profile.uuid;
131
+ this._uuid = uuid;
132
+ }
133
+ else {
134
+ const result = await (0, microsoft_js_1.authenticateMicrosoft)((code, uri) => {
135
+ this.logger.info(`\n${'='.repeat(50)}`);
136
+ this.logger.info(`Open this URL: ${uri}`);
137
+ this.logger.info(`Enter code: ${code}`);
138
+ this.logger.info(`${'='.repeat(50)}\n`);
139
+ });
140
+ this._username = result.username;
141
+ this._uuid = result.uuid;
142
+ this.accessToken = result.accessToken;
143
+ uuid = result.uuid;
144
+ }
145
+ // Step 3: Send Login Start
146
+ this.logger.info(`Logging in as ${this._username} (${uuid})...`);
147
+ this.connection.sendPacket(login_js_1.LoginServerboundPackets.LOGIN_START, (0, login_js_1.buildLoginStartPacket)(this._username, uuid));
148
+ // Step 4: Handle login response packets
149
+ await this.handleLoginSequence();
150
+ }
151
+ async handleLoginSequence() {
152
+ return new Promise((resolve, reject) => {
153
+ const timeout = setTimeout(() => {
154
+ reject(new Error('Login timeout (30s)'));
155
+ }, 30000);
156
+ const onPacket = (packet) => {
157
+ try {
158
+ this.handleLoginPacket(packet, () => {
159
+ clearTimeout(timeout);
160
+ // Remove login handler IMMEDIATELY before entering config state
161
+ this.connection.off('packet', onPacket);
162
+ resolve();
163
+ });
164
+ }
165
+ catch (err) {
166
+ clearTimeout(timeout);
167
+ this.connection.off('packet', onPacket);
168
+ reject(err);
169
+ }
170
+ };
171
+ this.connection.on('packet', onPacket);
172
+ });
173
+ }
174
+ handleLoginPacket(packet, onComplete) {
175
+ switch (packet.id) {
176
+ case login_js_1.LoginClientboundPackets.ENCRYPTION_REQUEST: {
177
+ this.handleEncryptionRequest(packet.data);
178
+ break;
179
+ }
180
+ case login_js_1.LoginClientboundPackets.SET_COMPRESSION: {
181
+ const { threshold } = (0, login_js_1.parseSetCompressionPacket)(packet.data);
182
+ this.connection.enableCompression(threshold);
183
+ this.logger.info(`Compression enabled (threshold: ${threshold})`);
184
+ break;
185
+ }
186
+ case login_js_1.LoginClientboundPackets.LOGIN_SUCCESS: {
187
+ const success = (0, login_js_1.parseLoginSuccessPacket)(packet.data);
188
+ this._username = success.username;
189
+ this._uuid = success.uuid;
190
+ this.logger.info(`Login successful! ${success.username} (${success.uuid})`);
191
+ // Send Login Acknowledged
192
+ this.connection.sendPacket(login_js_1.LoginServerboundPackets.LOGIN_ACKNOWLEDGED, (0, login_js_1.buildLoginAcknowledgedPacket)());
193
+ // Remove login handler FIRST, then enter Configuration state
194
+ onComplete();
195
+ // Enter Configuration state — handle config packets before Play
196
+ this.handleConfigurationState().then(() => {
197
+ this.setupPlayStateHandlers();
198
+ this.emit('login');
199
+ }).catch((err) => {
200
+ this.logger.error('Configuration state failed:', err);
201
+ });
202
+ break;
203
+ }
204
+ case login_js_1.LoginClientboundPackets.DISCONNECT: {
205
+ const { reason } = (0, login_js_1.parseDisconnectPacket)(packet.data);
206
+ this.logger.error(`Disconnected during login: ${reason}`);
207
+ this.emit('kicked', reason);
208
+ break;
209
+ }
210
+ case login_js_1.LoginClientboundPackets.LOGIN_PLUGIN_REQUEST: {
211
+ const pluginReq = (0, login_js_1.parseLoginPluginRequestPacket)(packet.data);
212
+ this.logger.debug(`Login plugin request: ${pluginReq.channel}`);
213
+ // Respond with "not understood"
214
+ this.connection.sendPacket(login_js_1.LoginServerboundPackets.LOGIN_PLUGIN_RESPONSE, (0, login_js_1.buildLoginPluginResponsePacket)(pluginReq.messageId));
215
+ break;
216
+ }
217
+ }
218
+ }
219
+ handleEncryptionRequest(data) {
220
+ const request = (0, login_js_1.parseEncryptionRequestPacket)(data);
221
+ this.logger.info('Handling encryption...');
222
+ // Generate shared secret
223
+ const sharedSecret = (0, encryption_js_1.generateSharedSecret)();
224
+ // Encrypt shared secret and verify token with server's public key
225
+ const encryptedSecret = (0, encryption_js_1.encryptRSA)(request.publicKey, sharedSecret);
226
+ const encryptedToken = (0, encryption_js_1.encryptRSA)(request.publicKey, request.verifyToken);
227
+ // If online mode, join session server
228
+ if (request.shouldAuthenticate && this.accessToken) {
229
+ const serverHash = (0, encryption_js_1.computeServerHash)(request.serverId, sharedSecret, request.publicKey);
230
+ (0, microsoft_js_1.joinServer)(this.accessToken, this._uuid, serverHash)
231
+ .then(() => {
232
+ // Send encryption response
233
+ this.connection.sendPacket(login_js_1.LoginServerboundPackets.ENCRYPTION_RESPONSE, (0, login_js_1.buildEncryptionResponsePacket)(encryptedSecret, encryptedToken));
234
+ // Enable encryption for all subsequent packets
235
+ this.connection.enableEncryption(sharedSecret);
236
+ })
237
+ .catch((err) => {
238
+ this.logger.error('Failed to join session:', err);
239
+ this.emit('error', err);
240
+ });
241
+ }
242
+ else {
243
+ // Offline mode or no auth needed
244
+ this.connection.sendPacket(login_js_1.LoginServerboundPackets.ENCRYPTION_RESPONSE, (0, login_js_1.buildEncryptionResponsePacket)(encryptedSecret, encryptedToken));
245
+ this.connection.enableEncryption(sharedSecret);
246
+ }
247
+ }
248
+ // ─── Configuration State ────────────────────────────
249
+ /**
250
+ * Handle Configuration state packets after Login Acknowledged.
251
+ * In 1.20.2+, the server sends registry data, feature flags, etc. before Play.
252
+ * When the server sends Finish Configuration (0x03), we transition to Play.
253
+ *
254
+ * 1.21.4 Configuration Clientbound Packet IDs:
255
+ * 0x00 = Cookie Request
256
+ * 0x01 = Plugin Message
257
+ * 0x02 = Disconnect
258
+ * 0x03 = Finish Configuration
259
+ * 0x04 = Keep Alive
260
+ * 0x05 = Ping
261
+ * 0x07 = Registry Data
262
+ * 0x09 = Add Resource Pack
263
+ * 0x0C = Feature Flags
264
+ * 0x0D = Update Tags
265
+ * 0x0E = Known Packs
266
+ * 0x10 = Server Links
267
+ */
268
+ handleConfigurationState() {
269
+ return new Promise((resolve, reject) => {
270
+ const timeout = setTimeout(() => {
271
+ this.connection.off('packet', configHandler);
272
+ reject(new Error('Configuration state timeout (60s)'));
273
+ }, 60000);
274
+ const configHandler = (packet) => {
275
+ switch (packet.id) {
276
+ case 0x03: {
277
+ // Finish Configuration (clientbound)
278
+ this.logger.info('Configuration complete, entering Play state...');
279
+ // Send Acknowledge Finish Configuration (serverbound 0x03)
280
+ this.connection.sendPacket(0x03, Buffer.alloc(0));
281
+ clearTimeout(timeout);
282
+ this.connection.off('packet', configHandler);
283
+ resolve();
284
+ break;
285
+ }
286
+ case 0x04: {
287
+ // Keep Alive (clientbound) — must respond or get kicked
288
+ const reader = new types_js_1.BufferReader(packet.data);
289
+ const keepAliveId = reader.readLong();
290
+ this.logger.debug(`Config: Keep alive (${keepAliveId})`);
291
+ // Respond with same keep alive ID (serverbound 0x04)
292
+ const kaWriter = new types_js_1.BufferWriter();
293
+ kaWriter.writeLong(keepAliveId);
294
+ this.connection.sendPacket(0x04, kaWriter.toBuffer());
295
+ break;
296
+ }
297
+ case 0x01: {
298
+ // Plugin Message (clientbound) — ignore
299
+ this.logger.debug('Config: Plugin message received');
300
+ break;
301
+ }
302
+ case 0x07: {
303
+ // Registry Data — ignore (we don't track registry data yet)
304
+ this.logger.debug('Config: Registry data received');
305
+ break;
306
+ }
307
+ case 0x0C: {
308
+ // Feature Flags — ignore
309
+ this.logger.debug('Config: Feature flags received');
310
+ break;
311
+ }
312
+ case 0x0D: {
313
+ // Update Tags — ignore
314
+ this.logger.debug('Config: Tags update received');
315
+ break;
316
+ }
317
+ case 0x0E: {
318
+ // Known Packs (clientbound) — respond with empty known packs
319
+ this.logger.debug('Config: Known packs request');
320
+ // Send Known Packs response (serverbound 0x07) — empty
321
+ const knownPacksWriter = new types_js_1.BufferWriter();
322
+ knownPacksWriter.writeVarInt(0); // 0 known packs
323
+ this.connection.sendPacket(0x07, knownPacksWriter.toBuffer());
324
+ break;
325
+ }
326
+ case 0x05: {
327
+ // Ping — respond with pong
328
+ this.logger.debug('Config: Ping received');
329
+ this.connection.sendPacket(0x02, packet.data); // Pong (serverbound 0x02)
330
+ break;
331
+ }
332
+ case 0x00: {
333
+ // Cookie Request — ignore
334
+ this.logger.debug('Config: Cookie request');
335
+ break;
336
+ }
337
+ case 0x09: {
338
+ // Add Resource Pack — respond with accepted (status 3 = accepted)
339
+ this.logger.debug('Config: Resource pack request');
340
+ break;
341
+ }
342
+ case 0x10: {
343
+ // Server Links — ignore
344
+ this.logger.debug('Config: Server links received');
345
+ break;
346
+ }
347
+ case 0x02: {
348
+ // Disconnect
349
+ const reader = new types_js_1.BufferReader(packet.data);
350
+ const reason = reader.readString();
351
+ this.logger.error(`Disconnected during configuration: ${reason}`);
352
+ clearTimeout(timeout);
353
+ this.connection.off('packet', configHandler);
354
+ reject(new Error(`Disconnected during configuration: ${reason}`));
355
+ break;
356
+ }
357
+ default: {
358
+ this.logger.debug(`Config: Unknown packet 0x${packet.id.toString(16)} (${packet.data.length} bytes)`);
359
+ break;
360
+ }
361
+ }
362
+ };
363
+ this.connection.on('packet', configHandler);
364
+ });
365
+ }
366
+ // ─── Play State ─────────────────────────────────────
367
+ setupPlayStateHandlers() {
368
+ this.connection.on('packet', (packet) => {
369
+ this.emit('rawPacket', packet);
370
+ this.handlePlayPacket(packet);
371
+ // Call registered packet handlers
372
+ const handlers = this.packetHandlers.get(packet.id);
373
+ if (handlers) {
374
+ for (const handler of handlers) {
375
+ try {
376
+ handler(packet.data);
377
+ }
378
+ catch (err) {
379
+ this.logger.error(`Packet handler error for 0x${packet.id.toString(16)}:`, err);
380
+ }
381
+ }
382
+ }
383
+ });
384
+ }
385
+ handlePlayPacket(packet) {
386
+ switch (packet.id) {
387
+ case play_js_1.PlayClientboundPackets.KEEP_ALIVE: {
388
+ const { keepAliveId } = (0, play_js_1.parseKeepAlive)(packet.data);
389
+ this.connection.sendPacket(play_js_1.PlayServerboundPackets.KEEP_ALIVE, (0, play_js_1.buildKeepAlivePacket)(keepAliveId));
390
+ break;
391
+ }
392
+ case play_js_1.PlayClientboundPackets.LOGIN: {
393
+ try {
394
+ const login = (0, play_js_1.parseLoginPlay)(packet.data);
395
+ this._entityId = login.entityId;
396
+ this._gameMode = login.gameMode;
397
+ this.entity.id = login.entityId;
398
+ this.world.dimension = login.dimensionName;
399
+ this.world.seaLevel = login.seaLevel;
400
+ this.logger.info(`Spawned in ${login.dimensionName} (Entity ID: ${login.entityId})`);
401
+ this.emit('spawn');
402
+ }
403
+ catch (err) {
404
+ this.logger.error('Failed to parse Login (Play):', err);
405
+ }
406
+ break;
407
+ }
408
+ case play_js_1.PlayClientboundPackets.PLAYER_POSITION: {
409
+ try {
410
+ const pos = (0, play_js_1.parsePlayerPosition)(packet.data);
411
+ // Apply relative/absolute position based on flags
412
+ const flags = pos.flags;
413
+ const x = (flags & 0x01) ? this.entity.position.x + pos.x : pos.x;
414
+ const y = (flags & 0x02) ? this.entity.position.y + pos.y : pos.y;
415
+ const z = (flags & 0x04) ? this.entity.position.z + pos.z : pos.z;
416
+ this.entity.position = new vec3_js_1.Vec3(x, y, z);
417
+ this.entity.yaw = pos.yaw;
418
+ this.entity.pitch = pos.pitch;
419
+ // Must confirm teleportation
420
+ this.connection.sendPacket(play_js_1.PlayServerboundPackets.CONFIRM_TELEPORTATION, (0, play_js_1.buildConfirmTeleportationPacket)(pos.teleportId));
421
+ this.emit('position', this.entity.position);
422
+ }
423
+ catch (err) {
424
+ this.logger.error('Failed to parse Player Position:', err);
425
+ }
426
+ break;
427
+ }
428
+ case play_js_1.PlayClientboundPackets.SET_HEALTH: {
429
+ const { health, food, saturation } = (0, play_js_1.parseSetHealth)(packet.data);
430
+ this._health = health;
431
+ this._food = food;
432
+ this._saturation = saturation;
433
+ this.emit('health', health, food, saturation);
434
+ if (health <= 0) {
435
+ this._isAlive = false;
436
+ this.emit('death');
437
+ }
438
+ else {
439
+ this._isAlive = true;
440
+ }
441
+ break;
442
+ }
443
+ case play_js_1.PlayClientboundPackets.BLOCK_UPDATE: {
444
+ try {
445
+ const update = (0, play_js_1.parseBlockUpdate)(packet.data);
446
+ this.world.setBlock(update.x, update.y, update.z, update.blockId);
447
+ this.emit('blockUpdate', update.x, update.y, update.z, update.blockId);
448
+ }
449
+ catch (err) {
450
+ this.logger.error('Failed to parse block update:', err);
451
+ }
452
+ break;
453
+ }
454
+ case play_js_1.PlayClientboundPackets.SPAWN_ENTITY: {
455
+ try {
456
+ const spawn = (0, play_js_1.parseSpawnEntity)(packet.data);
457
+ const entity = new entity_js_1.Entity(spawn.entityId, spawn.entityUUID, spawn.type, new vec3_js_1.Vec3(spawn.x, spawn.y, spawn.z));
458
+ entity.yaw = spawn.yaw;
459
+ entity.pitch = spawn.pitch;
460
+ this.entities.add(entity);
461
+ this.emit('entitySpawn', entity);
462
+ }
463
+ catch (err) {
464
+ this.logger.error('Failed to parse entity spawn:', err);
465
+ }
466
+ break;
467
+ }
468
+ case play_js_1.PlayClientboundPackets.REMOVE_ENTITIES: {
469
+ try {
470
+ const reader = new types_js_1.BufferReader(packet.data);
471
+ const count = reader.readVarInt();
472
+ for (let i = 0; i < count; i++) {
473
+ const entityId = reader.readVarInt();
474
+ this.entities.remove(entityId);
475
+ this.emit('entityRemove', entityId);
476
+ }
477
+ }
478
+ catch (err) {
479
+ this.logger.error('Failed to parse entity removal:', err);
480
+ }
481
+ break;
482
+ }
483
+ case play_js_1.PlayClientboundPackets.DISCONNECT: {
484
+ const { reason } = (0, play_js_1.parseDisconnectPlay)(packet.data);
485
+ this.logger.warn(`Kicked: ${reason}`);
486
+ this.emit('kicked', reason);
487
+ break;
488
+ }
489
+ case play_js_1.PlayClientboundPackets.PLAYER_ABILITIES: {
490
+ try {
491
+ const abilities = (0, play_js_1.parsePlayerAbilities)(packet.data);
492
+ this.logger.debug(`Abilities: flags=${abilities.flags} fly=${abilities.flyingSpeed} walk=${abilities.walkingSpeed}`);
493
+ }
494
+ catch (err) {
495
+ this.logger.error('Failed to parse abilities:', err);
496
+ }
497
+ break;
498
+ }
499
+ }
500
+ }
501
+ // ─── Packet API ─────────────────────────────────────
502
+ /**
503
+ * Register a handler for a specific play-state packet ID.
504
+ * Used by plugins to listen for specific packets.
505
+ */
506
+ onPacket(packetId, handler) {
507
+ const handlers = this.packetHandlers.get(packetId) ?? [];
508
+ handlers.push(handler);
509
+ this.packetHandlers.set(packetId, handlers);
510
+ }
511
+ /**
512
+ * Send a raw packet to the server.
513
+ */
514
+ sendPacket(packetId, data) {
515
+ this.connection.sendPacket(packetId, data);
516
+ }
517
+ // ─── High-Level API ─────────────────────────────────
518
+ /**
519
+ * Send a chat message.
520
+ */
521
+ chat(message) {
522
+ const chatPlugin = this.plugins.get('chat');
523
+ if (chatPlugin) {
524
+ chatPlugin.chat(message);
525
+ }
526
+ }
527
+ /**
528
+ * Attack an entity.
529
+ */
530
+ attack(entity) {
531
+ const combatPlugin = this.plugins.get('combat');
532
+ if (combatPlugin) {
533
+ combatPlugin.attack(entity);
534
+ }
535
+ }
536
+ /**
537
+ * Set the bot's position (sends position packet to server).
538
+ */
539
+ setPosition(x, y, z, onGround = true) {
540
+ this.entity.position = new vec3_js_1.Vec3(x, y, z);
541
+ this.entity.onGround = onGround;
542
+ this.connection.sendPacket(play_js_1.PlayServerboundPackets.SET_PLAYER_POSITION, (0, play_js_1.buildSetPlayerPositionPacket)(x, y, z, onGround));
543
+ }
544
+ /**
545
+ * Set position and rotation.
546
+ */
547
+ setPositionAndRotation(x, y, z, yaw, pitch, onGround = true) {
548
+ this.entity.position = new vec3_js_1.Vec3(x, y, z);
549
+ this.entity.yaw = yaw;
550
+ this.entity.pitch = pitch;
551
+ this.entity.onGround = onGround;
552
+ this.connection.sendPacket(play_js_1.PlayServerboundPackets.SET_PLAYER_POSITION_AND_ROTATION, (0, play_js_1.buildSetPlayerPositionAndRotationPacket)(x, y, z, yaw, pitch, onGround));
553
+ }
554
+ /**
555
+ * Look at a position.
556
+ */
557
+ lookAt(target) {
558
+ const delta = target.subtract(this.entity.position);
559
+ const distance = Math.sqrt(delta.x * delta.x + delta.z * delta.z);
560
+ const yaw = -Math.atan2(delta.x, delta.z) * (180 / Math.PI);
561
+ const pitch = -Math.atan2(delta.y, distance) * (180 / Math.PI);
562
+ this.entity.yaw = yaw;
563
+ this.entity.pitch = pitch;
564
+ this.connection.sendPacket(play_js_1.PlayServerboundPackets.SET_PLAYER_POSITION_AND_ROTATION, (0, play_js_1.buildSetPlayerPositionAndRotationPacket)(this.entity.position.x, this.entity.position.y, this.entity.position.z, yaw, pitch, this.entity.onGround));
565
+ }
566
+ /**
567
+ * Start digging a block.
568
+ */
569
+ dig(x, y, z, face = 1) {
570
+ // Start digging
571
+ this.connection.sendPacket(play_js_1.PlayServerboundPackets.PLAYER_ACTION, (0, play_js_1.buildPlayerActionPacket)(play_js_1.PlayerActionStatus.STARTED_DIGGING, x, y, z, face, 0));
572
+ // For creative mode, finish immediately
573
+ if (this._gameMode === 1) {
574
+ this.connection.sendPacket(play_js_1.PlayServerboundPackets.PLAYER_ACTION, (0, play_js_1.buildPlayerActionPacket)(play_js_1.PlayerActionStatus.FINISHED_DIGGING, x, y, z, face, 1));
575
+ }
576
+ }
577
+ /**
578
+ * Select a hotbar slot (0-8).
579
+ */
580
+ setHeldItem(slot) {
581
+ if (slot < 0 || slot > 8)
582
+ throw new Error('Slot must be 0-8');
583
+ this.connection.sendPacket(play_js_1.PlayServerboundPackets.SET_HELD_ITEM, (0, play_js_1.buildSetHeldItemPacket)(slot));
584
+ }
585
+ /**
586
+ * Disconnect from the server.
587
+ */
588
+ disconnect() {
589
+ this.plugins.destroyAll();
590
+ this.connection.disconnect();
591
+ this.logger.info('Disconnected');
592
+ }
593
+ }
594
+ exports.Bot = Bot;
595
+ // ─── Factory Function ───────────────────────────────────
596
+ /**
597
+ * Create and connect a bot.
598
+ *
599
+ * @example
600
+ * ```ts
601
+ * import { createBot } from 'mcbot';
602
+ *
603
+ * const bot = await createBot({
604
+ * host: 'localhost',
605
+ * port: 25565,
606
+ * username: 'Bot',
607
+ * auth: 'offline',
608
+ * });
609
+ *
610
+ * bot.on('chat', (message) => {
611
+ * console.log('Chat:', message);
612
+ * });
613
+ *
614
+ * bot.on('spawn', () => {
615
+ * bot.chat('Hello world!');
616
+ * });
617
+ * ```
618
+ */
619
+ async function createBot(options) {
620
+ const bot = new Bot(options);
621
+ await bot.connect();
622
+ return bot;
623
+ }
624
+ //# sourceMappingURL=bot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot.js","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}