@starktma/minecraft-utils 1.3.111 → 1.5.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 (68) hide show
  1. package/README.md +56 -0
  2. package/dist/constants.d.ts +26 -0
  3. package/dist/constants.d.ts.map +1 -0
  4. package/dist/constants.js +34 -0
  5. package/dist/constants.js.map +1 -0
  6. package/dist/database/database.d.ts +8 -5
  7. package/dist/database/database.d.ts.map +1 -1
  8. package/dist/database/database.js +40 -38
  9. package/dist/database/database.js.map +1 -1
  10. package/dist/database/index.d.ts +1 -3
  11. package/dist/database/index.d.ts.map +1 -1
  12. package/dist/database/index.js +1 -2
  13. package/dist/database/index.js.map +1 -1
  14. package/dist/game-state-machine/branch.js +2 -2
  15. package/dist/game-state-machine/branch.js.map +1 -1
  16. package/dist/game-state-machine/database.d.ts +10 -3
  17. package/dist/game-state-machine/database.d.ts.map +1 -1
  18. package/dist/game-state-machine/database.js +20 -2
  19. package/dist/game-state-machine/database.js.map +1 -1
  20. package/dist/game-state-machine/index.d.ts +1 -2
  21. package/dist/game-state-machine/index.d.ts.map +1 -1
  22. package/dist/game-state-machine/index.js +1 -2
  23. package/dist/game-state-machine/index.js.map +1 -1
  24. package/dist/game-state-machine/stateMachine.d.ts +6 -9
  25. package/dist/game-state-machine/stateMachine.d.ts.map +1 -1
  26. package/dist/game-state-machine/stateMachine.js +72 -86
  27. package/dist/game-state-machine/stateMachine.js.map +1 -1
  28. package/dist/index.d.ts +1 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +2 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/math/BFSScanner.d.ts +117 -0
  33. package/dist/math/BFSScanner.d.ts.map +1 -0
  34. package/dist/math/BFSScanner.js +388 -0
  35. package/dist/math/BFSScanner.js.map +1 -0
  36. package/dist/math/Perlin2D.d.ts +12 -0
  37. package/dist/math/Perlin2D.d.ts.map +1 -0
  38. package/dist/math/Perlin2D.js +115 -0
  39. package/dist/math/Perlin2D.js.map +1 -0
  40. package/dist/math/index.d.ts +63 -59
  41. package/dist/math/index.d.ts.map +1 -1
  42. package/dist/math/index.js +150 -76
  43. package/dist/math/index.js.map +1 -1
  44. package/dist/minecraft/effectsAPI.d.ts +69 -0
  45. package/dist/minecraft/effectsAPI.d.ts.map +1 -0
  46. package/dist/minecraft/effectsAPI.js +441 -0
  47. package/dist/minecraft/effectsAPI.js.map +1 -0
  48. package/dist/minecraft/index.d.ts +7 -3
  49. package/dist/minecraft/index.d.ts.map +1 -1
  50. package/dist/minecraft/index.js +53 -29
  51. package/dist/minecraft/index.js.map +1 -1
  52. package/dist/minecraft/projectileAPI.d.ts +23 -0
  53. package/dist/minecraft/projectileAPI.d.ts.map +1 -0
  54. package/dist/minecraft/projectileAPI.js +148 -0
  55. package/dist/minecraft/projectileAPI.js.map +1 -0
  56. package/dist/minecraft/structuresAPI.d.ts +11 -0
  57. package/dist/minecraft/structuresAPI.d.ts.map +1 -0
  58. package/dist/minecraft/structuresAPI.js +66 -0
  59. package/dist/minecraft/structuresAPI.js.map +1 -0
  60. package/package.json +7 -3
  61. package/dist/database/constants.d.ts +0 -2
  62. package/dist/database/constants.d.ts.map +0 -1
  63. package/dist/database/constants.js +0 -2
  64. package/dist/database/constants.js.map +0 -1
  65. package/dist/game-state-machine/constants.d.ts +0 -2
  66. package/dist/game-state-machine/constants.d.ts.map +0 -1
  67. package/dist/game-state-machine/constants.js +0 -2
  68. package/dist/game-state-machine/constants.js.map +0 -1
@@ -1,25 +1,4 @@
1
- import { RGB, RGBA, Vector3 } from "@minecraft/server";
2
- /**
3
- * Converts an angle in degrees to radians.
4
- *
5
- * @param degrees - The angle in degrees to be converted.
6
- * @returns The angle in radians.
7
- */
8
- export declare function toRadians(degrees: number): number;
9
- /**
10
- * Converts an angle in radians to degrees.
11
- *
12
- * @param radians - The angle in radians to be converted.
13
- * @returns The angle in degrees.
14
- */
15
- export declare function calculateDistance(position1: Vector3, position2: Vector3): number;
16
- /**
17
- * Converts an angle in radians to degrees.
18
- *
19
- * @param radians - The angle in radians to be converted.
20
- * @returns The angle in degrees.
21
- */
22
- export declare function toDegrees(radians: number): number;
1
+ import { RGB, RGBA, Vector2, Vector3, VectorXZ } from "@minecraft/server";
23
2
  /**
24
3
  * Converts a hex color string to an RGBA object.
25
4
  *
@@ -37,37 +16,6 @@ export declare function hexToRgba(hex: string, stripAlpha?: boolean): RGB | RGBA
37
16
  * @returns The clamped value, which will be between `min` and `max`.
38
17
  */
39
18
  export declare function clamp(value: number, min: number, max: number): number;
40
- /**
41
- * Converts an angle in degrees to its signed equivalent in the range [-180, 180].
42
- *
43
- * @param angle - The angle in degrees to be converted.
44
- * @returns The signed angle in degrees, normalized to the range [-180, 180].
45
- */
46
- export declare function toSigned(angle: number): number;
47
- /**
48
- * Converts an angle in degrees to its unsigned equivalent in the range [0, 360].
49
- *
50
- * @param angle - The angle in degrees to be converted.
51
- * @returns The unsigned angle in degrees, normalized to the range [0, 360].
52
- */
53
- export declare function toUnsigned(angle: number): number;
54
- /**
55
- * Calculates the shortest signed arc between two angles in degrees.
56
- *
57
- * @param from - The starting angle in degrees.
58
- * @param to - The target angle in degrees.
59
- * @returns The shortest arc in degrees from `from` to `to`.
60
- */
61
- export declare function shortestArc(from: number, to: number): number;
62
- /**
63
- * Checks if two positions are equal within a specified tolerance.
64
- *
65
- * @param a - The first position.
66
- * @param b - The second position.
67
- * @param tolerance - The tolerance for comparison (default is 0.5).
68
- * @returns `true` if the positions are equal within the tolerance, otherwise `false`.
69
- */
70
- export declare function positionsEqual(a: Vector3, b: Vector3, tolerance?: number): boolean;
71
19
  /**
72
20
  * Checks if a value is within a specified range.
73
21
  *
@@ -80,11 +28,67 @@ export declare function inRange(value: number, min: number, max: number): boolea
80
28
  /**
81
29
  * A utility class for performing operations on 3D vectors.
82
30
  */
83
- export declare class VectorOperations {
84
- static apply(v: Vector3, fn: (component: number) => number): Vector3;
85
- static add(v1: Vector3, v2: Vector3): Vector3;
86
- static subtract(v1: Vector3, v2: Vector3): Vector3;
87
- static multiply(v: Vector3, scalar: number): Vector3;
88
- static stringify(v: Vector3): string;
31
+ export declare class Vector {
32
+ static apply<T extends Vector3 | Vector2 | VectorXZ>(v: T, fn: (component: number) => any): T;
33
+ static add<T extends Vector3 | Vector2 | VectorXZ>(v1: T, ...vectors: T[]): T;
34
+ static subtract<T extends Vector3 | Vector2 | VectorXZ>(v1: T, ...vectors: T[]): T;
35
+ static scalarDivide<T extends Vector3 | Vector2 | VectorXZ>(v: T, scalar: number): T;
36
+ static scalarMultiply<T extends Vector3 | Vector2 | VectorXZ>(v: T, scalar: number): T;
37
+ static dot<T extends Vector3 | Vector2 | VectorXZ>(v1: T, v2: T): number;
38
+ static magnitude(v: Vector3 | Vector2 | VectorXZ): number;
39
+ static normalize<T extends Vector3 | Vector2 | VectorXZ>(v: T): T;
40
+ static distance<T extends Vector3 | Vector2 | VectorXZ>(v1: T, v2: T): number;
41
+ static stringify<T extends Vector3 | Vector2 | VectorXZ>(v: T): string;
42
+ static rotateVector(vector: Vector3, rotationDegrees: number): Vector3;
43
+ static new(x: number, y: number): Vector2;
44
+ static new(x: number, y: number, z: number): Vector3;
45
+ static copy<T>(vector: T): T;
46
+ }
47
+ export declare class Trigonometry {
48
+ /** Creates a unit vector from an angle in degrees.
49
+ *
50
+ * @param rotation - The angle in degrees.
51
+ * @returns A unit vector representing the direction of the angle.
52
+ */
53
+ static fromAngle(rotation: number): Vector2;
54
+ /** Creates a unit vector from a 2D angle in degrees (pitch and yaw).
55
+ *
56
+ * @param rotation - The 2D angle (pitch and yaw) in degrees.
57
+ * @returns A unit vector representing the direction of the angle.
58
+ */
59
+ static fromAngle(rotation: Vector2): Vector3;
60
+ /** Converts an angle in degrees to radians.
61
+ *
62
+ * @param degrees - The angle in degrees to be converted.
63
+ * @returns The angle in radians.
64
+ */
65
+ static radians(degrees: number): number;
66
+ /**
67
+ * Converts an angle in radians to degrees.
68
+ *
69
+ * @param radians - The angle in radians to be converted.
70
+ * @returns The angle in degrees.
71
+ */
72
+ static degrees(radians: number): number;
73
+ /**
74
+ * Converts an angle in degrees to its signed equivalent in the range [-180, 180].
75
+ * @param angle - The angle in degrees to be converted.
76
+ * @returns The signed angle in degrees, normalized to the range [-180, 180].
77
+ */
78
+ static signedAngle(degrees: number): number;
79
+ /**
80
+ * Converts an angle in degrees to its unsigned equivalent in the range [0, 360].
81
+ *
82
+ * @param angle - The angle in degrees to be converted.
83
+ * @returns The unsigned angle in degrees, normalized to the range [0, 360].
84
+ */
85
+ static unsignedAngle(degrees: number): number;
86
+ /** Calculates the shortest arc between two angles in degrees.
87
+ *
88
+ * @param from - The starting angle in degrees.
89
+ * @param to - The target angle in degrees.
90
+ * @returns The shortest arc from the starting angle to the target angle in degrees.
91
+ */
92
+ static shortestArc(from: number, to: number): number;
89
93
  }
90
94
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/math/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAIhF;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,GAAG,GAAG,IAAI,CAsB9E;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,GAAE,MAAY,GAAG,OAAO,CAEvF;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAExE;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO;IAIpE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,OAAO;IAI7C,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,OAAO;IAIlD,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM;CAGpC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/math/index.ts"],"names":[],"mappings":"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"}
@@ -1,30 +1,3 @@
1
- /**
2
- * Converts an angle in degrees to radians.
3
- *
4
- * @param degrees - The angle in degrees to be converted.
5
- * @returns The angle in radians.
6
- */
7
- export function toRadians(degrees) {
8
- return degrees * (Math.PI / 180);
9
- }
10
- /**
11
- * Converts an angle in radians to degrees.
12
- *
13
- * @param radians - The angle in radians to be converted.
14
- * @returns The angle in degrees.
15
- */
16
- export function calculateDistance(position1, position2) {
17
- return Math.sqrt(Math.pow(position1.x - position2.x, 2) + Math.pow(position1.y - position2.y, 2) + Math.pow(position1.z - position2.z, 2));
18
- }
19
- /**
20
- * Converts an angle in radians to degrees.
21
- *
22
- * @param radians - The angle in radians to be converted.
23
- * @returns The angle in degrees.
24
- */
25
- export function toDegrees(radians) {
26
- return radians * (180 / Math.PI);
27
- }
28
1
  /**
29
2
  * Converts a hex color string to an RGBA object.
30
3
  *
@@ -63,46 +36,6 @@ export function hexToRgba(hex, stripAlpha = false) {
63
36
  export function clamp(value, min, max) {
64
37
  return Math.max(min, Math.min(max, value));
65
38
  }
66
- /**
67
- * Converts an angle in degrees to its signed equivalent in the range [-180, 180].
68
- *
69
- * @param angle - The angle in degrees to be converted.
70
- * @returns The signed angle in degrees, normalized to the range [-180, 180].
71
- */
72
- export function toSigned(angle) {
73
- const wrapped = ((angle % 360) + 360) % 360;
74
- return wrapped > 180 ? wrapped - 360 : wrapped;
75
- }
76
- /**
77
- * Converts an angle in degrees to its unsigned equivalent in the range [0, 360].
78
- *
79
- * @param angle - The angle in degrees to be converted.
80
- * @returns The unsigned angle in degrees, normalized to the range [0, 360].
81
- */
82
- export function toUnsigned(angle) {
83
- return ((angle % 360) + 360) % 360;
84
- }
85
- /**
86
- * Calculates the shortest signed arc between two angles in degrees.
87
- *
88
- * @param from - The starting angle in degrees.
89
- * @param to - The target angle in degrees.
90
- * @returns The shortest arc in degrees from `from` to `to`.
91
- */
92
- export function shortestArc(from, to) {
93
- return -toSigned((to - from + 360) % 360);
94
- }
95
- /**
96
- * Checks if two positions are equal within a specified tolerance.
97
- *
98
- * @param a - The first position.
99
- * @param b - The second position.
100
- * @param tolerance - The tolerance for comparison (default is 0.5).
101
- * @returns `true` if the positions are equal within the tolerance, otherwise `false`.
102
- */
103
- export function positionsEqual(a, b, tolerance = 0.5) {
104
- return Math.abs(a.x - b.x) < tolerance && Math.abs(a.y - b.y) < tolerance && Math.abs(a.z - b.z) < tolerance;
105
- }
106
39
  /**
107
40
  * Checks if a value is within a specified range.
108
41
  *
@@ -117,21 +50,162 @@ export function inRange(value, min, max) {
117
50
  /**
118
51
  * A utility class for performing operations on 3D vectors.
119
52
  */
120
- export class VectorOperations {
53
+ export class Vector {
121
54
  static apply(v, fn) {
122
- return { x: fn(v.x), y: fn(v.y), z: fn(v.z) };
55
+ const result = { x: fn(v.x) };
56
+ if ("y" in v)
57
+ result.y = fn(v.y);
58
+ if ("z" in v)
59
+ result.z = fn(v.z);
60
+ return result;
61
+ }
62
+ static add(v1, ...vectors) {
63
+ const result = Vector.copy(v1);
64
+ for (const v of vectors) {
65
+ result.x += v.x;
66
+ if ("y" in result && "y" in v) {
67
+ result.y += v.y;
68
+ }
69
+ if ("z" in result && "z" in v) {
70
+ result.z += v.z;
71
+ }
72
+ }
73
+ return result;
74
+ }
75
+ static subtract(v1, ...vectors) {
76
+ const result = Vector.copy(v1);
77
+ for (const v of vectors) {
78
+ result.x -= v.x;
79
+ if ("y" in result && "y" in v) {
80
+ result.y -= v.y;
81
+ }
82
+ if ("z" in result && "z" in v) {
83
+ result.z -= v.z;
84
+ }
85
+ }
86
+ return result;
87
+ }
88
+ static scalarDivide(v, scalar) {
89
+ return Vector.apply(v, (component) => component / scalar);
90
+ }
91
+ static scalarMultiply(v, scalar) {
92
+ return Vector.apply(v, (component) => component * scalar);
93
+ }
94
+ static dot(v1, v2) {
95
+ let result = v1.x * v2.x;
96
+ if ("y" in v1 && "y" in v2)
97
+ result += v1.y * v2.y;
98
+ if ("z" in v1 && "z" in v2)
99
+ result += v1.z * v2.z;
100
+ return result;
123
101
  }
124
- static add(v1, v2) {
125
- return { x: v1.x + v2.x, y: v1.y + v2.y, z: v1.z + v2.z };
102
+ static magnitude(v) {
103
+ let sumOfSquares = v.x * v.x;
104
+ if ("y" in v)
105
+ sumOfSquares += v.y * v.y;
106
+ if ("z" in v)
107
+ sumOfSquares += v.z * v.z;
108
+ return Math.sqrt(sumOfSquares);
126
109
  }
127
- static subtract(v1, v2) {
128
- return { x: v1.x - v2.x, y: v1.y - v2.y, z: v1.z - v2.z };
110
+ static normalize(v) {
111
+ const mag = Vector.magnitude(v);
112
+ if (mag === 0)
113
+ return v;
114
+ return Vector.scalarDivide(v, mag);
129
115
  }
130
- static multiply(v, scalar) {
131
- return VectorOperations.apply(v, (component) => component * scalar);
116
+ static distance(v1, v2) {
117
+ const diff = Vector.subtract(v1, v2);
118
+ return Vector.magnitude(diff);
132
119
  }
133
120
  static stringify(v) {
134
- return `${v.x} ${v.y} ${v.z}`;
121
+ let result = `${v.x}`;
122
+ if ("y" in v)
123
+ result += ` ${v.y}`;
124
+ if ("z" in v)
125
+ result += ` ${v.z}`;
126
+ return result;
127
+ }
128
+ static rotateVector(vector, rotationDegrees) {
129
+ const rad = Trigonometry.radians(rotationDegrees);
130
+ const sin = Math.sin(rad);
131
+ const cos = Math.cos(rad);
132
+ return {
133
+ x: vector.x * cos + vector.z * sin,
134
+ y: vector.y,
135
+ z: vector.x * sin + vector.z * cos,
136
+ };
137
+ }
138
+ static new(x, y, z) {
139
+ if (z === undefined) {
140
+ return { x, y };
141
+ }
142
+ else {
143
+ return { x, y, z };
144
+ }
145
+ }
146
+ static copy(vector) {
147
+ return { ...vector };
148
+ }
149
+ }
150
+ export class Trigonometry {
151
+ static fromAngle(rotation) {
152
+ if (typeof rotation === "number") {
153
+ const rad = Trigonometry.radians(rotation);
154
+ return { x: -Math.sin(rad), y: Math.cos(rad) };
155
+ }
156
+ else {
157
+ const yawRad = Trigonometry.radians(rotation.y);
158
+ const pitchRad = Trigonometry.radians(rotation.x);
159
+ return {
160
+ x: -Math.sin(yawRad) * Math.cos(pitchRad),
161
+ y: Math.sin(pitchRad),
162
+ z: Math.cos(yawRad) * Math.cos(pitchRad),
163
+ };
164
+ }
165
+ }
166
+ /** Converts an angle in degrees to radians.
167
+ *
168
+ * @param degrees - The angle in degrees to be converted.
169
+ * @returns The angle in radians.
170
+ */
171
+ static radians(degrees) {
172
+ return degrees * (Math.PI / 180);
173
+ }
174
+ /**
175
+ * Converts an angle in radians to degrees.
176
+ *
177
+ * @param radians - The angle in radians to be converted.
178
+ * @returns The angle in degrees.
179
+ */
180
+ static degrees(radians) {
181
+ return radians * (180 / Math.PI);
182
+ }
183
+ /**
184
+ * Converts an angle in degrees to its signed equivalent in the range [-180, 180].
185
+ * @param angle - The angle in degrees to be converted.
186
+ * @returns The signed angle in degrees, normalized to the range [-180, 180].
187
+ */
188
+ static signedAngle(degrees) {
189
+ const wrapped = ((degrees % 360) + 360) % 360;
190
+ return wrapped > 180 ? wrapped - 360 : wrapped;
191
+ }
192
+ /**
193
+ * Converts an angle in degrees to its unsigned equivalent in the range [0, 360].
194
+ *
195
+ * @param angle - The angle in degrees to be converted.
196
+ * @returns The unsigned angle in degrees, normalized to the range [0, 360].
197
+ */
198
+ static unsignedAngle(degrees) {
199
+ return ((degrees % 360) + 360) % 360;
200
+ }
201
+ /** Calculates the shortest arc between two angles in degrees.
202
+ *
203
+ * @param from - The starting angle in degrees.
204
+ * @param to - The target angle in degrees.
205
+ * @returns The shortest arc from the starting angle to the target angle in degrees.
206
+ */
207
+ static shortestArc(from, to) {
208
+ return -this.signedAngle((to - from + 360) % 360);
135
209
  }
136
210
  }
137
211
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/math/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/math/index.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,aAAsB,KAAK;IACjE,IAAI,CAAC,kEAAkE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,UAAU,GAAG,UAAU;aACrB,KAAK,CAAC,EAAE,CAAC;aACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;aACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IAC7D,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IAC5D,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAE/F,IAAI,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACpC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IAC9D,OAAO,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,MAAM;IAClB,MAAM,CAAC,KAAK,CAAyC,CAAI,EAAE,EAA8B;QACxF,MAAM,MAAM,GAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,IAAI,GAAG,IAAI,CAAC;YAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,GAAG,IAAI,CAAC;YAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,MAAW,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,GAAG,CAAyC,EAAK,EAAE,GAAG,OAAY;QACxE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;YACD,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;QACF,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAED,MAAM,CAAC,QAAQ,CAAyC,EAAK,EAAE,GAAG,OAAY;QAC7E,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;YACD,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;QACF,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAED,MAAM,CAAC,YAAY,CAAyC,CAAI,EAAE,MAAc;QAC/E,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,cAAc,CAAyC,CAAI,EAAE,MAAc;QACjF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,GAAG,CAAyC,EAAK,EAAE,EAAK;QAC9D,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE;YAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAClD,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE;YAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC;IACf,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,CAA+B;QAC/C,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,GAAG,IAAI,CAAC;YAAE,YAAY,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,GAAG,IAAI,CAAC;YAAE,YAAY,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,SAAS,CAAyC,CAAI;QAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,GAAG,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,QAAQ,CAAyC,EAAK,EAAE,EAAK;QACnE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,SAAS,CAAyC,CAAI;QAC5D,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACtB,IAAI,GAAG,IAAI,CAAC;YAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,IAAI,GAAG,IAAI,CAAC;YAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC;IACf,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,MAAe,EAAE,eAAuB;QAC3D,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO;YACN,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,GAAG;YAClC,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,GAAG;SAClC,CAAC;IACH,CAAC;IAID,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAU;QAC1C,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC,EAAE,CAAC,EAAa,CAAC;QAC5B,CAAC;aAAM,CAAC;YACP,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAa,CAAC;QAC/B,CAAC;IACF,CAAC;IAED,MAAM,CAAC,IAAI,CAAI,MAAS;QACvB,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;IACtB,CAAC;CACD;AAED,MAAM,OAAO,YAAY;IAcxB,MAAM,CAAC,SAAS,CAAC,QAA0B;QAC1C,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC3C,OAAO,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAa,CAAC;QAC3D,CAAC;aAAM,CAAC;YACP,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClD,OAAO;gBACN,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACzC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACrB,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;aAC7B,CAAC;QACd,CAAC;IACF,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,OAAe;QAC7B,OAAO,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,OAAe;QAC7B,OAAO,OAAO,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,OAAe;QACjC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAC9C,OAAO,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,OAAe;QACnC,OAAO,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IAEH,MAAM,CAAC,WAAW,CAAC,IAAY,EAAE,EAAU;QAC1C,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACnD,CAAC;CACD"}
@@ -0,0 +1,69 @@
1
+ import { Entity, RGBA, StartupEvent } from "@minecraft/server";
2
+ import { SimpleObject } from "../database";
3
+ interface EffectObject extends SimpleObject {
4
+ id: string;
5
+ namespace: string;
6
+ effectType: string;
7
+ amplifier: number;
8
+ duration: number;
9
+ color: RGBA;
10
+ }
11
+ interface EffectConfig {
12
+ effectType: string;
13
+ color: RGBA;
14
+ sounds?: {
15
+ ambient?: string;
16
+ start?: string;
17
+ end?: string;
18
+ };
19
+ particleType?: string;
20
+ handler: (entity: Entity, effect: EffectObject) => void;
21
+ }
22
+ interface PotionConfig {
23
+ effectKey: string;
24
+ namespace: string;
25
+ effectId: number;
26
+ handler: (entity: Entity, amplifier: number, duration: number, color: RGBA) => void;
27
+ splashRange?: number;
28
+ lingeringMaxRadius?: number;
29
+ lingeringLifetime?: number;
30
+ lingeringDurationMultiplier?: number;
31
+ }
32
+ declare class EffectManager {
33
+ private static instance;
34
+ private effectConfigs;
35
+ private potionConfigs;
36
+ private areaEffectClouds;
37
+ private cloudIdCounter;
38
+ private trackedEntities;
39
+ private entityDatabases;
40
+ static getInstance(): EffectManager;
41
+ private constructor();
42
+ private getEntityDatabase;
43
+ private getEffect;
44
+ private getAllEffects;
45
+ private hasActiveEffects;
46
+ private debug;
47
+ registerEffect(config: EffectConfig): {
48
+ addEffect: (entity: Entity, amplifier: number, durationTicks: number) => void;
49
+ removeEffect: (entity: Entity) => void;
50
+ applyEffect: (entity: Entity, effect: EffectObject) => void;
51
+ };
52
+ addEffect(entity: Entity, effectType: string, amplifier: number, duration: number): void;
53
+ removeEffect(entity: Entity, effectType: string): void;
54
+ removeAllEffects(entity: Entity): void;
55
+ hasEffect(entity: Entity, effectType: string): boolean;
56
+ getEffects(entity: Entity): EffectObject[];
57
+ registerPotion(config: PotionConfig): {
58
+ handler: (entity: Entity, amplifier: number, duration: number, color: RGBA) => void;
59
+ };
60
+ start(startup?: StartupEvent, debug?: boolean): void;
61
+ private handleProjectileHit;
62
+ private handleSplash;
63
+ private handleLingering;
64
+ private updateCloud;
65
+ private getColorFromEntity;
66
+ }
67
+ declare const effectManager: EffectManager;
68
+ export { EffectManager, effectManager, EffectObject, EffectConfig, PotionConfig };
69
+ //# sourceMappingURL=effectsAPI.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effectsAPI.d.ts","sourceRoot":"","sources":["../../src/minecraft/effectsAPI.ts"],"names":[],"mappings":"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"}