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.d.ts ADDED
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Bot — the main orchestrator class.
3
+ *
4
+ * This is the primary entry point for users. It coordinates:
5
+ * - TCP connection to the server
6
+ * - Authentication (offline or Microsoft)
7
+ * - Protocol state transitions (Handshake → Login → Configuration → Play)
8
+ * - Keep-alive responses
9
+ * - Entity and world state management
10
+ * - Plugin system
11
+ * - High-level API (chat, move, dig, attack)
12
+ */
13
+ import { TypedEventEmitter } from './utils/events.js';
14
+ import { LogLevel } from './utils/logger.js';
15
+ import { Vec3 } from './utils/vec3.js';
16
+ import { type RawPacket } from './protocol/packet.js';
17
+ import { World } from './world/world.js';
18
+ import { Entity, EntityManager } from './entity/entity.js';
19
+ import { PluginManager, type Plugin } from './plugins/plugin-manager.js';
20
+ export interface BotEvents {
21
+ /** Login complete, entering play state */
22
+ 'login': () => void;
23
+ /** Spawned in the world */
24
+ 'spawn': () => void;
25
+ /** Received a chat message */
26
+ 'chat': (message: string, isOverlay: boolean) => void;
27
+ /** Health updated */
28
+ 'health': (health: number, food: number, saturation: number) => void;
29
+ /** Bot died */
30
+ 'death': () => void;
31
+ /** Disconnected from server */
32
+ 'kicked': (reason: string) => void;
33
+ /** Position updated by server */
34
+ 'position': (position: Vec3) => void;
35
+ /** Entity spawned */
36
+ 'entitySpawn': (entity: Entity) => void;
37
+ /** Entity removed */
38
+ 'entityRemove': (entityId: number) => void;
39
+ /** Block updated */
40
+ 'blockUpdate': (x: number, y: number, z: number, stateId: number) => void;
41
+ /** Raw packet received (for advanced use) */
42
+ 'rawPacket': (packet: RawPacket) => void;
43
+ /** Connection error */
44
+ 'error': (error: Error) => void;
45
+ /** Connected to server */
46
+ 'connect': () => void;
47
+ /** Disconnected */
48
+ 'end': () => void;
49
+ }
50
+ export interface BotOptions {
51
+ host: string;
52
+ port?: number;
53
+ username: string;
54
+ /** 'offline' for cracked servers, 'microsoft' for online mode */
55
+ auth?: 'offline' | 'microsoft';
56
+ /** Protocol version (default: latest supported) */
57
+ version?: number;
58
+ /** View distance to request */
59
+ viewDistance?: number;
60
+ /** Log level */
61
+ logLevel?: LogLevel;
62
+ /** Plugins to load */
63
+ plugins?: Plugin[];
64
+ }
65
+ export declare class Bot extends TypedEventEmitter<BotEvents> {
66
+ private connection;
67
+ private logger;
68
+ private _username;
69
+ private _uuid;
70
+ private _entityId;
71
+ private _health;
72
+ private _food;
73
+ private _saturation;
74
+ private _gameMode;
75
+ private _isAlive;
76
+ private authMode;
77
+ private accessToken?;
78
+ readonly world: World;
79
+ readonly entities: EntityManager;
80
+ readonly plugins: PluginManager;
81
+ readonly entity: Entity;
82
+ private readonly options;
83
+ private packetHandlers;
84
+ constructor(options: BotOptions);
85
+ get username(): string;
86
+ get uuid(): string;
87
+ get entityId(): number;
88
+ get health(): number;
89
+ get food(): number;
90
+ get saturation(): number;
91
+ get gameMode(): number;
92
+ get isAlive(): boolean;
93
+ get position(): Vec3;
94
+ /**
95
+ * Connect to the server and begin the login process.
96
+ */
97
+ connect(): Promise<void>;
98
+ private performLogin;
99
+ private handleLoginSequence;
100
+ private handleLoginPacket;
101
+ private handleEncryptionRequest;
102
+ /**
103
+ * Handle Configuration state packets after Login Acknowledged.
104
+ * In 1.20.2+, the server sends registry data, feature flags, etc. before Play.
105
+ * When the server sends Finish Configuration (0x03), we transition to Play.
106
+ *
107
+ * 1.21.4 Configuration Clientbound Packet IDs:
108
+ * 0x00 = Cookie Request
109
+ * 0x01 = Plugin Message
110
+ * 0x02 = Disconnect
111
+ * 0x03 = Finish Configuration
112
+ * 0x04 = Keep Alive
113
+ * 0x05 = Ping
114
+ * 0x07 = Registry Data
115
+ * 0x09 = Add Resource Pack
116
+ * 0x0C = Feature Flags
117
+ * 0x0D = Update Tags
118
+ * 0x0E = Known Packs
119
+ * 0x10 = Server Links
120
+ */
121
+ private handleConfigurationState;
122
+ private setupPlayStateHandlers;
123
+ private handlePlayPacket;
124
+ /**
125
+ * Register a handler for a specific play-state packet ID.
126
+ * Used by plugins to listen for specific packets.
127
+ */
128
+ onPacket(packetId: number, handler: (data: Buffer) => void): void;
129
+ /**
130
+ * Send a raw packet to the server.
131
+ */
132
+ sendPacket(packetId: number, data: Buffer): void;
133
+ /**
134
+ * Send a chat message.
135
+ */
136
+ chat(message: string): void;
137
+ /**
138
+ * Attack an entity.
139
+ */
140
+ attack(entity: Entity): void;
141
+ /**
142
+ * Set the bot's position (sends position packet to server).
143
+ */
144
+ setPosition(x: number, y: number, z: number, onGround?: boolean): void;
145
+ /**
146
+ * Set position and rotation.
147
+ */
148
+ setPositionAndRotation(x: number, y: number, z: number, yaw: number, pitch: number, onGround?: boolean): void;
149
+ /**
150
+ * Look at a position.
151
+ */
152
+ lookAt(target: Vec3): void;
153
+ /**
154
+ * Start digging a block.
155
+ */
156
+ dig(x: number, y: number, z: number, face?: number): void;
157
+ /**
158
+ * Select a hotbar slot (0-8).
159
+ */
160
+ setHeldItem(slot: number): void;
161
+ /**
162
+ * Disconnect from the server.
163
+ */
164
+ disconnect(): void;
165
+ }
166
+ /**
167
+ * Create and connect a bot.
168
+ *
169
+ * @example
170
+ * ```ts
171
+ * import { createBot } from 'mcbot';
172
+ *
173
+ * const bot = await createBot({
174
+ * host: 'localhost',
175
+ * port: 25565,
176
+ * username: 'Bot',
177
+ * auth: 'offline',
178
+ * });
179
+ *
180
+ * bot.on('chat', (message) => {
181
+ * console.log('Chat:', message);
182
+ * });
183
+ *
184
+ * bot.on('spawn', () => {
185
+ * bot.chat('Hello world!');
186
+ * });
187
+ * ```
188
+ */
189
+ export declare function createBot(options: BotOptions): Promise<Bot>;
190
+ //# sourceMappingURL=bot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}