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
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Entity representation in the Minecraft world.
3
+ */
4
+ import { Vec3 } from '../utils/vec3.js';
5
+ export declare enum EntityType {
6
+ PLAYER = "player",
7
+ MOB = "mob",
8
+ OBJECT = "object",
9
+ UNKNOWN = "unknown"
10
+ }
11
+ export interface EntityMetadata {
12
+ [key: number]: unknown;
13
+ }
14
+ export declare class Entity {
15
+ id: number;
16
+ uuid: string;
17
+ type: number;
18
+ entityType: EntityType;
19
+ position: Vec3;
20
+ velocity: Vec3;
21
+ yaw: number;
22
+ pitch: number;
23
+ headYaw: number;
24
+ onGround: boolean;
25
+ metadata: EntityMetadata;
26
+ name?: string;
27
+ constructor(id: number, uuid: string, type: number, position?: Vec3);
28
+ /**
29
+ * Distance to another entity.
30
+ */
31
+ distanceTo(other: Entity): number;
32
+ /**
33
+ * Distance to a position.
34
+ */
35
+ distanceToPosition(pos: Vec3): number;
36
+ }
37
+ /**
38
+ * Player entity with additional player-specific data.
39
+ */
40
+ export declare class PlayerEntity extends Entity {
41
+ username: string;
42
+ gameMode: number;
43
+ ping: number;
44
+ displayName?: string;
45
+ constructor(id: number, uuid: string, username: string, position?: Vec3);
46
+ }
47
+ /**
48
+ * Entity Manager — tracks all entities in the world.
49
+ */
50
+ export declare class EntityManager {
51
+ private entities;
52
+ private playersByUUID;
53
+ add(entity: Entity): void;
54
+ get(id: number): Entity | undefined;
55
+ getByUUID(uuid: string): Entity | undefined;
56
+ getPlayer(uuid: string): PlayerEntity | undefined;
57
+ remove(id: number): void;
58
+ removeMultiple(ids: number[]): void;
59
+ getAll(): Entity[];
60
+ getAllPlayers(): PlayerEntity[];
61
+ /**
62
+ * Get nearest entity to a position.
63
+ */
64
+ getNearestTo(pos: Vec3, filter?: (entity: Entity) => boolean): Entity | undefined;
65
+ /**
66
+ * Get all entities within a radius.
67
+ */
68
+ getEntitiesInRadius(pos: Vec3, radius: number, filter?: (entity: Entity) => boolean): Entity[];
69
+ clear(): void;
70
+ }
71
+ //# sourceMappingURL=entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/entity/entity.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,oBAAY,UAAU;IAClB,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,OAAO,YAAY;CACtB;AAED,MAAM,WAAW,cAAc;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,qBAAa,MAAM;IACR,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;gBAGjB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,IAAkB;IAehC;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIjC;;OAEG;IACH,kBAAkB,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM;CAGxC;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,MAAM;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;gBAEhB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,IAAkB;CAOvF;AAED;;GAEG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,aAAa,CAAmC;IAExD,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOzB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAInC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAO3C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIjD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAUxB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI;IAMnC,MAAM,IAAI,MAAM,EAAE;IAIlB,aAAa,IAAI,YAAY,EAAE;IAI/B;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,GAAG,SAAS;IAgBjF;;OAEG;IACH,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,EAAE;IAgB9F,KAAK,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ /**
3
+ * Entity representation in the Minecraft world.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.EntityManager = exports.PlayerEntity = exports.Entity = exports.EntityType = void 0;
7
+ const vec3_js_1 = require("../utils/vec3.js");
8
+ var EntityType;
9
+ (function (EntityType) {
10
+ EntityType["PLAYER"] = "player";
11
+ EntityType["MOB"] = "mob";
12
+ EntityType["OBJECT"] = "object";
13
+ EntityType["UNKNOWN"] = "unknown";
14
+ })(EntityType || (exports.EntityType = EntityType = {}));
15
+ class Entity {
16
+ id;
17
+ uuid;
18
+ type;
19
+ entityType;
20
+ position;
21
+ velocity;
22
+ yaw;
23
+ pitch;
24
+ headYaw;
25
+ onGround;
26
+ metadata;
27
+ name;
28
+ constructor(id, uuid, type, position = vec3_js_1.Vec3.zero()) {
29
+ this.id = id;
30
+ this.uuid = uuid;
31
+ this.type = type;
32
+ this.entityType = EntityType.UNKNOWN;
33
+ this.position = position;
34
+ this.velocity = vec3_js_1.Vec3.zero();
35
+ this.yaw = 0;
36
+ this.pitch = 0;
37
+ this.headYaw = 0;
38
+ this.onGround = true;
39
+ this.metadata = {};
40
+ }
41
+ /**
42
+ * Distance to another entity.
43
+ */
44
+ distanceTo(other) {
45
+ return this.position.distanceTo(other.position);
46
+ }
47
+ /**
48
+ * Distance to a position.
49
+ */
50
+ distanceToPosition(pos) {
51
+ return this.position.distanceTo(pos);
52
+ }
53
+ }
54
+ exports.Entity = Entity;
55
+ /**
56
+ * Player entity with additional player-specific data.
57
+ */
58
+ class PlayerEntity extends Entity {
59
+ username;
60
+ gameMode;
61
+ ping;
62
+ displayName;
63
+ constructor(id, uuid, username, position = vec3_js_1.Vec3.zero()) {
64
+ super(id, uuid, 0, position);
65
+ this.entityType = EntityType.PLAYER;
66
+ this.username = username;
67
+ this.gameMode = 0;
68
+ this.ping = 0;
69
+ }
70
+ }
71
+ exports.PlayerEntity = PlayerEntity;
72
+ /**
73
+ * Entity Manager — tracks all entities in the world.
74
+ */
75
+ class EntityManager {
76
+ entities = new Map();
77
+ playersByUUID = new Map();
78
+ add(entity) {
79
+ this.entities.set(entity.id, entity);
80
+ if (entity instanceof PlayerEntity) {
81
+ this.playersByUUID.set(entity.uuid, entity);
82
+ }
83
+ }
84
+ get(id) {
85
+ return this.entities.get(id);
86
+ }
87
+ getByUUID(uuid) {
88
+ for (const entity of this.entities.values()) {
89
+ if (entity.uuid === uuid)
90
+ return entity;
91
+ }
92
+ return undefined;
93
+ }
94
+ getPlayer(uuid) {
95
+ return this.playersByUUID.get(uuid);
96
+ }
97
+ remove(id) {
98
+ const entity = this.entities.get(id);
99
+ if (entity) {
100
+ if (entity instanceof PlayerEntity) {
101
+ this.playersByUUID.delete(entity.uuid);
102
+ }
103
+ this.entities.delete(id);
104
+ }
105
+ }
106
+ removeMultiple(ids) {
107
+ for (const id of ids) {
108
+ this.remove(id);
109
+ }
110
+ }
111
+ getAll() {
112
+ return Array.from(this.entities.values());
113
+ }
114
+ getAllPlayers() {
115
+ return Array.from(this.playersByUUID.values());
116
+ }
117
+ /**
118
+ * Get nearest entity to a position.
119
+ */
120
+ getNearestTo(pos, filter) {
121
+ let nearest;
122
+ let minDist = Infinity;
123
+ for (const entity of this.entities.values()) {
124
+ if (filter && !filter(entity))
125
+ continue;
126
+ const dist = entity.position.distanceTo(pos);
127
+ if (dist < minDist) {
128
+ minDist = dist;
129
+ nearest = entity;
130
+ }
131
+ }
132
+ return nearest;
133
+ }
134
+ /**
135
+ * Get all entities within a radius.
136
+ */
137
+ getEntitiesInRadius(pos, radius, filter) {
138
+ const result = [];
139
+ const radiusSq = radius * radius;
140
+ for (const entity of this.entities.values()) {
141
+ if (filter && !filter(entity))
142
+ continue;
143
+ const diff = entity.position.subtract(pos);
144
+ const distSq = diff.x * diff.x + diff.y * diff.y + diff.z * diff.z;
145
+ if (distSq <= radiusSq) {
146
+ result.push(entity);
147
+ }
148
+ }
149
+ return result;
150
+ }
151
+ clear() {
152
+ this.entities.clear();
153
+ this.playersByUUID.clear();
154
+ }
155
+ }
156
+ exports.EntityManager = EntityManager;
157
+ //# sourceMappingURL=entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/entity/entity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * MCBot — A Mineflayer alternative built from scratch in TypeScript.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * import { createBot } from 'mcbot';
7
+ *
8
+ * const bot = await createBot({
9
+ * host: 'localhost',
10
+ * port: 25565,
11
+ * username: 'MyBot',
12
+ * auth: 'offline',
13
+ * });
14
+ *
15
+ * bot.on('spawn', () => {
16
+ * bot.chat('Hello from MCBot!');
17
+ * });
18
+ * ```
19
+ */
20
+ export { Bot, createBot, type BotOptions, type BotEvents } from './bot.js';
21
+ export { Vec3 } from './utils/vec3.js';
22
+ export { Logger, LogLevel } from './utils/logger.js';
23
+ export { TypedEventEmitter } from './utils/events.js';
24
+ export { Connection, type ConnectionOptions } from './protocol/connection.js';
25
+ export { BufferReader, BufferWriter } from './protocol/types.js';
26
+ export { ProtocolState, PacketDirection, PacketRegistry, type RawPacket, type PacketDefinition, } from './protocol/packet.js';
27
+ export { PROTOCOL_VERSION } from './protocol/states/handshake.js';
28
+ export { World } from './world/world.js';
29
+ export { ChunkColumn, ChunkSection, type Block } from './world/block.js';
30
+ export { Entity, PlayerEntity, EntityManager, EntityType } from './entity/entity.js';
31
+ export { PluginManager, type Plugin } from './plugins/plugin-manager.js';
32
+ export { ChatPlugin } from './plugins/built-in/chat.js';
33
+ export { CombatPlugin } from './plugins/built-in/combat.js';
34
+ export { createOfflineProfile, offlineUUID } from './auth/offline.js';
35
+ export { authenticateMicrosoft, joinServer } from './auth/microsoft.js';
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAG3E,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EACH,aAAa,EACb,eAAe,EACf,cAAc,EACd,KAAK,SAAS,EACd,KAAK,gBAAgB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAGlE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrF,OAAO,EAAE,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAG5D,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /**
3
+ * MCBot — A Mineflayer alternative built from scratch in TypeScript.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * import { createBot } from 'mcbot';
8
+ *
9
+ * const bot = await createBot({
10
+ * host: 'localhost',
11
+ * port: 25565,
12
+ * username: 'MyBot',
13
+ * auth: 'offline',
14
+ * });
15
+ *
16
+ * bot.on('spawn', () => {
17
+ * bot.chat('Hello from MCBot!');
18
+ * });
19
+ * ```
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.joinServer = exports.authenticateMicrosoft = exports.offlineUUID = exports.createOfflineProfile = exports.CombatPlugin = exports.ChatPlugin = exports.PluginManager = exports.EntityType = exports.EntityManager = exports.PlayerEntity = exports.Entity = exports.ChunkSection = exports.ChunkColumn = exports.World = exports.PROTOCOL_VERSION = exports.PacketRegistry = exports.PacketDirection = exports.ProtocolState = exports.BufferWriter = exports.BufferReader = exports.Connection = exports.TypedEventEmitter = exports.LogLevel = exports.Logger = exports.Vec3 = exports.createBot = exports.Bot = void 0;
23
+ // Main Bot
24
+ var bot_js_1 = require("./bot.js");
25
+ Object.defineProperty(exports, "Bot", { enumerable: true, get: function () { return bot_js_1.Bot; } });
26
+ Object.defineProperty(exports, "createBot", { enumerable: true, get: function () { return bot_js_1.createBot; } });
27
+ // Utils
28
+ var vec3_js_1 = require("./utils/vec3.js");
29
+ Object.defineProperty(exports, "Vec3", { enumerable: true, get: function () { return vec3_js_1.Vec3; } });
30
+ var logger_js_1 = require("./utils/logger.js");
31
+ Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return logger_js_1.Logger; } });
32
+ Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return logger_js_1.LogLevel; } });
33
+ var events_js_1 = require("./utils/events.js");
34
+ Object.defineProperty(exports, "TypedEventEmitter", { enumerable: true, get: function () { return events_js_1.TypedEventEmitter; } });
35
+ // Protocol
36
+ var connection_js_1 = require("./protocol/connection.js");
37
+ Object.defineProperty(exports, "Connection", { enumerable: true, get: function () { return connection_js_1.Connection; } });
38
+ var types_js_1 = require("./protocol/types.js");
39
+ Object.defineProperty(exports, "BufferReader", { enumerable: true, get: function () { return types_js_1.BufferReader; } });
40
+ Object.defineProperty(exports, "BufferWriter", { enumerable: true, get: function () { return types_js_1.BufferWriter; } });
41
+ var packet_js_1 = require("./protocol/packet.js");
42
+ Object.defineProperty(exports, "ProtocolState", { enumerable: true, get: function () { return packet_js_1.ProtocolState; } });
43
+ Object.defineProperty(exports, "PacketDirection", { enumerable: true, get: function () { return packet_js_1.PacketDirection; } });
44
+ Object.defineProperty(exports, "PacketRegistry", { enumerable: true, get: function () { return packet_js_1.PacketRegistry; } });
45
+ var handshake_js_1 = require("./protocol/states/handshake.js");
46
+ Object.defineProperty(exports, "PROTOCOL_VERSION", { enumerable: true, get: function () { return handshake_js_1.PROTOCOL_VERSION; } });
47
+ // World
48
+ var world_js_1 = require("./world/world.js");
49
+ Object.defineProperty(exports, "World", { enumerable: true, get: function () { return world_js_1.World; } });
50
+ var block_js_1 = require("./world/block.js");
51
+ Object.defineProperty(exports, "ChunkColumn", { enumerable: true, get: function () { return block_js_1.ChunkColumn; } });
52
+ Object.defineProperty(exports, "ChunkSection", { enumerable: true, get: function () { return block_js_1.ChunkSection; } });
53
+ // Entity
54
+ var entity_js_1 = require("./entity/entity.js");
55
+ Object.defineProperty(exports, "Entity", { enumerable: true, get: function () { return entity_js_1.Entity; } });
56
+ Object.defineProperty(exports, "PlayerEntity", { enumerable: true, get: function () { return entity_js_1.PlayerEntity; } });
57
+ Object.defineProperty(exports, "EntityManager", { enumerable: true, get: function () { return entity_js_1.EntityManager; } });
58
+ Object.defineProperty(exports, "EntityType", { enumerable: true, get: function () { return entity_js_1.EntityType; } });
59
+ // Plugins
60
+ var plugin_manager_js_1 = require("./plugins/plugin-manager.js");
61
+ Object.defineProperty(exports, "PluginManager", { enumerable: true, get: function () { return plugin_manager_js_1.PluginManager; } });
62
+ var chat_js_1 = require("./plugins/built-in/chat.js");
63
+ Object.defineProperty(exports, "ChatPlugin", { enumerable: true, get: function () { return chat_js_1.ChatPlugin; } });
64
+ var combat_js_1 = require("./plugins/built-in/combat.js");
65
+ Object.defineProperty(exports, "CombatPlugin", { enumerable: true, get: function () { return combat_js_1.CombatPlugin; } });
66
+ // Auth
67
+ var offline_js_1 = require("./auth/offline.js");
68
+ Object.defineProperty(exports, "createOfflineProfile", { enumerable: true, get: function () { return offline_js_1.createOfflineProfile; } });
69
+ Object.defineProperty(exports, "offlineUUID", { enumerable: true, get: function () { return offline_js_1.offlineUUID; } });
70
+ var microsoft_js_1 = require("./auth/microsoft.js");
71
+ Object.defineProperty(exports, "authenticateMicrosoft", { enumerable: true, get: function () { return microsoft_js_1.authenticateMicrosoft; } });
72
+ Object.defineProperty(exports, "joinServer", { enumerable: true, get: function () { return microsoft_js_1.joinServer; } });
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;AAEH,WAAW;AACX,mCAA2E;AAAlE,6FAAA,GAAG,OAAA;AAAE,mGAAA,SAAS,OAAA;AAEvB,QAAQ;AACR,2CAAuC;AAA9B,+FAAA,IAAI,OAAA;AACb,+CAAqD;AAA5C,mGAAA,MAAM,OAAA;AAAE,qGAAA,QAAQ,OAAA;AACzB,+CAAsD;AAA7C,8GAAA,iBAAiB,OAAA;AAE1B,WAAW;AACX,0DAA8E;AAArE,2GAAA,UAAU,OAAA;AACnB,gDAAiE;AAAxD,wGAAA,YAAY,OAAA;AAAE,wGAAA,YAAY,OAAA;AACnC,kDAM8B;AAL1B,0GAAA,aAAa,OAAA;AACb,4GAAA,eAAe,OAAA;AACf,2GAAA,cAAc,OAAA;AAIlB,+DAAkE;AAAzD,gHAAA,gBAAgB,OAAA;AAEzB,QAAQ;AACR,6CAAyC;AAAhC,iGAAA,KAAK,OAAA;AACd,6CAAyE;AAAhE,uGAAA,WAAW,OAAA;AAAE,wGAAA,YAAY,OAAA;AAElC,SAAS;AACT,gDAAqF;AAA5E,mGAAA,MAAM,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,0GAAA,aAAa,OAAA;AAAE,uGAAA,UAAU,OAAA;AAExD,UAAU;AACV,iEAAyE;AAAhE,kHAAA,aAAa,OAAA;AACtB,sDAAwD;AAA/C,qGAAA,UAAU,OAAA;AACnB,0DAA4D;AAAnD,yGAAA,YAAY,OAAA;AAErB,OAAO;AACP,gDAAsE;AAA7D,kHAAA,oBAAoB,OAAA;AAAE,yGAAA,WAAW,OAAA;AAC1C,oDAAwE;AAA/D,qHAAA,qBAAqB,OAAA;AAAE,0GAAA,UAAU,OAAA"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Chat Plugin — handles chat message sending and receiving.
3
+ */
4
+ import type { BotAPI } from '../../types.js';
5
+ import type { Plugin } from '../plugin-manager.js';
6
+ export declare class ChatPlugin implements Plugin {
7
+ name: string;
8
+ private bot;
9
+ initialize(bot: BotAPI): void;
10
+ /**
11
+ * Send a chat message.
12
+ */
13
+ chat(message: string): void;
14
+ /**
15
+ * Extract plain text from a Minecraft JSON chat component.
16
+ */
17
+ private extractText;
18
+ }
19
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../src/plugins/built-in/chat.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAQnD,qBAAa,UAAW,YAAW,MAAM;IACrC,IAAI,SAAU;IACd,OAAO,CAAC,GAAG,CAAU;IAErB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAoB7B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO3B;;OAEG;IACH,OAAO,CAAC,WAAW;CAwBtB"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * Chat Plugin — handles chat message sending and receiving.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ChatPlugin = void 0;
7
+ const play_js_1 = require("../../protocol/states/play.js");
8
+ class ChatPlugin {
9
+ name = 'chat';
10
+ bot;
11
+ initialize(bot) {
12
+ this.bot = bot;
13
+ // Listen for system chat messages
14
+ bot.onPacket(play_js_1.PlayClientboundPackets.SYSTEM_CHAT, (data) => {
15
+ const packet = (0, play_js_1.parseSystemChat)(data);
16
+ // Try to parse JSON chat component
17
+ let message;
18
+ try {
19
+ const parsed = JSON.parse(packet.content);
20
+ message = this.extractText(parsed);
21
+ }
22
+ catch {
23
+ message = packet.content;
24
+ }
25
+ bot.emit('chat', message, packet.isOverlay);
26
+ });
27
+ }
28
+ /**
29
+ * Send a chat message.
30
+ */
31
+ chat(message) {
32
+ this.bot.sendPacket(play_js_1.PlayServerboundPackets.CHAT_MESSAGE, (0, play_js_1.buildChatMessagePacket)(message));
33
+ }
34
+ /**
35
+ * Extract plain text from a Minecraft JSON chat component.
36
+ */
37
+ extractText(component) {
38
+ if (typeof component === 'string')
39
+ return component;
40
+ if (typeof component !== 'object' || component === null)
41
+ return '';
42
+ const obj = component;
43
+ let text = '';
44
+ if (typeof obj.text === 'string')
45
+ text += obj.text;
46
+ if (typeof obj.translate === 'string')
47
+ text += obj.translate;
48
+ if (Array.isArray(obj.extra)) {
49
+ for (const extra of obj.extra) {
50
+ text += this.extractText(extra);
51
+ }
52
+ }
53
+ if (Array.isArray(obj.with)) {
54
+ for (const w of obj.with) {
55
+ text += this.extractText(w);
56
+ }
57
+ }
58
+ return text;
59
+ }
60
+ }
61
+ exports.ChatPlugin = ChatPlugin;
62
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/plugins/built-in/chat.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAIH,2DAKuC;AAEvC,MAAa,UAAU;IACnB,IAAI,GAAG,MAAM,CAAC;IACN,GAAG,CAAU;IAErB,UAAU,CAAC,GAAW;QAClB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QAEf,kCAAkC;QAClC,GAAG,CAAC,QAAQ,CAAC,gCAAsB,CAAC,WAAW,EAAE,CAAC,IAAY,EAAE,EAAE;YAC9D,MAAM,MAAM,GAAG,IAAA,yBAAe,EAAC,IAAI,CAAC,CAAC;YAErC,mCAAmC;YACnC,IAAI,OAAe,CAAC;YACpB,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC1C,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACL,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC7B,CAAC;YAED,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAe;QAChB,IAAI,CAAC,GAAG,CAAC,UAAU,CACf,gCAAsB,CAAC,YAAY,EACnC,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAClC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,SAAkB;QAClC,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACpD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAEnE,MAAM,GAAG,GAAG,SAAoC,CAAC;QACjD,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC;QACnD,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ;YAAE,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC;QAE7D,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBAC5B,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACvB,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AA7DD,gCA6DC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Combat Plugin — handles attacking entities.
3
+ */
4
+ import type { BotAPI } from '../../types.js';
5
+ import type { Plugin } from '../plugin-manager.js';
6
+ import type { Entity } from '../../entity/entity.js';
7
+ export declare class CombatPlugin implements Plugin {
8
+ name: string;
9
+ private bot;
10
+ initialize(bot: BotAPI): void;
11
+ /**
12
+ * Attack an entity.
13
+ */
14
+ attack(entity: Entity): void;
15
+ /**
16
+ * Use item in hand.
17
+ */
18
+ useItem(hand?: number): void;
19
+ }
20
+ //# sourceMappingURL=combat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combat.d.ts","sourceRoot":"","sources":["../../../src/plugins/built-in/combat.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAOrD,qBAAa,YAAa,YAAW,MAAM;IACvC,IAAI,SAAY;IAChB,OAAO,CAAC,GAAG,CAAU;IAErB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAgB5B;;OAEG;IACH,OAAO,CAAC,IAAI,GAAE,MAAU,GAAG,IAAI;CASlC"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ /**
3
+ * Combat Plugin — handles attacking entities.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CombatPlugin = void 0;
7
+ const play_js_1 = require("../../protocol/states/play.js");
8
+ const types_js_1 = require("../../protocol/types.js");
9
+ class CombatPlugin {
10
+ name = 'combat';
11
+ bot;
12
+ initialize(bot) {
13
+ this.bot = bot;
14
+ }
15
+ /**
16
+ * Attack an entity.
17
+ */
18
+ attack(entity) {
19
+ // Send Interact packet (attack)
20
+ const writer = new types_js_1.BufferWriter();
21
+ writer.writeVarInt(entity.id); // Entity ID
22
+ writer.writeVarInt(1); // Type: Attack
23
+ writer.writeBool(false); // Sneaking
24
+ this.bot.sendPacket(play_js_1.PlayServerboundPackets.INTERACT, writer.toBuffer());
25
+ // Swing arm
26
+ this.bot.sendPacket(play_js_1.PlayServerboundPackets.SWING_ARM, (0, play_js_1.buildSwingArmPacket)(0) // Main hand
27
+ );
28
+ }
29
+ /**
30
+ * Use item in hand.
31
+ */
32
+ useItem(hand = 0) {
33
+ const writer = new types_js_1.BufferWriter();
34
+ writer.writeVarInt(hand);
35
+ writer.writeVarInt(0); // Sequence
36
+ writer.writeFloat(this.bot.entity.yaw);
37
+ writer.writeFloat(this.bot.entity.pitch);
38
+ this.bot.sendPacket(play_js_1.PlayServerboundPackets.USE_ITEM, writer.toBuffer());
39
+ }
40
+ }
41
+ exports.CombatPlugin = CombatPlugin;
42
+ //# sourceMappingURL=combat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combat.js","sourceRoot":"","sources":["../../../src/plugins/built-in/combat.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAKH,2DAGuC;AACvC,sDAAuD;AAEvD,MAAa,YAAY;IACrB,IAAI,GAAG,QAAQ,CAAC;IACR,GAAG,CAAU;IAErB,UAAU,CAAC,GAAW;QAClB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAc;QACjB,gCAAgC;QAChC,MAAM,MAAM,GAAG,IAAI,uBAAY,EAAE,CAAC;QAClC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAS,YAAY;QACnD,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAkB,eAAe;QACvD,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAgB,WAAW;QAEnD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,gCAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAExE,YAAY;QACZ,IAAI,CAAC,GAAG,CAAC,UAAU,CACf,gCAAsB,CAAC,SAAS,EAChC,IAAA,6BAAmB,EAAC,CAAC,CAAC,CAAC,YAAY;SACtC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,OAAe,CAAC;QACpB,MAAM,MAAM,GAAG,IAAI,uBAAY,EAAE,CAAC;QAClC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW;QAClC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEzC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,gCAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5E,CAAC;CACJ;AAvCD,oCAuCC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Plugin System — extensible architecture for bot functionality.
3
+ */
4
+ import type { BotAPI } from '../types.js';
5
+ export interface Plugin {
6
+ /** Unique plugin name */
7
+ name: string;
8
+ /** Initialize the plugin with the bot instance */
9
+ initialize(bot: BotAPI): void;
10
+ /** Clean up when plugin is unloaded */
11
+ destroy?(): void;
12
+ }
13
+ /**
14
+ * Plugin Manager — handles plugin registration and lifecycle.
15
+ */
16
+ export declare class PluginManager {
17
+ private plugins;
18
+ private bot;
19
+ setBotInstance(bot: BotAPI): void;
20
+ /**
21
+ * Register and initialize a plugin.
22
+ */
23
+ register(plugin: Plugin): void;
24
+ /**
25
+ * Initialize all registered plugins (called when bot is ready).
26
+ */
27
+ initializeAll(bot: BotAPI): void;
28
+ /**
29
+ * Unregister and destroy a plugin.
30
+ */
31
+ unregister(name: string): void;
32
+ /**
33
+ * Get a plugin by name.
34
+ */
35
+ get<T extends Plugin>(name: string): T | undefined;
36
+ /**
37
+ * Check if a plugin is registered.
38
+ */
39
+ has(name: string): boolean;
40
+ /**
41
+ * Get all registered plugin names.
42
+ */
43
+ getAll(): string[];
44
+ /**
45
+ * Destroy all plugins.
46
+ */
47
+ destroyAll(): void;
48
+ }
49
+ //# sourceMappingURL=plugin-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-manager.d.ts","sourceRoot":"","sources":["../../src/plugins/plugin-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,MAAM;IACnB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IAEb,kDAAkD;IAClD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B,uCAAuC;IACvC,OAAO,CAAC,IAAI,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,GAAG,CAAuB;IAElC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAW9B;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOhC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ9B;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAIlD;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,MAAM,IAAI,MAAM,EAAE;IAIlB;;OAEG;IACH,UAAU,IAAI,IAAI;CAMrB"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ /**
3
+ * Plugin System — extensible architecture for bot functionality.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PluginManager = void 0;
7
+ /**
8
+ * Plugin Manager — handles plugin registration and lifecycle.
9
+ */
10
+ class PluginManager {
11
+ plugins = new Map();
12
+ bot = null;
13
+ setBotInstance(bot) {
14
+ this.bot = bot;
15
+ }
16
+ /**
17
+ * Register and initialize a plugin.
18
+ */
19
+ register(plugin) {
20
+ if (this.plugins.has(plugin.name)) {
21
+ throw new Error(`Plugin "${plugin.name}" is already registered`);
22
+ }
23
+ if (this.bot) {
24
+ plugin.initialize(this.bot);
25
+ }
26
+ this.plugins.set(plugin.name, plugin);
27
+ }
28
+ /**
29
+ * Initialize all registered plugins (called when bot is ready).
30
+ */
31
+ initializeAll(bot) {
32
+ this.bot = bot;
33
+ for (const plugin of this.plugins.values()) {
34
+ plugin.initialize(bot);
35
+ }
36
+ }
37
+ /**
38
+ * Unregister and destroy a plugin.
39
+ */
40
+ unregister(name) {
41
+ const plugin = this.plugins.get(name);
42
+ if (plugin) {
43
+ plugin.destroy?.();
44
+ this.plugins.delete(name);
45
+ }
46
+ }
47
+ /**
48
+ * Get a plugin by name.
49
+ */
50
+ get(name) {
51
+ return this.plugins.get(name);
52
+ }
53
+ /**
54
+ * Check if a plugin is registered.
55
+ */
56
+ has(name) {
57
+ return this.plugins.has(name);
58
+ }
59
+ /**
60
+ * Get all registered plugin names.
61
+ */
62
+ getAll() {
63
+ return Array.from(this.plugins.keys());
64
+ }
65
+ /**
66
+ * Destroy all plugins.
67
+ */
68
+ destroyAll() {
69
+ for (const plugin of this.plugins.values()) {
70
+ plugin.destroy?.();
71
+ }
72
+ this.plugins.clear();
73
+ }
74
+ }
75
+ exports.PluginManager = PluginManager;
76
+ //# sourceMappingURL=plugin-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-manager.js","sourceRoot":"","sources":["../../src/plugins/plugin-manager.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAeH;;GAEG;AACH,MAAa,aAAa;IACd,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,GAAG,GAAkB,IAAI,CAAC;IAElC,cAAc,CAAC,GAAW;QACtB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,MAAc;QACnB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,yBAAyB,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,GAAW;QACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC;IAED;;OAEG;IACH,GAAG,CAAmB,IAAY;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAkB,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,MAAM;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,UAAU;QACN,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACJ;AAzED,sCAyEC"}