omegga 1.0.1 → 1.0.2

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.
@@ -0,0 +1,1311 @@
1
+ export interface BRColor {
2
+ r: number;
3
+ b: number;
4
+ g: number;
5
+ a: number;
6
+ }
7
+ export interface BRVector {
8
+ x: number;
9
+ y: number;
10
+ z: number;
11
+ }
12
+ export interface BRBanListEntry {
13
+ bannerId: string;
14
+ created: string;
15
+ expires: string;
16
+ reason: string;
17
+ }
18
+ export interface BRBanList {
19
+ banList: Record<string, BRBanListEntry>;
20
+ }
21
+ export interface BRRolePermission {
22
+ name: string;
23
+ state: "Allowed" | "Unchanged" | "Forbidden";
24
+ }
25
+ export interface BRRoleSetupEntry {
26
+ name: string;
27
+ permissions: BRRolePermission[];
28
+ color: BRColor;
29
+ bHasColor: boolean;
30
+ }
31
+ export interface BRRoleSetup {
32
+ roles: BRRoleSetupEntry[];
33
+ defaultRole: BRRoleSetupEntry;
34
+ ownerRoleColor: BRColor;
35
+ bOwnerRoleHasColor: boolean;
36
+ version: string;
37
+ }
38
+ export interface BRRoleAssignments {
39
+ savedPlayerRoles: Record<string, {
40
+ roles: string[];
41
+ }>;
42
+ }
43
+ export interface BRPlayerNameCache {
44
+ savedPlayerNames: Record<string, string>;
45
+ }
46
+ export declare type Preset<T extends string, D> = {
47
+ formatVersion?: "1";
48
+ presetVersion?: "1";
49
+ type?: T;
50
+ data?: D;
51
+ };
52
+ export declare type EnvironmentPreset = Preset<"Environment", {
53
+ groups?: {
54
+ Sky?: {
55
+ timeOfDay?: number;
56
+ timeChangeSpeed?: number;
57
+ sunAngle?: number;
58
+ sunScale?: number;
59
+ sunHorizonScaleMultiplier?: number;
60
+ sunlightColor?: BRColor;
61
+ skyIntensity?: number;
62
+ skyColor?: BRColor;
63
+ moonScale?: number;
64
+ moonlightIntensity?: number;
65
+ moonlightColor?: BRColor;
66
+ starsIntensity?: number;
67
+ starsColor?: BRColor;
68
+ auroraIntensity?: number;
69
+ weatherIntensity?: BRColor;
70
+ rainSnow?: number;
71
+ cloudCoverage?: number;
72
+ cloudSpeedMultiplier?: number;
73
+ precipitationParticleAmount?: number;
74
+ bCloseLightning?: boolean;
75
+ rainVolume?: number;
76
+ closeThunderVolume?: number;
77
+ distantThunderVolume?: number;
78
+ windVolume?: number;
79
+ clearFogDensity?: number;
80
+ cloudyFogDensity?: number;
81
+ clearFogHeightFalloff?: number;
82
+ cloudyFogHeightFalloff?: number;
83
+ fogColor?: BRColor;
84
+ };
85
+ GroundPlate?: {
86
+ variance?: number;
87
+ varianceBrickSize?: number;
88
+ groundColor?: BRColor;
89
+ groundAccentColor?: BRColor;
90
+ isVisible?: boolean;
91
+ bUseStudTexture?: boolean;
92
+ };
93
+ Water?: {
94
+ waterHeight?: number;
95
+ waterAbsorption?: BRVector;
96
+ waterScattering?: BRVector;
97
+ waterFogIntensity?: number;
98
+ waterFogAmbientColor?: BRColor;
99
+ waterFogAmbientScale?: number;
100
+ waterFogScatteringColor?: BRColor;
101
+ waterFogScatteringScale?: number;
102
+ };
103
+ Ambience?: {
104
+ selectedAmbienceTypeInt?: number;
105
+ ambienceVolume?: number;
106
+ reverbEffect?: string;
107
+ };
108
+ };
109
+ }>;
110
+ export interface IOmeggaOptions {
111
+ noauth?: boolean;
112
+ noplugin?: boolean;
113
+ noweb?: boolean;
114
+ debug?: boolean;
115
+ }
116
+ export interface IServerStatus {
117
+ serverName: string;
118
+ description: string;
119
+ bricks: number;
120
+ components: number;
121
+ time: number;
122
+ players: {
123
+ name: string;
124
+ ping: number;
125
+ time: number;
126
+ roles: string[];
127
+ address: string;
128
+ id: string;
129
+ }[];
130
+ }
131
+ export declare type IMinigameList = {
132
+ index: number;
133
+ name: string;
134
+ numMembers: number;
135
+ owner: {
136
+ name: string;
137
+ id: string;
138
+ };
139
+ }[];
140
+ export declare type IPlayerPositions = {
141
+ player: OmeggaPlayer;
142
+ pawn: string;
143
+ pos: number[];
144
+ isDead: boolean;
145
+ }[];
146
+ export declare type ILogMinigame = {
147
+ name: string;
148
+ ruleset: string;
149
+ members: OmeggaPlayer[];
150
+ teams: {
151
+ name: string;
152
+ team: string;
153
+ color: number[];
154
+ members: OmeggaPlayer[];
155
+ }[];
156
+ };
157
+ export interface BRSBytes extends Uint8Array {
158
+ brsOffset: number;
159
+ }
160
+ export declare type Modify<T, R> = Omit<T, keyof R> & R;
161
+ export declare type Bytes = Uint8Array | BRSBytes;
162
+ export declare type Uuid = string;
163
+ export declare type UnrealClass = string;
164
+ export declare type UnrealObject = string;
165
+ export declare type UnrealBoolean = boolean;
166
+ export declare type UnrealFloat = number;
167
+ export declare type UnrealColor = [
168
+ number,
169
+ number,
170
+ number,
171
+ number
172
+ ];
173
+ export declare type UnrealByte = number;
174
+ export declare type UnrealRotator = [
175
+ number,
176
+ number,
177
+ number
178
+ ];
179
+ export declare type UnrealType = UnrealClass | UnrealObject | UnrealBoolean | UnrealFloat | UnrealColor | UnrealByte | UnrealRotator;
180
+ export declare type UnrealTypeFromString<T> = T extends "Class" ? UnrealClass : T extends "Object" ? UnrealObject : T extends "Boolean" ? UnrealBoolean : T extends "Float" ? UnrealFloat : T extends "Color" ? UnrealColor : T extends "Byte" ? UnrealByte : T extends "Rotator" ? UnrealRotator : UnrealType;
181
+ export interface User {
182
+ id: Uuid;
183
+ name: string;
184
+ }
185
+ export interface Owner extends User {
186
+ bricks: number;
187
+ }
188
+ declare enum Direction {
189
+ XPositive = 0,
190
+ XNegative = 1,
191
+ YPositive = 2,
192
+ YNegative = 3,
193
+ ZPositive = 4,
194
+ ZNegative = 5
195
+ }
196
+ declare enum Rotation {
197
+ Deg0 = 0,
198
+ Deg90 = 1,
199
+ Deg180 = 2,
200
+ Deg270 = 3
201
+ }
202
+ export declare type ColorRgb = [
203
+ number,
204
+ number,
205
+ number
206
+ ];
207
+ export interface Collision {
208
+ player: boolean;
209
+ weapon: boolean;
210
+ interaction: boolean;
211
+ tool: boolean;
212
+ }
213
+ export interface AppliedComponent {
214
+ [property: string]: UnrealType;
215
+ }
216
+ export interface UnknownComponents {
217
+ [component_name: string]: {
218
+ version: number;
219
+ brick_indices?: number[];
220
+ properties: {
221
+ [property: string]: string;
222
+ };
223
+ };
224
+ }
225
+ export declare type KnownComponents = {
226
+ BCD_SpotLight: {
227
+ version: 1;
228
+ brick_indices?: number[];
229
+ properties: {
230
+ Rotation: "Rotator";
231
+ InnerConeAngle: "Float";
232
+ OuterConeAngle: "Float";
233
+ Brightness: "Float";
234
+ Radius: "Float";
235
+ Color: "Color";
236
+ bUseBrickColor: "Boolean";
237
+ bCastShadows: "Boolean";
238
+ };
239
+ };
240
+ BCD_PointLight: {
241
+ version: 1;
242
+ brick_indices?: number[];
243
+ properties: {
244
+ bMatchBrickShape: "Boolean";
245
+ Brightness: "Float";
246
+ Radius: "Float";
247
+ Color: "Color";
248
+ bUseBrickColor: "Boolean";
249
+ bCastShadows: "Boolean";
250
+ };
251
+ };
252
+ BCD_ItemSpawn: {
253
+ version: 1;
254
+ brick_indices?: number[];
255
+ properties: {
256
+ PickupClass: "Class";
257
+ bPickupEnabled: "Boolean";
258
+ bPickupRespawnOnMinigameReset: "Boolean";
259
+ PickupMinigameResetRespawnDelay: "Float";
260
+ bPickupAutoDisableOnPickup: "Boolean";
261
+ PickupRespawnTime: "Float";
262
+ PickupOffsetDirection: "Byte";
263
+ PickupOffsetDistance: "Float";
264
+ PickupRotation: "Rotator";
265
+ PickupScale: "Float";
266
+ bPickupAnimationEnabled: "Boolean";
267
+ PickupAnimationAxis: "Byte";
268
+ bPickupAnimationAxisLocal: "Boolean";
269
+ PickupSpinSpeed: "Float";
270
+ PickupBobSpeed: "Float";
271
+ PickupBobHeight: "Float";
272
+ PickupAnimationPhase: "Float";
273
+ };
274
+ };
275
+ BCD_Interact: {
276
+ version: 1;
277
+ brick_indices?: number[];
278
+ properties: {
279
+ bPlayInteractSound: "Boolean";
280
+ };
281
+ };
282
+ BCD_AudioEmitter: {
283
+ version: 1;
284
+ brick_indices?: number[];
285
+ properties: {
286
+ AudioDescriptor: "Object";
287
+ VolumeMultiplier: "Float";
288
+ PitchMultiplier: "Float";
289
+ InnerRadius: "Float";
290
+ MaxDistance: "Float";
291
+ bSpatialization: "Boolean";
292
+ };
293
+ };
294
+ };
295
+ export interface DefinedComponents extends UnknownComponents, Partial<KnownComponents> {
296
+ }
297
+ export declare type Components<C extends DefinedComponents> = {
298
+ [T in keyof C]: {
299
+ [V in keyof C[T]["properties"]]: UnrealTypeFromString<C[T]["properties"][V]>;
300
+ };
301
+ } & {
302
+ [component_name: string]: AppliedComponent;
303
+ };
304
+ export declare type Vector = [
305
+ number,
306
+ number,
307
+ number
308
+ ];
309
+ export interface BrickV1 {
310
+ asset_name_index: number;
311
+ size: Vector;
312
+ position: Vector;
313
+ direction: Direction;
314
+ rotation: Rotation;
315
+ collision: boolean;
316
+ visibility: boolean;
317
+ color: UnrealColor | number;
318
+ }
319
+ export interface BrickV2 extends BrickV1 {
320
+ material_index: number;
321
+ }
322
+ export interface BrickV3 extends BrickV2 {
323
+ owner_index: number;
324
+ }
325
+ export interface BrickV8 extends BrickV3 {
326
+ components: Components<DefinedComponents>;
327
+ }
328
+ export declare type BrickV9 = Modify<BrickV8, {
329
+ physical_index: number;
330
+ material_intensity: number;
331
+ color: ColorRgb | number;
332
+ }>;
333
+ export declare type BrickV10 = Modify<BrickV9, {
334
+ collision: Collision;
335
+ }>;
336
+ export interface BrsV1 {
337
+ version: 1;
338
+ map: string;
339
+ author: User;
340
+ description: string;
341
+ brick_count: number;
342
+ mods: string[];
343
+ brick_assets: string[];
344
+ colors: UnrealColor[];
345
+ bricks: BrickV1[];
346
+ }
347
+ export declare type BrsV2 = Modify<BrsV1, {
348
+ version: 2;
349
+ materials: string[];
350
+ bricks: BrickV2[];
351
+ }>;
352
+ export declare type BrsV3 = Modify<BrsV2, {
353
+ version: 3;
354
+ brick_owners: User[];
355
+ bricks: BrickV3[];
356
+ }>;
357
+ export declare type BrsV4 = Modify<BrsV3, {
358
+ version: 4;
359
+ save_time: Uint8Array;
360
+ }>;
361
+ export declare type BrsV8 = Modify<BrsV4, {
362
+ version: 8;
363
+ host: User;
364
+ brick_owners: Owner[];
365
+ preview?: Bytes;
366
+ game_version: number;
367
+ bricks: BrickV8[];
368
+ components: DefinedComponents;
369
+ }>;
370
+ export declare type BrsV9 = Modify<BrsV8, {
371
+ version: 9;
372
+ physical_materials: string[];
373
+ bricks: BrickV9[];
374
+ }>;
375
+ export declare type BrsV10 = Modify<BrsV9, {
376
+ version: 10;
377
+ bricks: BrickV10[];
378
+ }>;
379
+ export declare type ReadSaveObject = BrsV1 | BrsV2 | BrsV3 | BrsV4 | BrsV8 | BrsV9 | BrsV10;
380
+ export interface Brick {
381
+ asset_name_index?: number;
382
+ size: Vector;
383
+ position: Vector;
384
+ direction?: Direction;
385
+ rotation?: Rotation;
386
+ collision?: boolean | Partial<Collision>;
387
+ visibility?: boolean;
388
+ material_index?: number;
389
+ physical_index?: number;
390
+ material_intensity?: number;
391
+ color?: ColorRgb | number;
392
+ owner_index?: number;
393
+ components?: Components<DefinedComponents>;
394
+ }
395
+ export interface WriteSaveObject {
396
+ game_version?: number;
397
+ map?: string;
398
+ description?: string;
399
+ author?: Partial<User>;
400
+ host?: Partial<User>;
401
+ mods?: string[];
402
+ brick_assets?: string[];
403
+ colors?: UnrealColor[];
404
+ materials?: string[];
405
+ brick_owners?: Partial<Owner>[];
406
+ physical_materials?: string[];
407
+ preview?: Bytes;
408
+ bricks: Brick[];
409
+ save_time?: ArrayLike<number>;
410
+ components?: DefinedComponents;
411
+ }
412
+ export interface ReadOptions {
413
+ bricks?: boolean;
414
+ preview?: boolean;
415
+ }
416
+ export interface WriteOptions {
417
+ compress?: boolean;
418
+ }
419
+ declare function readBrs(rawBytes: Uint8Array, options?: ReadOptions): ReadSaveObject;
420
+ declare function writeBrs(save: WriteSaveObject, options?: WriteOptions): Uint8Array;
421
+ declare global {
422
+ interface Window {
423
+ BRS: {
424
+ read: typeof read;
425
+ write: typeof write;
426
+ utils: typeof utils;
427
+ constants: typeof constants;
428
+ };
429
+ }
430
+ }
431
+ declare function hsv(h: number | {
432
+ h: number;
433
+ s: number;
434
+ v: number;
435
+ }, s?: number, v?: number): number[];
436
+ declare function parseDuration(str: string): number;
437
+ declare function parseBrickadiaTime(str: string): number;
438
+ declare function brn2n(brName: string): string;
439
+ declare function n2brn(name: string): string;
440
+ export interface IBrickBounds {
441
+ minBound: Vector;
442
+ maxBound: Vector;
443
+ center: Vector;
444
+ }
445
+ declare function checkBounds(brick: Brick, brick_assets: string[], bounds: IBrickBounds): boolean;
446
+ declare function getBounds({ bricks, brick_assets }: WriteSaveObject): IBrickBounds;
447
+ declare function getBrickSize(brick: Brick, brick_assets: string[]): [
448
+ number,
449
+ number,
450
+ number
451
+ ];
452
+ declare function getScaleAxis(brick: Brick, axis: number): number;
453
+ declare function setOwnership(player: {
454
+ id: string;
455
+ name: string;
456
+ }, saveData: ReadSaveObject): ReadSaveObject;
457
+ export declare const read: typeof import("brs-js").read;
458
+ export declare const write: typeof import("brs-js").write;
459
+ export declare const utils: typeof import("brs-js/dist/src/utils");
460
+ export declare const constants: typeof import("brs-js/dist/src/constants");
461
+ export declare const _OMEGGA_UTILS_IMPORT: {
462
+ chat: {
463
+ EMOTES: string[];
464
+ sanitize: (str: string) => string;
465
+ parseLinks: (message: string) => string;
466
+ attr: (attr: string, param?: string) => (message: string) => string;
467
+ attrParam: <T = string>(attr: string) => (message: string, param: T) => string;
468
+ color: (message: string, param: string) => string;
469
+ bold: (message: string) => string;
470
+ italic: (message: string) => string;
471
+ underline: (message: string) => string;
472
+ emoji: (message: string) => string;
473
+ code: (message: string) => string;
474
+ font: (message: string, param: string) => string;
475
+ size: (message: string, param: number) => string;
476
+ link: (message: string, param: string) => string;
477
+ red: (message: string) => string;
478
+ green: (message: string) => string;
479
+ blue: (message: string) => string;
480
+ yellow: (message: string) => string;
481
+ cyan: (message: string) => string;
482
+ magenta: (message: string) => string;
483
+ black: (message: string) => string;
484
+ white: (message: string) => string;
485
+ gray: (message: string) => string;
486
+ };
487
+ color: {
488
+ hsv: typeof hsv;
489
+ linearRGB: (rgba: number[]) => number[];
490
+ sRGB: (linear: number[]) => number[];
491
+ rgbToHex: (r: number | [
492
+ number,
493
+ number,
494
+ number
495
+ ] | {
496
+ r: number;
497
+ g: number;
498
+ b: number;
499
+ }, g?: number, b?: number) => string;
500
+ DEFAULT_COLORSET: number[][];
501
+ };
502
+ uuid: {
503
+ UUID_PATTERN: RegExp;
504
+ match: (str: string) => boolean;
505
+ };
506
+ pattern: {
507
+ explode: (str: string) => RegExp;
508
+ };
509
+ time: {
510
+ parseDuration: typeof parseDuration;
511
+ parseBrickadiaTime: typeof parseBrickadiaTime;
512
+ };
513
+ map: {
514
+ DEFAULT_MAPS: {
515
+ name: string;
516
+ brName: string;
517
+ }[];
518
+ brn2n: typeof brn2n;
519
+ n2brn: typeof n2brn;
520
+ };
521
+ brick: {
522
+ BRICK_CONSTANTS: {
523
+ rotationTable: number[];
524
+ translationTable: (([x, y, z]: [
525
+ number,
526
+ number,
527
+ number
528
+ ]) => [
529
+ number,
530
+ number,
531
+ number
532
+ ])[];
533
+ orientationMap: Record<string, [
534
+ number,
535
+ number
536
+ ]>;
537
+ DEFAULT_MATERIALS: string[];
538
+ brickSizeMap: Record<string, [
539
+ number,
540
+ number,
541
+ number
542
+ ]>;
543
+ };
544
+ checkBounds: typeof checkBounds;
545
+ getBounds: typeof getBounds;
546
+ getBrickSize: typeof getBrickSize;
547
+ getScaleAxis: typeof getScaleAxis;
548
+ setOwnership: typeof setOwnership;
549
+ rotate: (brick: import("brs-js").Brick, rotation: [
550
+ number,
551
+ number
552
+ ]) => import("brs-js").Brick;
553
+ rotate_x: (times: number) => (obj: import("brs-js").Brick) => import("brs-js").Brick;
554
+ rotate_y: (times: number) => (obj: import("brs-js").Brick) => import("brs-js").Brick;
555
+ rotate_z: (times: number) => (obj: import("brs-js").Brick) => import("brs-js").Brick;
556
+ d2o: (direction: number, rotation: number) => number;
557
+ o2d: (orientation: number) => number[];
558
+ };
559
+ wsl: () => number;
560
+ brs: typeof import("brs-js");
561
+ };
562
+ declare global {
563
+ export var Omegga: OmeggaLike;
564
+ export var Player: StaticPlayer;
565
+ export var OMEGGA_UTIL: typeof _OMEGGA_UTILS_IMPORT;
566
+ }
567
+ export declare type OL = OmeggaLike;
568
+ export declare type OP = OmeggaPlugin;
569
+ export declare type PC<T extends Record<string, unknown> = Record<string, unknown>> = PluginConfig<T>;
570
+ export declare type PS<T extends Record<string, unknown> = Record<string, unknown>> = PluginStore<T>;
571
+ export interface BrickBounds {
572
+ minBound: [
573
+ number,
574
+ number,
575
+ number
576
+ ];
577
+ maxBound: [
578
+ number,
579
+ number,
580
+ number
581
+ ];
582
+ center: [
583
+ number,
584
+ number,
585
+ number
586
+ ];
587
+ }
588
+ /** Created when a player clicks on a brick with an interact component */
589
+ export declare type BrickInteraction = {
590
+ /** Brick name from catalog (Turkey Body, 4x Cube) */
591
+ brick_name: string;
592
+ /** Player information, id, name, controller, and pawn */
593
+ player: {
594
+ id: string;
595
+ name: string;
596
+ controller: string;
597
+ pawn: string;
598
+ };
599
+ /** Brick center position */
600
+ position: [
601
+ number,
602
+ number,
603
+ number
604
+ ];
605
+ };
606
+ /** AutoRestart options */
607
+ export declare type AutoRestartConfig = {
608
+ players: boolean;
609
+ bricks: boolean;
610
+ minigames: boolean;
611
+ environment: boolean;
612
+ announcement: boolean;
613
+ };
614
+ export interface OmeggaPlayer {
615
+ /** player name */
616
+ name: string;
617
+ /** player uuid */
618
+ id: string;
619
+ /** player controller id */
620
+ controller: string;
621
+ /** player state id */
622
+ state: string;
623
+ /**
624
+ * Returns omegga
625
+ */
626
+ getOmegga(): OmeggaLike;
627
+ /**
628
+ * Clone a player
629
+ */
630
+ clone(): OmeggaPlayer;
631
+ /**
632
+ * Get raw player info (to feed into a constructor)
633
+ */
634
+ raw(): [
635
+ string,
636
+ string,
637
+ string,
638
+ string
639
+ ];
640
+ /**
641
+ * True if the player is the host
642
+ */
643
+ isHost(): boolean;
644
+ /**
645
+ * Clear player's bricks
646
+ * @param quiet clear bricks quietly
647
+ */
648
+ clearBricks(quiet?: boolean): void;
649
+ /**
650
+ * Get player's roles, if any
651
+ */
652
+ getRoles(): readonly string[];
653
+ /**
654
+ * Get player's permissions in a map like `{"Bricks.ClearOwn": true, ...}`
655
+ * @return permissions map
656
+ */
657
+ getPermissions(): Record<string, boolean>;
658
+ /**
659
+ * Get player's name color
660
+ * @return 6 character hex string
661
+ */
662
+ getNameColor(): string;
663
+ /**
664
+ * Get the player's pawn
665
+ * @return pawn
666
+ */
667
+ getPawn(): Promise<string>;
668
+ /**
669
+ * Get player's position
670
+ * @return [x, y, z] coordinates
671
+ */
672
+ getPosition(): Promise<[
673
+ number,
674
+ number,
675
+ number
676
+ ]>;
677
+ /**
678
+ * Gets a user's ghost brick info (by uuid, name, controller, or player object)
679
+ * @return ghost brick data
680
+ */
681
+ getGhostBrick(): Promise<{
682
+ targetGrid: string;
683
+ location: number[];
684
+ orientation: string;
685
+ }>;
686
+ /**
687
+ * gets a user's paint tool properties
688
+ */
689
+ getPaint(): Promise<{
690
+ materialIndex: string;
691
+ materialAlpha: string;
692
+ material: string;
693
+ color: number[];
694
+ }>;
695
+ /**
696
+ * gets whether or not the player is crouching
697
+ */
698
+ isCrouched(pawn?: string): Promise<boolean>;
699
+ /**
700
+ * gets whether or not the player is dead
701
+ */
702
+ isDead(pawn?: string): Promise<boolean>;
703
+ /**
704
+ * Gets the bounds of the template in the user's clipboard (bounds of original selection box)
705
+ * @return template bounds
706
+ */
707
+ getTemplateBounds(): Promise<BrickBounds>;
708
+ /**
709
+ * Get bricks inside template bounds
710
+ * @return BRS JS Save Data
711
+ */
712
+ getTemplateBoundsData(): Promise<ReadSaveObject>;
713
+ /**
714
+ * Load bricks at ghost brick location
715
+ * @param saveData save data to load
716
+ */
717
+ loadDataAtGhostBrick(saveData: WriteSaveObject, options?: {
718
+ rotate?: boolean;
719
+ offX?: number;
720
+ offY?: number;
721
+ offZ?: number;
722
+ quiet?: boolean;
723
+ }): Promise<void>;
724
+ /**
725
+ * Load bricks on this player's clipboard
726
+ * @param saveName Save to load
727
+ */
728
+ loadBricks(saveName: string): void;
729
+ /**
730
+ * Load bricks on this player's clipboard passing save data
731
+ * @param saveData save data to load
732
+ */
733
+ loadSaveData(saveData: WriteSaveObject, options?: {
734
+ rotate?: boolean;
735
+ offX?: number;
736
+ offY?: number;
737
+ offZ?: number;
738
+ quiet?: boolean;
739
+ }): Promise<void>;
740
+ /**
741
+ * Kills this player
742
+ */
743
+ kill(): void;
744
+ /**
745
+ * Damages a player
746
+ * @param amount Amount to damage
747
+ */
748
+ damage(amount: number): void;
749
+ /**
750
+ * Heal this player
751
+ * @param amount to heal
752
+ */
753
+ heal(amount: number): void;
754
+ /**
755
+ * Gives a player an item
756
+ * @param item Item name (Weapon_Bow)
757
+ */
758
+ giveItem(item: string): void;
759
+ /**
760
+ * Removes an item from a player's inventory
761
+ * @param item Item name (Weapon_Bow)
762
+ */
763
+ takeItem(item: string): void;
764
+ }
765
+ export interface StaticPlayer {
766
+ /**
767
+ * get a player's roles, if any
768
+ * @param omegga omegga instance
769
+ * @param id player uuid
770
+ * @return list of roles
771
+ */
772
+ getRoles(omegga: OmeggaLike, id: string): readonly string[];
773
+ /**
774
+ * get a player's permissions in a map like `{"Bricks.ClearOwn": true, ...}`
775
+ * @param omegga Omegga instance
776
+ * @param id player uuid
777
+ * @return permissions map
778
+ */
779
+ getPermissions(omegga: OmeggaLike, id: string): Record<string, boolean>;
780
+ /**
781
+ * Kills a player
782
+ * @param omegga Omegga instance
783
+ * @param target Player or player name/id
784
+ */
785
+ kill(omegga: OmeggaLike, target: string | OmeggaPlayer): void;
786
+ /**
787
+ * Damages a player
788
+ * @param omegga Omegga instance
789
+ * @param target Player or player name/id
790
+ * @param amount Damage amount
791
+ */
792
+ damage(omegga: OmeggaLike, target: string | OmeggaPlayer, amount: number): void;
793
+ /**
794
+ * Heal a player
795
+ * @param omegga Omegga instance
796
+ * @param target Player or player name/id
797
+ * @param amount Heal amount
798
+ */
799
+ heal(omegga: OmeggaLike, target: string | OmeggaPlayer, amount: number): void;
800
+ /**
801
+ * Gives a player an item
802
+ * @param omegga Omegga instance
803
+ * @param target Player or player name/id
804
+ * @param item Item name (Weapon_Bow)
805
+ */
806
+ giveItem(omegga: OmeggaLike, target: string | OmeggaPlayer, item: string): void;
807
+ /**
808
+ * Removes an item from a player's inventory
809
+ * @param omegga Omegga instance
810
+ * @param target Player or player name/id
811
+ * @param item Item name (Weapon_Bow)
812
+ */
813
+ takeItem(omegga: OmeggaLike, target: string | OmeggaPlayer, item: string): void;
814
+ }
815
+ export interface InjectedCommands {
816
+ /** Get server status */
817
+ getServerStatus(this: OmeggaLike): Promise<IServerStatus>;
818
+ /** Get a list of minigames and their indices */
819
+ listMinigames(this: OmeggaLike): Promise<IMinigameList>;
820
+ /** Get all player positions and pawns */
821
+ getAllPlayerPositions(this: OmeggaLike): Promise<IPlayerPositions>;
822
+ /** Get minigames and members */
823
+ getMinigames(this: OmeggaLike): Promise<ILogMinigame[]>;
824
+ }
825
+ export interface MockEventEmitter {
826
+ addListener(event: string, listener: Function): this;
827
+ emit(event: string, ...args: any[]): boolean;
828
+ eventNames(): (string | symbol)[];
829
+ getMaxListeners(): number;
830
+ listenerCount(event: string): number;
831
+ listeners(event: string): Function[];
832
+ off(event: string, listener: Function): this;
833
+ on(event: string, listener: Function): this;
834
+ once(event: string, listener: Function): this;
835
+ prependListener(event: string, listener: Function): this;
836
+ prependOnceListener(event: string, listener: Function): this;
837
+ rawListeners(event: string): Function[];
838
+ removeAllListeners(event?: string): this;
839
+ removeListener(event: string, listener: Function): this;
840
+ setMaxListeners(maxListeners: number): this;
841
+ on(event: "close", listener: () => void): this;
842
+ on(event: "line", listener: (line: string) => void): this;
843
+ on(event: "start", listener: (info: {
844
+ map: string;
845
+ }) => void): this;
846
+ on(event: "version", listener: (version: number) => void): this;
847
+ on(event: "unauthorized", listener: () => void): this;
848
+ on(event: "join", listener: (player: OmeggaPlayer) => void): this;
849
+ on(event: "leave", listener: (player: OmeggaPlayer) => void): this;
850
+ on(event: "chat", listener: (name: string, message: string) => void): this;
851
+ on(event: "mapchange", listener: (info: {
852
+ map: string;
853
+ }) => void): this;
854
+ on(event: "autorestart", listener: (config: AutoRestartConfig) => void): this;
855
+ on(event: "interact", listener: (interaction: BrickInteraction) => void): this;
856
+ }
857
+ export interface OmeggaLike extends OmeggaCore, LogWrangling, InjectedCommands, MockEventEmitter {
858
+ writeln(line: string): void;
859
+ /** game CL version*/
860
+ version: number;
861
+ /** verbose logging is enabled*/
862
+ verbose: boolean;
863
+ /** list of players */
864
+ players: OmeggaPlayer[];
865
+ /** server host */
866
+ host?: {
867
+ id: string;
868
+ name: string;
869
+ };
870
+ /** server is started */
871
+ started: boolean;
872
+ /** server is starting */
873
+ starting: boolean;
874
+ /** server is stopping */
875
+ stopping: boolean;
876
+ /** current map */
877
+ currentMap: string;
878
+ /** path to config files */
879
+ configPath: string;
880
+ /** path to saves */
881
+ savePath: string;
882
+ /** path to presets */
883
+ presetPath: string;
884
+ /** get a plugin's name, documentation, and loaded status
885
+ * If run in an unsafe plugin, the emitPlugin method sends events from
886
+ * an "unsafe" plugin
887
+ */
888
+ getPlugin(name: string): Promise<PluginInterop>;
889
+ }
890
+ export interface OmeggaCore {
891
+ /**
892
+ * get a list of players
893
+ * @return list of players {id: uuid, name: name} objects
894
+ */
895
+ getPlayers(): {
896
+ id: string;
897
+ name: string;
898
+ controller: string;
899
+ state: string;
900
+ }[];
901
+ /**
902
+ * find a player by name, id, controller, or state
903
+ * @param target - name, id, controller, or state
904
+ */
905
+ getPlayer(target: string): OmeggaPlayer | null;
906
+ /**
907
+ * find a player by rough name, prioritize exact matches and get fuzzier
908
+ * @param name player name, fuzzy
909
+ */
910
+ findPlayerByName(name: string): OmeggaPlayer | null;
911
+ /**
912
+ * get the host's ID
913
+ * @return Host Id
914
+ */
915
+ getHostId(): string;
916
+ /**
917
+ * broadcast messages to chat
918
+ * messages are broken by new line
919
+ * multiple arguments are additional lines
920
+ * all messages longer than 512 characters are deleted automatically, though omegga wouldn't have sent them anyway
921
+ * @param messages unescaped chat messages to send. may need to wrap messages with quotes
922
+ */
923
+ broadcast(...messages: string[]): void;
924
+ /**
925
+ * whisper messages to a player's chat
926
+ * messages are broken by new line
927
+ * multiple arguments are additional lines
928
+ * all messages longer than 512 characters are deleted automatically, though omegga wouldn't have sent them anyway
929
+ * @param target - player identifier or player object
930
+ * @param messages - unescaped chat messages to send. may need to wrap messages with quotes
931
+ */
932
+ whisper(target: string | OmeggaPlayer, ...messages: string[]): void;
933
+ /**
934
+ * prints text to the middle of a player's screen
935
+ * all messages longer than 512 characters are deleted automatically
936
+ * @param target - player identifier or player object
937
+ * @param message - unescaped chat messages to send. may need to wrap messages with quotes
938
+ */
939
+ middlePrint(target: string | OmeggaPlayer, message: string): void;
940
+ /**
941
+ * Save a minigame preset based on a minigame index
942
+ * @param index minigame index
943
+ * @param name preset name
944
+ */
945
+ saveMinigame(index: number, name: string): void;
946
+ /**
947
+ * Delete a minigame
948
+ * @param index minigame index
949
+ */
950
+ deleteMinigame(index: number): void;
951
+ /**
952
+ * Reset a minigame
953
+ * @param index minigame index
954
+ */
955
+ resetMinigame(index: number): void;
956
+ /**
957
+ * Force the next round in a minigame
958
+ * @param index minigame index
959
+ */
960
+ nextRoundMinigame(index: number): void;
961
+ /**
962
+ * Load an Minigame preset
963
+ * @param presetName preset name
964
+ * @param owner owner id/name
965
+ */
966
+ loadMinigame(presetName: string, owner?: string): void;
967
+ /**
968
+ * Get all presets in the minigame folder and child folders
969
+ */
970
+ getMinigamePresets(): string[];
971
+ /**
972
+ * Reset the environment settings
973
+ */
974
+ resetEnvironment(): void;
975
+ /**
976
+ * Save an environment preset
977
+ * @param presetName preset name
978
+ */
979
+ saveEnvironment(presetName: string): void;
980
+ /**
981
+ * Load an environment preset
982
+ * @param presetName preset name
983
+ */
984
+ loadEnvironment(presetName: string): void;
985
+ /**
986
+ * Load some environment preset data
987
+ * @param preset preset data
988
+ */
989
+ loadEnvironmentData(preset: EnvironmentPreset | EnvironmentPreset["data"]["groups"]): void;
990
+ /**
991
+ * Get all presets in the environment folder and child folders
992
+ */
993
+ getEnvironmentPresets(): string[];
994
+ /**
995
+ * Clear a user's bricks (by uuid, name, controller, or player object)
996
+ * @param target player or player identifier
997
+ * @param quiet quietly clear bricks
998
+ */
999
+ clearBricks(target: string | {
1000
+ id: string;
1001
+ }, quiet?: boolean): void;
1002
+ /**
1003
+ * Clear a region of bricks
1004
+ * @param region region to clear
1005
+ * @param options optional settings
1006
+ */
1007
+ clearRegion(region: {
1008
+ center: [
1009
+ number,
1010
+ number,
1011
+ number
1012
+ ];
1013
+ extent: [
1014
+ number,
1015
+ number,
1016
+ number
1017
+ ];
1018
+ }, options?: {
1019
+ target?: string | OmeggaPlayer;
1020
+ }): void;
1021
+ /**
1022
+ * Clear all bricks on the server
1023
+ * @param quiet quietly clear bricks
1024
+ */
1025
+ clearAllBricks(quiet?: boolean): void;
1026
+ /**
1027
+ * Save bricks under a filename
1028
+ * @param saveName save file name
1029
+ * @param region region of bricks to save
1030
+ */
1031
+ saveBricks(saveName: string, region?: {
1032
+ center: [
1033
+ number,
1034
+ number,
1035
+ number
1036
+ ];
1037
+ extent: [
1038
+ number,
1039
+ number,
1040
+ number
1041
+ ];
1042
+ }): void;
1043
+ /**
1044
+ * Save bricks under a filename, with a promise
1045
+ * @param saveName save file name
1046
+ * @param region region of bricks to save
1047
+ */
1048
+ saveBricksAsync(saveName: string, region?: {
1049
+ center: [
1050
+ number,
1051
+ number,
1052
+ number
1053
+ ];
1054
+ extent: [
1055
+ number,
1056
+ number,
1057
+ number
1058
+ ];
1059
+ }): Promise<void>;
1060
+ /**
1061
+ * Load bricks on the server
1062
+ */
1063
+ loadBricks(saveName: string, options?: {
1064
+ offX?: number;
1065
+ offY?: number;
1066
+ offZ?: number;
1067
+ quiet?: boolean;
1068
+ correctPalette?: boolean;
1069
+ correctCustom?: boolean;
1070
+ }): void;
1071
+ /**
1072
+ * Load bricks on the server into a player's clipbaord
1073
+ */
1074
+ loadBricksOnPlayer(saveName: string, player: string | OmeggaPlayer, options?: {
1075
+ offX?: number;
1076
+ offY?: number;
1077
+ offZ?: number;
1078
+ correctPalette?: boolean;
1079
+ correctCustom?: boolean;
1080
+ }): void;
1081
+ /**
1082
+ * Get all saves in the save folder and child folders
1083
+ */
1084
+ getSaves(): string[];
1085
+ /**
1086
+ * Checks if a save exists and returns an absolute path
1087
+ * @param saveName Save filename
1088
+ * @return Path to string
1089
+ */
1090
+ getSavePath(saveName: string): string;
1091
+ /**
1092
+ * unsafely load save data (wrap in try/catch)
1093
+ * @param saveName save file name
1094
+ * @param saveData BRS JS Save data
1095
+ */
1096
+ writeSaveData(saveName: string, saveData: WriteSaveObject): void;
1097
+ /**
1098
+ * unsafely read save data (wrap in try/catch)
1099
+ * @param saveName save file name
1100
+ * @param nobricks only read save header data
1101
+ * @return BRS JS Save Data
1102
+ */
1103
+ readSaveData(saveName: string, nobricks?: boolean): ReadSaveObject;
1104
+ /**
1105
+ * load bricks from save data and resolve when game finishes loading
1106
+ * @param saveData BRS JS Save data
1107
+ */
1108
+ loadSaveData(saveData: WriteSaveObject, options?: {
1109
+ offX?: number;
1110
+ offY?: number;
1111
+ offZ?: number;
1112
+ quiet?: boolean;
1113
+ correctPalette?: boolean;
1114
+ correctCustom?: boolean;
1115
+ }): Promise<void>;
1116
+ /**
1117
+ * load bricks from save data and resolve when game finishes loading
1118
+ * @param saveData BRS JS Save data
1119
+ * @param player Player name/id or player object
1120
+ */
1121
+ loadSaveDataOnPlayer(saveData: WriteSaveObject, player: string | OmeggaPlayer, options?: {
1122
+ offX?: number;
1123
+ offY?: number;
1124
+ offZ?: number;
1125
+ correctPalette?: boolean;
1126
+ correctCustom?: boolean;
1127
+ }): Promise<void>;
1128
+ /**
1129
+ * get current bricks as save data
1130
+ */
1131
+ getSaveData(region?: {
1132
+ center: [
1133
+ number,
1134
+ number,
1135
+ number
1136
+ ];
1137
+ extent: [
1138
+ number,
1139
+ number,
1140
+ number
1141
+ ];
1142
+ }): Promise<ReadSaveObject>;
1143
+ /**
1144
+ * Change server map
1145
+ * @param map Map name
1146
+ */
1147
+ changeMap(map: string): Promise<boolean>;
1148
+ /**
1149
+ * Get up-to-date role setup from RoleSetup.json
1150
+ */
1151
+ getRoleSetup(): BRRoleSetup;
1152
+ /**
1153
+ * Get up-to-date role assignments from RoleAssignment.json
1154
+ */
1155
+ getRoleAssignments(): BRRoleAssignments;
1156
+ /**
1157
+ * Get up-to-date ban list from BanList.json
1158
+ */
1159
+ getBanList(): BRBanList;
1160
+ /**
1161
+ * Get up-to-date name cache from PlayerNameCache.json
1162
+ */
1163
+ getNameCache(): BRPlayerNameCache;
1164
+ }
1165
+ /** A simple document store for plugins */
1166
+ export interface PluginStore<Storage extends Record<string, unknown> = Record<string, unknown>> {
1167
+ /** Get a value from plugin storage */
1168
+ get<T extends keyof Storage>(key: T): Promise<Storage[T]>;
1169
+ /** Set a value to plugin storage */
1170
+ set<T extends keyof Storage>(key: T, value: Storage[T]): Promise<void>;
1171
+ /** Delete a value from plugin storage */
1172
+ delete(key: string): Promise<void>;
1173
+ /** Wipe all values in plugin storage */
1174
+ wipe(): Promise<void>;
1175
+ /** Count entries in plugin storage */
1176
+ count(): Promise<number>;
1177
+ /** Get a list of keys in plugin storage */
1178
+ keys(): Promise<(keyof Storage)[]>;
1179
+ }
1180
+ /** A config representative of the config outlined in doc.json */
1181
+ export declare type PluginConfig<T extends Record<string, unknown> = Record<string, unknown>> = T;
1182
+ /** An omegga plugin */
1183
+ export default abstract class OmeggaPlugin<Config extends Record<string, unknown> = Record<string, unknown>, Storage extends Record<string, unknown> = Record<string, unknown>> {
1184
+ omegga: OmeggaLike;
1185
+ config: PluginConfig<Config>;
1186
+ store: PluginStore<Storage>;
1187
+ constructor(omegga: OmeggaLike, config: PluginConfig<Config>, store: PluginStore<Storage>);
1188
+ /** Run when plugin starts, returns /commands it uses */
1189
+ abstract init(): Promise<void | {
1190
+ registeredCommands?: string[];
1191
+ }>;
1192
+ /** Run when plugin is stopped */
1193
+ abstract stop(): Promise<void>;
1194
+ /** Run when another plugin tries to interact with this plugin
1195
+ * @param event Event name
1196
+ * @param from Name of origin plugin
1197
+ * @return value other plugin expects
1198
+ */
1199
+ abstract pluginEvent?(event: string, from: string, ...args: any[]): Promise<unknown>;
1200
+ }
1201
+ export interface LogWrangling {
1202
+ /** Add a passive pattern on console output that invokes callback on match */
1203
+ addMatcher<T>(pattern: IMatcher<T>["pattern"], callback: IMatcher<T>["callback"]): void;
1204
+ /** Run an active pattern on console output that resolves a match */
1205
+ addWatcher<T = RegExpMatchArray>(pattern: IWatcher<T>["pattern"], options?: {
1206
+ timeoutDelay?: number;
1207
+ bundle?: boolean;
1208
+ debounce?: boolean;
1209
+ afterMatchDelay?: number;
1210
+ last?: IWatcher<T>["last"];
1211
+ exec?: () => void;
1212
+ }): Promise<IWatcher<T>["matches"]>;
1213
+ /** Run a command and capture bundled output */
1214
+ watchLogChunk<T = string>(cmd: string, pattern: IWatcher<T>["pattern"], options?: {
1215
+ first?: "index" | ((match: T) => boolean);
1216
+ last?: IWatcher<T>["last"];
1217
+ afterMatchDelay?: number;
1218
+ timeoutDelay?: number;
1219
+ }): Promise<IWatcher<T>["matches"]>;
1220
+ /** Run a command and capture bundled output for array functions */
1221
+ watchLogArray<Item extends Record<string, string> = Record<string, string>, Member extends Record<string, string> = Record<string, string>>(cmd: string, itemPattern: RegExp, memberPattern: RegExp): Promise<{
1222
+ item: Item;
1223
+ members: Member[];
1224
+ }[]>;
1225
+ }
1226
+ export declare type WatcherPattern<T> = (line: string, match: RegExpMatchArray) => T | RegExpMatchArray | "[OMEGGA_WATCHER_DONE]";
1227
+ export declare type IMatcher<T> = {
1228
+ pattern: RegExp;
1229
+ callback: (match: RegExpMatchArray) => boolean;
1230
+ } | {
1231
+ pattern: (line: string, match: RegExpMatchArray) => T;
1232
+ callback: (match: RegExpMatchArray) => T;
1233
+ };
1234
+ export declare type IWatcher<T> = {
1235
+ bundle: boolean;
1236
+ debounce: boolean;
1237
+ timeoutDelay: number;
1238
+ afterMatchDelay: number;
1239
+ last: (match: T) => boolean;
1240
+ callback: () => void;
1241
+ resolve: (...args: any[]) => void;
1242
+ remove: () => void;
1243
+ done: () => void;
1244
+ timeout: ReturnType<typeof setTimeout>;
1245
+ } & ({
1246
+ pattern: WatcherPattern<T>;
1247
+ matches: T[];
1248
+ } | {
1249
+ pattern: RegExp;
1250
+ matches: RegExpMatchArray[];
1251
+ });
1252
+ export declare type IPluginConfigDefinition = {
1253
+ description: string;
1254
+ } & ({
1255
+ type: "string" | "password" | "role";
1256
+ default: string;
1257
+ } | {
1258
+ type: "boolean";
1259
+ default: boolean;
1260
+ } | {
1261
+ type: "number";
1262
+ default: number;
1263
+ } | {
1264
+ type: "enum";
1265
+ options: (string | number)[];
1266
+ default: string | number;
1267
+ } | {
1268
+ type: "players";
1269
+ default: {
1270
+ id: string;
1271
+ name: string;
1272
+ };
1273
+ } | ({
1274
+ type: "list";
1275
+ } & ({
1276
+ itemType: "string";
1277
+ default: string[];
1278
+ } | {
1279
+ itemType: "number";
1280
+ default: number[];
1281
+ } | {
1282
+ itemType: "enum";
1283
+ options: (string | number)[];
1284
+ default: string | number;
1285
+ })));
1286
+ export interface IPluginCommandArgument {
1287
+ name: string;
1288
+ description: string;
1289
+ required?: boolean;
1290
+ }
1291
+ export interface IPluginCommand {
1292
+ name: string;
1293
+ description: string;
1294
+ example?: string;
1295
+ args: IPluginCommandArgument[];
1296
+ }
1297
+ export interface IPluginDocumentation {
1298
+ name: string;
1299
+ description: string;
1300
+ author: string;
1301
+ config: Record<string, IPluginConfigDefinition>;
1302
+ commands: IPluginCommand[];
1303
+ }
1304
+ export interface PluginInterop {
1305
+ name: string;
1306
+ documentation: IPluginDocumentation;
1307
+ loaded: boolean;
1308
+ emitPlugin?(event: string, args: any[]): Promise<any>;
1309
+ }
1310
+
1311
+ export {};