sapdon 3.2.2 → 3.3.3

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 +245 -121
  2. package/doc/dev/architecture.md +415 -0
  3. package/doc/dev/cli.md +467 -0
  4. package/doc/dev/core.md +717 -0
  5. package/doc/dev/oc.md +582 -0
  6. package/doc/user/api/biome.md +558 -0
  7. package/doc/user/api/block.md +945 -0
  8. package/doc/user/api/entity.md +685 -0
  9. package/doc/user/api/extra.md +231 -0
  10. package/doc/user/api/item.md +896 -0
  11. package/doc/user/api/recipe.md +427 -0
  12. package/doc/user/api/texture.md +181 -0
  13. package/doc/user/config/build-config.md +84 -0
  14. package/doc/user/config/mod-info.md +33 -0
  15. package/doc/user/faq.md +160 -0
  16. package/doc/user/quick-start.md +108 -0
  17. package/doc/user/tutorials/block.md +463 -0
  18. package/doc/user/tutorials/entity.md +356 -0
  19. package/doc/user/tutorials/item.md +449 -0
  20. package/doc/user/tutorials/recipe.md +278 -0
  21. package/package.json +4 -3
  22. package/prod/cli/index.js +1 -1
  23. package/prod/cli/start.js +1 -1458
  24. package/prod/core/index.d.ts +3290 -2150
  25. package/prod/core/index.js +1 -59015
  26. package/prod/core/package.json +7 -0
  27. package/prod/oc/index.d.ts +348 -108
  28. package/prod/oc/index.js +1 -1
  29. package/prod/oc/package.json +7 -0
  30. package/prod/utils/index.d.ts +20 -2
  31. package/prod/utils/index.js +1 -1
  32. package/prod/utils/package.json +7 -0
  33. package/doc/BlockAPI.md +0 -145
  34. package/doc/api.md +0 -128
  35. package/doc/oc/index.md +0 -0
  36. package/doc/sapdon-ts.md +0 -64
  37. package/src/templates/js_sapdon/build.config +0 -23
  38. package/src/templates/js_sapdon/main.mjs +0 -4
  39. package/src/templates/js_sapdon/mod.info +0 -7
  40. package/src/templates/js_sapdon/pack_icon.png +0 -0
  41. package/src/templates/js_sapdon/package.json +0 -20
  42. package/src/templates/js_sapdon/res/animations/animation_item.animation.json +0 -34
  43. package/src/templates/js_sapdon/res/animations/large_item.animation.json +0 -27
  44. package/src/templates/js_sapdon/res/models/blocks/crop.geo.json +0 -48
  45. package/src/templates/js_sapdon/res/models/entity/animation/animation_item.geo.json +0 -26
  46. package/src/templates/js_sapdon/res/models/entity/animation/large_item.geo.json +0 -28
  47. package/src/templates/js_sapdon/res/textures/blocks/none.png +0 -0
  48. package/src/templates/js_sapdon/res/textures/blocks/test_log_oak.png +0 -0
  49. package/src/templates/js_sapdon/res/textures/blocks/test_log_top.png +0 -0
  50. package/src/templates/js_sapdon/res/textures/items/masterball.png +0 -0
  51. package/src/templates/js_sapdon/scripts/custom_components/cropComponent.js +0 -50
  52. package/src/templates/js_sapdon/scripts/custom_components/items/gui_book.js +0 -37
  53. package/src/templates/js_sapdon/scripts/custom_components/registry.js +0 -25
  54. package/src/templates/js_sapdon/scripts/index.js +0 -0
  55. package/src/templates/ts_sapdon/build.config +0 -23
  56. package/src/templates/ts_sapdon/main.ts +0 -11
  57. package/src/templates/ts_sapdon/mod.info +0 -7
  58. package/src/templates/ts_sapdon/pack_icon.png +0 -0
  59. package/src/templates/ts_sapdon/package.json +0 -20
  60. package/src/templates/ts_sapdon/res/models/blocks/crop.geo.json +0 -48
  61. package/src/templates/ts_sapdon/res/textures/blocks/test_log_oak.png +0 -0
  62. package/src/templates/ts_sapdon/res/textures/blocks/test_log_top.png +0 -0
  63. package/src/templates/ts_sapdon/res/textures/items/masterball.png +0 -0
  64. package/src/templates/ts_sapdon/scripts/components/cropComponent.ts +0 -44
  65. package/src/templates/ts_sapdon/scripts/components/items/guiBook.ts +0 -36
  66. package/src/templates/ts_sapdon/scripts/components/registry.ts +0 -24
  67. package/src/templates/ts_sapdon/scripts/index.ts +0 -7
  68. package/src/templates/ts_sapdon/tsconfig.json +0 -117
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "@sapdon/core",
3
+ "version": "3.3.2",
4
+ "type": "module",
5
+ "main": "index.js",
6
+ "types": "index.d.ts"
7
+ }
@@ -1,143 +1,383 @@
1
- import * as _minecraft_server from '@minecraft/server';
2
- import { Entity, Player, InputButton } from '@minecraft/server';
1
+ import { Entity, StartupEvent, Player, ScriptEventCommandMessageAfterEvent } from '@minecraft/server';
3
2
 
3
+ declare const isOptional: unique symbol;
4
4
  declare class Optional<T = any> {
5
5
  private value;
6
6
  static none<T>(): Optional<T>;
7
7
  static some<T>(value?: T): Optional<T>;
8
8
  constructor(value: T);
9
+ private [isOptional];
9
10
  unwrap(): T;
10
11
  isEmpty(): boolean;
11
12
  orElse(other: T): T;
12
- use(fn: (v: T) => void, self?: any): boolean;
13
+ use<R = any>(fn: (v: T) => R, self?: any): R extends Optional ? R : Optional<R>;
13
14
  }
14
15
 
15
- interface Component {
16
- onTick(manager: ComponentManager, en: Optional<Entity>): void;
17
- detach(manager: ComponentManager): void;
18
- getManager(): ComponentManager;
19
- getEntity(): Optional<Entity>;
16
+ interface Component<Actor> {
17
+ onTick(dt: number): void;
18
+ detach(): void;
19
+ getManager(): ComponentManager<Actor>;
20
+ getEntity(): Optional<Actor>;
20
21
  }
21
- interface BasicComponent extends Component {
22
- onAttach(manager: ComponentManager): boolean | void | Promise<boolean | void>;
23
- onDetach(manager: ComponentManager): void | Promise<void>;
22
+ interface BasicComponent<Actor> extends Component<Actor> {
23
+ onAttach(manager: ComponentManager<Actor>): boolean | void | Promise<boolean | void>;
24
+ onDetach(manager: ComponentManager<Actor>): void | Promise<void>;
24
25
  }
25
26
  declare const REFLECT_MANAGER: unique symbol;
26
27
  declare const REFLECT_ENTITY: unique symbol;
27
- declare class CustomComponent implements Component {
28
- [REFLECT_MANAGER]?: ComponentManager;
29
- [REFLECT_ENTITY]: Optional<Entity>;
30
- onTick(manager: ComponentManager, en: Optional<Entity>): void;
31
- detach(manager: ComponentManager): Promise<boolean>;
32
- getManager(): ComponentManager;
33
- getEntity(): Optional<Entity>;
34
- }
35
- declare class BaseComponent extends CustomComponent implements BasicComponent {
36
- onAttach(manager: ComponentManager): boolean | void | Promise<boolean | void>;
37
- onDetach(manager: ComponentManager): void | Promise<void>;
38
- }
39
- interface ComponentCtor<T extends Component | BasicComponent = Component> {
28
+ declare class CustomComponent<Actor> implements Component<Actor> {
29
+ [REFLECT_MANAGER]?: ComponentManager<Actor>;
30
+ [REFLECT_ENTITY]: Optional<Actor>;
31
+ onTick(dt: number): void;
32
+ detach(): boolean;
33
+ getManager(): ComponentManager<Actor>;
34
+ getEntity(): Optional<Actor>;
35
+ lazyGet<T extends ComponentCtor<unknown>>(ctor: T): InstanceType<T>;
36
+ }
37
+ declare class BaseComponent<Actor> extends CustomComponent<Actor> implements BasicComponent<Actor> {
38
+ onAttach(manager: ComponentManager<Actor>): boolean | void | Promise<boolean | void>;
39
+ onDetach(manager: ComponentManager<Actor>): void | Promise<void>;
40
+ }
41
+ interface ComponentCtor<Actor, T extends Component<Actor> | BasicComponent<Actor> = Component<Actor>> {
40
42
  new (...args: any[]): T;
41
43
  }
42
- declare class ComponentManager {
44
+ declare class ComponentManager<Actor> {
43
45
  #private;
44
46
  static profilerEnable: boolean;
45
- static readonly global: ComponentManager;
46
- getComponentUnsafe(ctor: ComponentCtor): Component | undefined;
47
- getComponent<T extends Component>(ctor: ComponentCtor<T>): Optional<T>;
48
- getComponents(...ctor: ComponentCtor[]): (Component | undefined)[];
49
- attachComponent(...component: Component[]): Promise<Optional<Component>[]>;
50
- getOrCreate<T extends Component>(ctor: ComponentCtor<T>, ...args: any[]): Promise<Optional<T>>;
51
- detachComponent(ctor: ComponentCtor): Promise<boolean>;
47
+ static readonly global: ComponentManager<unknown>;
48
+ getComponentUnsafe<T extends ComponentCtor<Actor>>(ctor: T): InstanceType<T>;
49
+ getComponent<T extends Component<Actor>>(ctor: ComponentCtor<Actor, T>): Optional<T>;
50
+ getComponents(...ctor: ComponentCtor<Actor>[]): (Component<Actor> | undefined)[];
51
+ attachComponent(...component: Component<Actor>[]): Optional<Component<Actor>>[];
52
+ getOrCreate<T extends Component<Actor>>(ctor: ComponentCtor<Actor, T>, ...args: any[]): Promise<Optional<T>>;
53
+ detachComponent(ctor: ComponentCtor<Actor>): boolean;
52
54
  clear(): void;
53
- getComponentKeys(): MapIterator<ComponentCtor<Component>>;
54
- has(ctor: ComponentCtor): boolean;
55
- afterTick(fn: (en: Optional<Entity>) => void): void;
56
- beforeTick(fn: (en: Optional<Entity>) => void): void;
57
- handleTicks(en: Entity): void;
58
- update<T extends Component>(ctor: ComponentCtor<T>, fn: (component: T) => void): boolean;
59
- profiler(fn: Function, component?: Component, name?: string): any;
60
- }
61
- type RequireComponentsParam = ComponentCtor | [ComponentCtor, ...any[]];
55
+ getComponentKeys(): MapIterator<ComponentCtor<Actor, Component<Actor>>>;
56
+ has(ctor: ComponentCtor<Actor>): boolean;
57
+ afterTick(fn: (en: Optional<Actor>) => void): void;
58
+ beforeTick(fn: (en: Optional<Actor>) => void): void;
59
+ handleTicks(en: Actor, dt: number): void;
60
+ update<T extends Component<Actor>>(ctor: ComponentCtor<Actor, T>, fn: (component: T) => void): boolean;
61
+ profiler(fn: Function, component?: Component<Actor>, name?: string): any;
62
+ }
63
+ type RequireComponentsParam<Actor> = ComponentCtor<Actor> | [ComponentCtor<Actor>, ...any[]];
62
64
  declare const REQUIRED_COMPONENTS: unique symbol;
63
- interface RequiredComponent extends BasicComponent {
64
- getComponent<T extends Component>(ctor: ComponentCtor): T;
65
+ interface RequiredComponent<Actor> extends BasicComponent<Actor> {
66
+ getComponent<T extends Component<Actor>>(ctor: ComponentCtor<Actor>): T;
65
67
  }
66
- declare function RequireComponents(...params: RequireComponentsParam[]): {
68
+ declare function RequireComponents<Actor>(...params: RequireComponentsParam<Actor>[]): {
67
69
  new (): {
68
- getComponent<T extends Component>(ctor: ComponentCtor): T;
69
- [REQUIRED_COMPONENTS]: Map<ComponentCtor<Component>, Component>;
70
- onAttach(manager: ComponentManager): boolean | void | Promise<boolean | void>;
71
- onDetach(manager: ComponentManager): void | Promise<void>;
72
- onTick(manager: ComponentManager, en: Optional<Entity>): void;
73
- detach(manager: ComponentManager): Promise<boolean>;
74
- getManager(): ComponentManager;
75
- getEntity(): Optional<Entity>;
76
- [REFLECT_MANAGER]?: ComponentManager;
77
- [REFLECT_ENTITY]: Optional<Entity>;
70
+ getComponent<T extends Component<Actor>>(ctor: ComponentCtor<Actor>): T;
71
+ [REQUIRED_COMPONENTS]: Map<ComponentCtor<Actor, Component<Actor>>, Component<Actor>>;
72
+ onAttach(manager: ComponentManager<Actor>): boolean | void | Promise<boolean | void>;
73
+ onDetach(manager: ComponentManager<Actor>): void | Promise<void>;
74
+ onTick(dt: number): void;
75
+ detach(): boolean;
76
+ getManager(): ComponentManager<Actor>;
77
+ getEntity(): Optional<Actor>;
78
+ lazyGet<T extends ComponentCtor<unknown>>(ctor: T): InstanceType<T>;
79
+ [REFLECT_MANAGER]?: ComponentManager<Actor> | undefined;
80
+ [REFLECT_ENTITY]: Optional<Actor>;
78
81
  };
79
82
  };
80
- declare namespace oc {
81
- function addEntity(entityId: string): ComponentManager;
82
- function removeEntity(entityId: string): void;
83
- function getManager(entityId: string): ComponentManager;
84
- function tick(): void;
85
- function start(): void;
86
- function toPlayer(entity: Entity): Optional<Player>;
87
- }
88
-
89
- type ComponentDescriptor = string | ComponentCtor;
90
- declare class Actor {
91
- readonly target: Entity;
92
- readonly manager: ComponentManager;
93
- constructor(target: Entity);
94
- static from(target: Entity): Actor;
83
+ /**
84
+ * 使用前请保证组件已存在
85
+ * @param manager
86
+ * @param ctor
87
+ * @returns
88
+ */
89
+ declare function lazyGet<T extends ComponentCtor<unknown>>(component: Component<unknown>, ctor: T): InstanceType<T>;
90
+
91
+ type AxisValue = number | [number, number] | [number, number, number];
92
+ interface IKeyState {
93
+ pressing: boolean;
94
+ times: number;
95
+ consume(): void;
96
+ }
97
+ interface InputKeyMapping {
98
+ Jump: boolean;
99
+ Sneak: boolean;
100
+ Attack: boolean;
101
+ Interact: boolean;
102
+ Sprint: boolean;
103
+ }
104
+ interface InputAxisMapping {
105
+ Movement: [number, number];
106
+ }
107
+ declare class PlayerInputComponent<Actor> extends BaseComponent<Actor> {
108
+ readonly keyStateMapping: Map<string, IKeyState>;
109
+ readonly axisMapping: Map<string, AxisValue>;
110
+ inputKey(key: keyof InputKeyMapping, pressing: boolean): void;
111
+ inputAxis(key: keyof InputAxisMapping, value: AxisValue): void;
112
+ getKeyState(key: keyof InputKeyMapping): IKeyState | undefined;
113
+ getAxis(key: keyof InputAxisMapping): AxisValue | undefined;
114
+ getKeyPressing(key: keyof InputKeyMapping): boolean;
115
+ getKeyPressTimes(key: keyof InputKeyMapping): number;
116
+ exhaust(key: keyof InputKeyMapping): void;
117
+ combineAxis(axis1: AxisValue, axis2: AxisValue): number[];
118
+ splitAxis(axis: Exclude<AxisValue, number>, nDim1: number, nDim2?: number): number[][];
119
+ }
120
+
121
+ interface Scheduler<Actor> {
122
+ get currentTick(): number;
123
+ start(table: Map<string, ComponentManager<Actor>>): void;
124
+ stop(): void;
125
+ timeDilation: number;
126
+ }
127
+ declare abstract class Level<T> {
128
+ readonly table: Map<string, ComponentManager<any>>;
129
+ addEntity(entityId: string): ComponentManager<unknown>;
130
+ removeEntity(entityId: string): void;
131
+ getManager(entityId: string): ComponentManager<any>;
132
+ abstract getScheduler(): Scheduler<T>;
133
+ start(): void;
134
+ stop(): void;
135
+ }
136
+
137
+ type ConstructorOf<T, Args extends unknown[] = []> = new (...args: Args) => T;
138
+
139
+ declare function initialize(gameInstanceCls: ConstructorOf<GameInstance>, conf?: any): void;
140
+ declare function finalize(gameInstance: GameInstance): void;
141
+ interface GameInstance<A = any> {
142
+ onStart(conf: any): void;
143
+ shutdown(): void;
144
+ setLevel(lvl: Level<A>): Level<A>;
145
+ getLevel(): Level<A>;
146
+ }
147
+ declare const GameInstance: (target: Function) => void;
148
+ declare function getGameInstanceClass(): ConstructorOf<GameInstance<any>> | undefined;
149
+ declare function getGameInstance(): GameInstance<any> | undefined;
150
+
151
+ declare class ArrayEx extends Array {
152
+ constructor(init?: number[]);
153
+ set(arr: Iterable<number>): void;
154
+ }
155
+
156
+ interface Vector3 {
157
+ x: number;
158
+ y: number;
159
+ z: number;
160
+ }
161
+ declare class Vec3 extends ArrayEx implements Vector3 {
162
+ x: number;
163
+ y: number;
164
+ z: number;
165
+ constructor(init: number[]);
166
+ static fromXYZ(x: number, y: number, z: number): Vec3;
167
+ static fromVec3(vec3: Vector3): Vec3;
168
+ static m(vec3: Vector3): number;
169
+ m(): number;
170
+ static isZero(vec: Vector3): boolean;
171
+ isZero(): boolean;
172
+ static normalize(vec: Vector3): false | undefined;
173
+ n(): false | undefined;
174
+ static add(vec1: Vector3, vec2: Vector3): Vec3;
175
+ add(vec: Vector3): Vec3;
176
+ static sub(vec1: Vector3, vec2: Vector3): Vec3;
177
+ sub(vec: Vector3): Vec3;
178
+ static mul(vec: Vector3, scalar: number): Vec3;
179
+ mul(scalar: number): Vec3;
180
+ static div(vec: Vector3, scalar: number): Vec3;
181
+ div(scalar: number): Vec3;
182
+ static dot(vec1: Vector3, vec2: Vector3): number;
183
+ dot(vec: Vector3): number;
184
+ static cross(vec1: Vector3, vec2: Vector3): Vec3;
185
+ cross(vec: Vector3): Vec3;
186
+ valueOf(): ArrayEx;
187
+ toString(): string;
188
+ }
189
+
190
+ declare class Matrix extends ArrayEx {
191
+ constructor();
192
+ get m11(): any;
193
+ get m12(): any;
194
+ get m13(): any;
195
+ get m14(): any;
196
+ get m21(): any;
197
+ get m22(): any;
198
+ get m23(): any;
199
+ get m24(): any;
200
+ get m31(): any;
201
+ get m32(): any;
202
+ get m33(): any;
203
+ get m34(): any;
204
+ get m41(): any;
205
+ get m42(): any;
206
+ get m43(): any;
207
+ get m44(): any;
208
+ set m11(v: any);
209
+ set m12(v: any);
210
+ set m13(v: any);
211
+ set m14(v: any);
212
+ set m21(v: any);
213
+ set m22(v: any);
214
+ set m23(v: any);
215
+ set m24(v: any);
216
+ set m31(v: any);
217
+ set m32(v: any);
218
+ set m33(v: any);
219
+ set m34(v: any);
220
+ set m41(v: any);
221
+ set m42(v: any);
222
+ set m43(v: any);
223
+ set m44(v: any);
224
+ get a(): any;
225
+ get b(): any;
226
+ get c(): any;
227
+ get d(): any;
228
+ get e(): any;
229
+ get f(): any;
230
+ set a(v: any);
231
+ set b(v: any);
232
+ set c(v: any);
233
+ set d(v: any);
234
+ set e(v: any);
235
+ set f(v: any);
236
+ static init(init: Iterable<number>, mapfn: (v: number, k: number) => number, thisArg?: any): Matrix;
237
+ clone(): Matrix;
238
+ setIdentity(): this;
239
+ static identity(): Matrix;
240
+ static add(m1: Matrix, m2: Matrix): Matrix;
241
+ add(m: Matrix): Matrix;
242
+ static sub(m1: Matrix, m2: Matrix): Matrix;
243
+ sub(m: Matrix): Matrix;
244
+ setTranslation(x: number, y: number, z: number): this;
245
+ setRotation(angle: number, axis: Vec3): this;
246
+ setScale(x: number, y: number, z: number): this;
247
+ setRotationX(angle: number): this;
248
+ setRotationY(angle: number): this;
249
+ setRotationZ(angle: number): this;
250
+ setRotationXYZ(yaw: number, pitch: number, roll: number): this;
251
+ static translate(mat: Matrix, vec: Vector3): Matrix;
252
+ translate(vec: Vector3): Matrix;
253
+ static transpose(mat: Matrix): any[];
254
+ transpose(): any[];
255
+ static multiply(mat1: Matrix, t: Matrix | Vector4): number[] | Vec4;
256
+ multiply(t: Matrix | Vector4): number[] | Vec4;
257
+ valueOf(): ArrayEx;
258
+ toString(): string;
259
+ static perspective(fov: number, aspect: number, near: number, far: number): number[];
260
+ static orthographic(right: number, top: number, near: number, far: number): number[];
261
+ static lookAt(eye: Vector3, target: Vector3, up: Vector3): number[];
262
+ }
263
+
264
+ interface Vector4 extends Vector3 {
265
+ w: number;
266
+ }
267
+ declare class Vec4 extends ArrayEx implements Vector4 {
268
+ x: number;
269
+ y: number;
270
+ z: number;
271
+ w: number;
272
+ constructor(init: number[]);
273
+ static fromXYZW(x: number, y: number, z: number, w: number): Vec4;
274
+ static fromVec3(vec3: Vector4): Vec4;
275
+ static fromVec4(vec4: Vector4): Vec4;
276
+ static m(vec: Vector4): number;
277
+ m(): number;
278
+ static isZero(vec: Vector4): boolean;
279
+ isZero(): boolean;
280
+ static normalize(vec: Vector4): false | undefined;
281
+ n(): false | undefined;
282
+ static add(vec1: Vector4, vec2: Vector4): Vec4;
283
+ add(vec: Vector4): Vec4;
284
+ static sub(vec1: Vector4, vec2: Vector4): Vec4;
285
+ sub(vec: Vector4): Vec4;
286
+ static mul(vec: Vector4, scalar: number): Vec4;
287
+ mul(scalar: number): Vec4;
288
+ static div(vec: Vector4, scalar: number): Vec4;
289
+ div(scalar: number): Vec4;
290
+ static dot(vec1: Vector4, vec2: Vector4): number;
291
+ dot(vec: Vector4): number;
292
+ static multiply(vec: Vector4, mat: Matrix): number[] | Vec4;
293
+ multiply(mat: Matrix): number[] | Vec4;
294
+ valueOf(): ArrayEx;
295
+ toString(): string;
296
+ }
297
+
298
+ declare namespace MathExt {
299
+ function clamp(val: number, min: number, max: number): number;
300
+ function lerps(a: number, b: number, scalar: number): number;
301
+ function lerpVec3(a: Vec3, b: Vec3, scalar: number): Vec3;
302
+ function lerpVec4(a: Vec4, b: Vec4, scalar: number): Vec4;
303
+ function lerp(a: number, b: number, scalar: number): number;
304
+ function lerp(a: Vec3, b: Vec3, scalar: number): Vec3;
305
+ function lerp(a: Vec4, b: Vec4, scalar: number): Vec4;
306
+ }
307
+
308
+ declare class MinecraftTickingScheduler implements Scheduler<string> {
309
+ private _run;
310
+ private _currentTick;
311
+ private _timeStamp;
312
+ get currentTick(): number;
313
+ _handleTick(table: Map<string, ComponentManager<any>>, dt: number): void;
314
+ executeTick(table: Map<string, ComponentManager<any>>): void;
315
+ start(table: Map<string, ComponentManager<any>>): void;
316
+ stop(): void;
317
+ timeDilation: number;
318
+ }
319
+ declare class MinecraftLevel extends Level<Entity> {
320
+ readonly scheduler: MinecraftTickingScheduler;
321
+ getScheduler(): Scheduler<Entity>;
322
+ }
323
+ declare abstract class MinecraftGameInstance implements GameInstance {
324
+ level?: Level<Entity>;
325
+ setLevel(lvl: Level<Entity>): Level<Entity>;
326
+ getLevel(): Level<Entity>;
95
327
  /**
96
- * 优先使用 `Actor.getComponent`
97
- * @param ctors
98
- * @returns
328
+ * Startup 阶段完成时运行
329
+ * @param ev
99
330
  */
100
- getMinecraftComponent(...ids: string[]): (_minecraft_server.EntityComponent | undefined)[];
331
+ onStart(ev: StartupEvent): void;
101
332
  /**
102
- * 优先使用 `Actor.getComponent`
103
- * @param ctors
104
- * @returns
333
+ * shutdown 阶段运行
105
334
  */
106
- getCustomComponent(...ctors: ComponentCtor[]): (Component | undefined)[];
107
- getComponent<T extends readonly ComponentDescriptor[] | []>(...descs: T): {
108
- -readonly [K in keyof T]: Component;
109
- };
110
- addComponent(...components: Component[]): Promise<Optional<Component>[]>;
111
- removeComponent(ctor: ComponentCtor): Promise<boolean>;
112
- updateComponent<T extends Component>(ctor: ComponentCtor<T>, fn: (component: T) => void): boolean;
335
+ shutdown(): void;
336
+ /**
337
+ * onStart 之后运行,用于绑定监听器等 (onStart时没有权限进行绑定)
338
+ */
339
+ afterStart(): void;
113
340
  }
114
341
 
115
- declare enum InputChangeState {
116
- Press = 0,
117
- Release = 1,
118
- None = 2
342
+ declare function assertInMinecraft(): void;
343
+ declare const Minecraft: ClassDecorator;
344
+ declare const MinecraftMain: (target: any) => void;
345
+ declare const PlayerSpawned: (...deps: ComponentCtor<Player>[]) => (target: any) => void;
346
+ declare const EntitySpawned: (...deps: ComponentCtor<Player>[]) => (target: any) => void;
347
+ declare const ActorSpawned: (...deps: ComponentCtor<Player>[]) => (target: any) => void;
348
+ declare const SpawnFilter: (filter: (entity: Entity) => boolean) => (target: any) => void;
349
+
350
+ declare class MinecraftPlayerInputComponent extends PlayerInputComponent<Entity> {
351
+ private playerRef;
352
+ onTick(): void;
353
+ syncAxisAndButtons(): void;
119
354
  }
120
- /**
121
- * `@minecraft/server` version 2.0.0-beta
122
- * 低于此版本请不要使用此组件
123
- */
124
- declare class PlayerInputComponent extends BaseComponent {
125
- [InputButton.Jump]: InputChangeState;
126
- [InputButton.Sneak]: InputChangeState;
127
- static setup(): void;
355
+
356
+ declare function MinecraftMethod(target: any, propertyKey: string, descriptor: PropertyDescriptor): PropertyDescriptor;
357
+ declare class Utils {
358
+ toPlayer(entity: Entity): Optional<Player>;
359
+ start(): void;
128
360
  }
129
- /**
130
- * `@minecraft/server` version 1.17.0-beta
131
- * 1tick 延迟
132
- * 条件允许请使用 `PlayerInputComponent`
133
- */
134
- declare class PlayerInputCompatibilityComponent extends BaseComponent {
135
- [InputButton.Jump]: InputChangeState;
136
- [InputButton.Sneak]: InputChangeState;
137
- private _lastJump;
138
- private _lastSneak;
139
- onTick(manager: ComponentManager, en: Optional<Entity>): void;
361
+ declare const utils: Utils;
362
+
363
+ declare abstract class HudComponent<Actor, Hud> extends CustomComponent<Actor> {
364
+ hud?: Hud;
365
+ actor: Optional<Actor>;
366
+ abstract render(): Hud;
367
+ abstract draw(): void;
368
+ onTick(dt: number): void;
369
+ }
370
+
371
+ declare abstract class PlayerHudComponent extends HudComponent<Player, string> {
372
+ abstract render(): string;
373
+ draw(): void;
140
374
  }
141
375
 
142
- export { Actor, BaseComponent, ComponentManager, CustomComponent, InputChangeState, Optional, PlayerInputCompatibilityComponent, PlayerInputComponent, RequireComponents, oc };
143
- export type { BasicComponent, Component, ComponentCtor, ComponentDescriptor, RequiredComponent };
376
+ declare const ScriptEvent: {
377
+ on: (evType: string, handler: (ev: ScriptEventCommandMessageAfterEvent) => void) => void;
378
+ off: (evType: string, handler: (ev: ScriptEventCommandMessageAfterEvent) => void) => void;
379
+ (evType: string): MethodDecorator;
380
+ };
381
+
382
+ export { ActorSpawned, BaseComponent, ComponentManager, CustomComponent, EntitySpawned, GameInstance, HudComponent, MathExt, Matrix, Minecraft, MinecraftGameInstance, MinecraftLevel, MinecraftMain, MinecraftMethod, MinecraftPlayerInputComponent, MinecraftTickingScheduler, Optional, PlayerHudComponent, PlayerInputComponent, PlayerSpawned, RequireComponents, ScriptEvent, SpawnFilter, Vec3, Vec4, assertInMinecraft, finalize, getGameInstance, getGameInstanceClass, initialize, lazyGet, utils };
383
+ export type { AxisValue, BasicComponent, Component, ComponentCtor, IKeyState, InputAxisMapping, InputKeyMapping, RequiredComponent, Vector3, Vector4 };
package/prod/oc/index.js CHANGED
@@ -1 +1 @@
1
- import{world as t,system as e,InputButton as n,ButtonState as s}from"@minecraft/server";class o{value;static none(){return new o(null)}static some(t){return new o(t)}constructor(t){this.value=t}unwrap(){if(!this.isEmpty())return this.value;throw new Error("Optional is empty")}isEmpty(){return void 0===this.value||null===this.value}orElse(t){return this.value??t}use(t,e){return!this.isEmpty()&&(t.call(e,this.value),!0)}}const r=Symbol("reflect-manager"),a=Symbol("reflect-entity");class i{[r];[a]=o.none();onTick(t,e){}detach(t){const e=Object.getPrototypeOf(this).constructor;return t.detachComponent(e)}getManager(){return this[r]}getEntity(){return this[a]}}class c extends i{onAttach(t){}onDetach(t){}}class p{static profilerEnable=!1;static global=new p;#t=new Map;#e=[];#n=[];getComponentUnsafe(t){return this.#t.get(t)}getComponent(t){return o.some(this.#t.get(t))}getComponents(...t){return t.map((t=>this.#t.get(t)))}async#s(t,e,n=!0){let s=!this.#t.get(t);if(!s&&n&&(await this.detachComponent(t),s=!0),u in e)for(const[t,n]of e[u])this.#s(t,n,!1);return s&&"onAttach"in e&&await e.onAttach(this),this.#t.set(t,e),o.some(e)}async attachComponent(...t){const e=[];for(const n of t)e.push(await this.#s(Object.getPrototypeOf(n).constructor,n));return e}async getOrCreate(t,...e){let n=this.#t.get(t);return n?o.some(n):this.#s(t,new t(...e))}async detachComponent(t){const e=this.#t.get(t);return e&&"onDetach"in e&&await e.onDetach(this),this.#t.delete(t)}clear(){this.#t.clear()}getComponentKeys(){return this.#t.keys()}has(t){return this.#t.has(t)}afterTick(t){this.#n.push(t)}beforeTick(t){this.#e.unshift(t)}handleTicks(t){for(const e of this.#e)this.profiler((()=>e.call(null,o.some(t))));this.#e.length=0;for(const e of this.#t.values()){e[a]||(e[a]=o.some(t)),e[r]||(e[r]=this);const{onTick:n}=e;n&&this.profiler((()=>n.call(e,this,o.some(t))),e)}for(const e of this.#n)this.profiler((()=>e.call(null,o.some(t))));this.#n.length=0}update(t,e){const n=this.#t.get(t);return!!n&&(e(n),!0)}profiler(t,e,n){if(!p.profilerEnable)return t();const s=e?Object.getPrototypeOf(e).constructor.name:"",o=n||(s?`${s}.${t.name}`:t.name),r=performance.now(),a=t();return console.log(`[Profiler] ${o} took ${performance.now()-r}ms`),a}}const u=Symbol("REQUIRED_COMPONENTS");function l(...t){return class extends c{[u]=new Map;constructor(){super();for(const e of t)if(Array.isArray(e)){const[t,...n]=e;this[u].set(t,Reflect.construct(t,n))}else this[u].set(e,Reflect.construct(e,[]))}getComponent(t){return this[u].get(t)}}}var h,m;!function(n){const s=new Map;function r(t){const e=new p;return s.set(t,e),e}function a(){for(const[e,n]of s.entries()){const s=t.getEntity(e);s&&n.handleTicks(s)}}n.addEntity=r,n.removeEntity=function(t){const e=t,n=s.get(e);n?.clear(),s.delete(e)},n.getManager=function(t){return s.get(t)??r(t)},n.tick=a,n.start=function(){e.runInterval(a)},n.toPlayer=function(e){return o.some(t.getAllPlayers().find((t=>t.id===e.id)))}}(h||(h={}));class f{target;manager;constructor(t){this.target=t,this.manager=h.getManager(t.id)}static from(t){return new f(t)}getMinecraftComponent(...t){return t.map((t=>this.target.getComponent(t)))}getCustomComponent(...t){return this.manager.getComponents(...t)}getComponent(...t){return t.map((t=>"string"==typeof t?this.target.getComponent(t):this.manager.getComponentUnsafe(t)))}addComponent(...t){return this.manager.attachComponent(...t)}removeComponent(t){return this.manager.detachComponent(t)}updateComponent(t,e){return this.manager.update(t,e)}}!function(t){t[t.Press=0]="Press",t[t.Release=1]="Release",t[t.None=2]="None"}(m||(m={}));class g extends c{[n.Jump]=m.None;[n.Sneak]=m.None;static setup(){t.afterEvents.playerButtonInput.subscribe((t=>{const e=h.getManager(t.player.id);e.getComponent(g).use((n=>{n[t.button]=t.newButtonState===s.Pressed?m.Press:m.Release,e.afterTick((()=>{n[t.button]=m.None}))}))}))}}class d extends c{[n.Jump]=m.None;[n.Sneak]=m.None;_lastJump=s.Released;_lastSneak=s.Released;onTick(t,e){const o=h.toPlayer(e.unwrap()).unwrap(),r=o.inputInfo.getButtonState(n.Jump),a=o.inputInfo.getButtonState(n.Sneak);r===s.Pressed&&this._lastJump===s.Released?this[n.Jump]=m.Press:r===s.Released&&this._lastJump===s.Pressed?this[n.Jump]=m.Release:this[n.Jump]=m.None,a===s.Pressed&&this._lastSneak===s.Released?this[n.Sneak]=m.Press:a===s.Released&&this._lastSneak===s.Pressed?this[n.Sneak]=m.Release:this[n.Sneak]=m.None,this._lastJump=r,this._lastSneak=a}}export{f as Actor,c as BaseComponent,p as ComponentManager,i as CustomComponent,m as InputChangeState,o as Optional,d as PlayerInputCompatibilityComponent,g as PlayerInputComponent,l as RequireComponents,h as oc};
1
+ import{system as t,world as e,ButtonState as s}from"@minecraft/server";const n=Symbol("isOptional");class r{value;static none(){return new r(null)}static some(t){return new r(t)}constructor(t){this.value=t}[n]=n;unwrap(){if(!this.isEmpty())return this.value;throw new Error("Optional is empty")}isEmpty(){return void 0===this.value||null===this.value}orElse(t){return this.value??t}use(t,e){if(!this.isEmpty()){const s=t.call(e,this.value);return s[n]?s:r.some(t.call(e,this.value))}return r.none()}}const i=Symbol("reflect-manager"),o=Symbol("reflect-entity");class m{[i];[o]=r.none();onTick(t){}detach(){const t=Object.getPrototypeOf(this).constructor;return this.getManager().detachComponent(t)}getManager(){return this[i]}getEntity(){return this[o]}lazyGet(t){return l(this,t)}}class h extends m{onAttach(t){}onDetach(t){}}class a{static profilerEnable=!1;static global=new a;#t=new Map;#e=[];#s=[];getComponentUnsafe(t){return this.#t.get(t)}getComponent(t){return r.some(this.#t.get(t))}getComponents(...t){return t.map(t=>this.#t.get(t))}#n(t,e,s=!0){e[i]||(e[i]=this);let n=!this.#t.get(t);if(!n&&s&&(this.detachComponent(t),n=!0),c in e)for(const[t,s]of e[c])e.getManager().getComponentUnsafe(t)||this.#n(t,s,!1);return n&&"onAttach"in e&&e.onAttach(this),this.#t.set(t,e),r.some(e)}attachComponent(...t){const e=[];for(const s of t)e.push(this.#n(Object.getPrototypeOf(s).constructor,s));return e}async getOrCreate(t,...e){let s=this.#t.get(t);return s?r.some(s):this.#n(t,new t(...e))}detachComponent(t){const e=this.#t.get(t);return e&&"onDetach"in e&&e.onDetach(this),this.#t.delete(t)}clear(){this.#t.clear()}getComponentKeys(){return this.#t.keys()}has(t){return this.#t.has(t)}afterTick(t){this.#s.push(t)}beforeTick(t){this.#e.unshift(t)}handleTicks(t,e){for(const e of this.#e)this.profiler(()=>e.call(null,r.some(t)));this.#e.length=0;for(const s of this.#t.values()){s[o].isEmpty()&&(s[o]=r.some(t));const{onTick:n}=s;n&&this.profiler(()=>n.call(s,e),s)}for(const e of this.#s)this.profiler(()=>e.call(null,r.some(t)));this.#s.length=0}update(t,e){const s=this.#t.get(t);return!!s&&(e(s),!0)}profiler(t,e,s){if(!a.profilerEnable)return t();const n=e?Object.getPrototypeOf(e).constructor.name:"",r=s||(n?`${n}.${t.name}`:t.name),i=performance.now(),o=t();return console.log(`[Profiler] ${r} took ${performance.now()-i}ms`),o}}const c=Symbol("REQUIRED_COMPONENTS");function u(...t){return class extends h{[c]=new Map;constructor(){super();for(const e of t){if(Array.isArray(e)){const[t,...s]=e;this[c].set(t,Reflect.construct(t,s));continue}this[c].set(e,Reflect.construct(e,[]))}}getComponent(t){return this[c].get(t)}}}function l(t,e){let s=null;return new Proxy(Object.create(Object.prototype),{get:(n,r)=>(s||(s=t.getManager().getComponentUnsafe(e)),s[r]),set:(n,r,i)=>s?(s[r]=i,!0):(s=t.getManager().getComponentUnsafe(e),s[r]=i,!0)})}class p extends Array{constructor(t){super(),Array.isArray(t)&&this.set(t)}set(t){let e=0;for(const s of t)this[e]=s,e++}}class d extends p{x=0;y=0;z=0;constructor(t){super(t),this.x=t[0]||0,this.y=t[1]||0,this.z=t[2]||0}static fromXYZ(t,e,s){return new d([t,e,s])}static fromVec3(t){return new d([t.x,t.y,t.z])}static m(t){const{x:e,y:s,z:n}=t;return Math.sqrt(e*e+s*s+n*n)}m(){return d.m(this)}static isZero(t){return 0===t.x&&0===t.y&&0===t.z}isZero(){return d.isZero(this)}static normalize(t){if(this.isZero(t))return!1;const{x:e,y:s,z:n}=t,r=this.m(t);t.x=e/r,t.y=s/r,t.z=n/r}n(){return d.normalize(this)}static add(t,e){return new d([t.x+e.x,t.y+e.y,t.z+e.z])}add(t){return d.add(this,t)}static sub(t,e){return new d([t.x-e.x,t.y-e.y,t.z-e.z])}sub(t){return d.sub(this,t)}static mul(t,e){return new d([t.x*e,t.y*e,t.z*e])}mul(t){return d.mul(this,t)}static div(t,e){return new d([t.x/e,t.y/e,t.z/e])}div(t){return d.div(this,t)}static dot(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}dot(t){return d.dot(this,t)}static cross(t,e){return new d([t.y*e.z-t.z*e.y,t.z*e.x-t.x*e.z,t.x*e.y-t.y*e.x])}cross(t){return d.cross(this,t)}valueOf(){return new p([this.x,this.y,this.z])}toString(){return`(${this.x.toFixed(2)}, ${this.y.toFixed(2)}, ${this.z.toFixed(2)})`}}class f extends p{constructor(){super([].fill(0,0,16)),this.fill(0)}get m11(){return this[0]}get m12(){return this[1]}get m13(){return this[2]}get m14(){return this[3]}get m21(){return this[4]}get m22(){return this[5]}get m23(){return this[6]}get m24(){return this[7]}get m31(){return this[8]}get m32(){return this[9]}get m33(){return this[10]}get m34(){return this[11]}get m41(){return this[12]}get m42(){return this[13]}get m43(){return this[14]}get m44(){return this[15]}set m11(t){this[0]=t}set m12(t){this[1]=t}set m13(t){this[2]=t}set m14(t){this[3]=t}set m21(t){this[4]=t}set m22(t){this[5]=t}set m23(t){this[6]=t}set m24(t){this[7]=t}set m31(t){this[8]=t}set m32(t){this[9]=t}set m33(t){this[10]=t}set m34(t){this[11]=t}set m41(t){this[12]=t}set m42(t){this[13]=t}set m43(t){this[14]=t}set m44(t){this[15]=t}get a(){return this.m11}get b(){return this.m12}get c(){return this.m21}get d(){return this.m22}get e(){return this.m41}get f(){return this.m42}set a(t){this.m11=t}set b(t){this.m12=t}set c(t){this.m21=t}set d(t){this.m22=t}set e(t){this.m41=t}set f(t){this.m42=t}static init(t,e,s){const n=p.from(t,e,s),r=new f;return r.set(n),r}clone(){return f.init(this.slice(),t=>t)}setIdentity(){return this.set([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),this}static identity(){const t=new f;return t.setIdentity(),t}static add(t,e){const s=new f;return s.set(t.map((t,s)=>t+e[s])),s}add(t){return f.add(this,t)}static sub(t,e){const s=new f;return s.set(t.map((t,s)=>t-e[s])),s}sub(t){return f.sub(this,t)}setTranslation(t,e,s){return this.m14=t,this.m24=e,this.m34=s,this}setRotation(t,e){d.normalize(e);const s=Math.sin(t),n=Math.cos(t),r=e.x,i=e.y,o=e.z,m=1-n,h=m*r*r+n,a=m*r*i-s*o,c=m*r*o+s*i,u=m*r*i+s*o,l=m*i*i+n,p=m*i*o-s*r,f=m*r*o-s*i,y=m*i*o+s*r,x=m*o*o+n;return this.m11=h,this.m12=a,this.m13=c,this.m21=u,this.m22=l,this.m23=p,this.m31=f,this.m32=y,this.m33=x,this}setScale(t,e,s){return this.m11*=t,this.m22*=e,this.m33*=s,this}setRotationX(t){const e=Math.sin(t),s=Math.cos(t);return this.m11=1,this.m12=0,this.m13=0,this.m21=0,this.m22=s,this.m23=e,this.m31=0,this.m32=-e,this.m33=s,this}setRotationY(t){const e=Math.sin(t),s=Math.cos(t);return this.m11=s,this.m12=0,this.m13=-e,this.m21=0,this.m22=1,this.m23=0,this.m31=e,this.m32=0,this.m33=s,this}setRotationZ(t){const e=Math.sin(t),s=Math.cos(t);return this.m11=s,this.m12=e,this.m13=0,this.m21=-e,this.m22=s,this.m23=0,this.m31=0,this.m32=0,this.m33=1,this}setRotationXYZ(t,e,s){const n=Math.sin(t),r=Math.cos(t),i=Math.sin(e),o=Math.cos(e),m=Math.sin(s),h=Math.cos(s);return this.m11=r*h+n*i*m,this.m12=r*m-n*i*h,this.m13=n*o,this.m21=n*h-r*i*m,this.m22=r*h-n*i*h,this.m23=r*i,this.m31=n*m+r*i*h,this.m32=-n*h+r*i*m,this.m33=r*o,this}static translate(t,e){const{x:s,y:n,z:r}=e,i=t.clone();return i.m14=i.m11*s+i.m21*n+i.m31*r+s,i.m24=i.m21*s+i.m22*n+i.m32*r+n,i.m34=i.m31*s+i.m32*n+i.m33*r+r,i}translate(t){return f.translate(this,t)}static transpose(t){return this.from([t.m11,t.m21,t.m31,t.m41,t.m12,t.m22,t.m32,t.m42,t.m13,t.m23,t.m33,t.m43,t.m14,t.m24,t.m34,t.m44])}transpose(){return f.transpose(this)}static multiply(t,e){return e instanceof f?this.from([t.m11*e.m11+t.m12*e.m21+t.m13*e.m31+t.m14*e.m41,t.m11*e.m12+t.m12*e.m22+t.m13*e.m32+t.m14*e.m42,t.m11*e.m13+t.m12*e.m23+t.m13*e.m33+t.m14*e.m43,t.m11*e.m14+t.m12*e.m24+t.m13*e.m34+t.m14*e.m44,t.m21*e.m11+t.m22*e.m21+t.m23*e.m31+t.m24*e.m41,t.m21*e.m12+t.m22*e.m22+t.m23*e.m32+t.m24*e.m42,t.m21*e.m13+t.m22*e.m23+t.m23*e.m33+t.m24*e.m43,t.m21*e.m14+t.m22*e.m24+t.m23*e.m34+t.m24*e.m44,t.m31*e.m11+t.m32*e.m21+t.m33*e.m31+t.m34*e.m41,t.m31*e.m12+t.m32*e.m22+t.m33*e.m32+t.m34*e.m42,t.m31*e.m13+t.m32*e.m23+t.m33*e.m33+t.m34*e.m43,t.m31*e.m14+t.m32*e.m24+t.m33*e.m34+t.m34*e.m44,t.m41*e.m11+t.m42*e.m21+t.m43*e.m31+t.m44*e.m41,t.m41*e.m12+t.m42*e.m22+t.m43*e.m32+t.m44*e.m42,t.m41*e.m13+t.m42*e.m23+t.m43*e.m33+t.m44*e.m43,t.m41*e.m14+t.m42*e.m24+t.m43*e.m34+t.m44*e.m44]):new y([t.m11*e.x+t.m12*e.y+t.m13*e.z+t.m14*e.w,t.m21*e.x+t.m22*e.y+t.m23*e.z+t.m24*e.w,t.m31*e.x+t.m32*e.y+t.m33*e.z+t.m34*e.w,t.m41*e.x+t.m42*e.y+t.m43*e.z+t.m44*e.w])}multiply(t){return f.multiply(this,t)}valueOf(){return new p(this)}toString(){return`${this.m11.toFixed(2)}\t${this.m12.toFixed(2)}\t${this.m13.toFixed(2)}\t${this.m14.toFixed(2)}\n${this.m21.toFixed(2)}\t${this.m22.toFixed(2)}\t${this.m23.toFixed(2)}\t${this.m24.toFixed(2)}\n${this.m31.toFixed(2)}\t${this.m32.toFixed(2)}\t${this.m33.toFixed(2)}\t${this.m34.toFixed(2)}\n${this.m41.toFixed(2)}\t${this.m42.toFixed(2)}\t${this.m43.toFixed(2)}\t${this.m44.toFixed(2)}\n`}static perspective(t,e,s,n){const r=Math.tan(t/2),i=r*e;return f.from([s/i,0,0,0,0,1/r,0,0,0,0,-(s+n)/(n-s),-2*n*s/(n-s),0,0,-1,0])}static orthographic(t,e,s,n){return f.from([1/t,0,0,0,0,1/e,0,0,0,0,-2/(n-s),-(n+s)/(n-s),0,0,0,1])}static lookAt(t,e,s){const n=d.sub(e,t);n.n();const r=d.cross(s,n);r.n();const i=d.cross(n,r);return i.n(),f.from([r.x,r.y,r.z,-d.dot(r,t),i.x,i.y,i.z,-d.dot(i,t),n.x,n.y,n.z,-d.dot(n,t),0,0,0,1])}}class y extends p{x=0;y=0;z=0;w=0;constructor(t){super(t),this.x=t[0]||0,this.y=t[1]||0,this.z=t[2]||0,this.w=t[3]||0}static fromXYZW(t,e,s,n){return new y([t,e,s,n])}static fromVec3(t){return new y([t.x,t.y,t.z])}static fromVec4(t){return new y([t.x,t.y,t.z,t.w])}static m(t){const{x:e,y:s,z:n,w:r}=t;return Math.sqrt(e*e+s*s+n*n+r*r)}m(){return y.m(this)}static isZero(t){return 0===t.x&&0===t.y&&0===t.z&&0===t.w}isZero(){return y.isZero(this)}static normalize(t){if(this.isZero(t))return!1;const{x:e,y:s,z:n,w:r}=t,i=this.m(t);t.x=e/i,t.y=s/i,t.z=n/i,t.w=r/i}n(){return y.normalize(this)}static add(t,e){return new y([t.x+e.x,t.y+e.y,t.z+e.z,t.w+e.w])}add(t){return y.add(this,t)}static sub(t,e){return new y([t.x-e.x,t.y-e.y,t.z-e.z,t.w-e.w])}sub(t){return y.sub(this,t)}static mul(t,e){return new y([t.x*e,t.y*e,t.z*e,t.w*e])}mul(t){return y.mul(this,t)}static div(t,e){return new y([t.x/e,t.y/e,t.z/e,t.w/e])}div(t){return y.div(this,t)}static dot(t,e){return t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w}dot(t){return y.dot(this,t)}static multiply(t,e){return f.multiply(e,t)}multiply(t){return y.multiply(this,t)}valueOf(){return new p([this.x,this.y,this.z,this.w])}toString(){return`(${this.x.toFixed(2)}, ${this.y.toFixed(2)}, ${this.z.toFixed(2)}, ${this.w.toFixed(2)})`}}var x;!function(t){function e(t,e,s){return t+(e-t)*s}function s(t,s,n){return d.fromXYZ(e(t.x,s.x,n),e(t.y,s.y,n),e(t.z,s.z,n))}function n(t,s,n){return y.fromXYZW(e(t.x,s.x,n),e(t.y,s.y,n),e(t.z,s.z,n),e(t.w,s.w,n))}t.clamp=function(t,e,s){return Math.min(Math.max(t,e),s)},t.lerps=e,t.lerpVec3=s,t.lerpVec4=n,t.lerp=function(t,r,i){return"number"==typeof t?e(t,r,i):"w"in t?n(t,r,i):s(t,r,i)}}(x||(x={}));class g{pressing;times;constructor(t=!1,e=0){this.pressing=t,this.times=e}consume(){this.times--}}class w extends h{keyStateMapping=new Map;axisMapping=new Map;inputKey(t,e){let s=this.keyStateMapping.get(t)??new g;e?(s.pressing=!0,s.times++):(s.pressing=!1,s.times--),this.keyStateMapping.set(t,s)}inputAxis(t,e){this.axisMapping.set(t,e)}getKeyState(t){return this.keyStateMapping.get(t)}getAxis(t){return this.axisMapping.get(t)}getKeyPressing(t){return this.getKeyState(t)?.pressing??!1}getKeyPressTimes(t){return this.getKeyState(t)?.times??0}exhaust(t){const e=this.getKeyState(t);e&&(e.times=0)}combineAxis(t,e){return Array.isArray(t)||(t=[t]),Array.isArray(e)||(e=[e]),t.concat(e)}splitAxis(t,e,s){return e=x.clamp(e,0,t.length-1),s||(s=t.length-e),[t.slice(0,e),t.slice(e,e+s)]}}let v,b;function z(t,e={}){b=Reflect.construct(t,[]),b?.onStart?.(e)}function E(t){t?.shutdown?.()}const _=t=>{v=t};function M(){return v}function A(){return b}var S=function(t,e,s,n){var r,i=arguments.length,o=i<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,s):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,s,n);else for(var m=t.length-1;m>=0;m--)(r=t[m])&&(o=(i<3?r(o):i>3?r(e,s,o):r(e,s))||o);return i>3&&o&&Object.defineProperty(e,s,o),o};function L(t,e,s){const n=s.value;return s.value=(...e)=>($(),n.apply(t,e)),s}class k{toPlayer(t){return r.some(t)}start(){t?.beforeEvents?.startup&&(t.beforeEvents.startup.subscribe(t=>{const e=M();if(!e)throw new Error("No game instance class found");z(e,t)}),t.beforeEvents.shutdown.subscribe(t=>{const e=A();e&&E(e)})),e?.beforeEvents?.worldInitialize&&e.beforeEvents.worldInitialize.subscribe(t=>{const e=M();if(!e)throw new Error("No game instance class found");z(e,t)})}}S([L],k.prototype,"toPlayer",null),S([L],k.prototype,"start",null);const R=new k;function C(t){return t?.[Symbol.metadata]}function $(){if(!e)throw new Error("Not running in the Minecraft host environment. required @minecraft/server")}Symbol.metadata||(Symbol.metadata=Symbol("[[metadata]]"));const T=t=>new Proxy(t,{construct:(t,e)=>($(),Reflect.construct(t,e))}),F=t=>{$(),_(t),R.start(),e.afterEvents.playerSpawn.subscribe(t=>A()?.getLevel().getManager(t.player.id).attachComponent(...O(D).filter(e=>C(e)?.spawnFilter?.(t.player)??!0).map(t=>Reflect.construct(t,[])))),e.afterEvents.entitySpawn.subscribe(t=>{"minecraft:player"!==t.entity.typeId&&A()?.getLevel().getManager(t.entity.id).attachComponent(...O(P).filter(e=>C(e)?.spawnFilter?.(t.entity)??!0).map(t=>Reflect.construct(t,[])))})};function O(t){return Array.from(new Set(t))}const D=[],P=[],j=(...t)=>e=>{D.push(...t,e)},Z=(...t)=>e=>{P.push(...t,e)},N=(...t)=>e=>{D.push(...t,e),P.push(...t,e)},I=t=>e=>{const s=function(t){if(null==t)return;return t?.[Symbol.metadata]??(t[Symbol.metadata]={})}(e);s.spawnFilter=t};class H{table=new Map;addEntity(t){const e=new a;return this.table.set(t,e),e}removeEntity(t){const e=t,s=this.table.get(e);s?.clear(),this.table.delete(e)}getManager(t){return this.table.get(t)??this.addEntity(t)}start(){this.getScheduler().start(this.table)}stop(){this.getScheduler().stop()}}var K=function(t,e,s,n){var r,i=arguments.length,o=i<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,s):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,s,n);else for(var m=t.length-1;m>=0;m--)(r=t[m])&&(o=(i<3?r(o):i>3?r(e,s,o):r(e,s))||o);return i>3&&o&&Object.defineProperty(e,s,o),o};let U=class{_run=0;_currentTick=0;_timeStamp=0;get currentTick(){return this._currentTick}_handleTick(t,s){for(const[n,r]of t.entries()){const t=e.getEntity(n);t&&r.handleTicks(t,s)}}executeTick(t){if(!this.timeDilation)return;const e=this._currentTick;if((this._currentTick+=this.timeDilation)-e<1)return;const s=this._timeStamp,n=((this._timeStamp=Date.now())-s)*this.timeDilation;this._handleTick(t,n)}start(e){this._timeStamp=Date.now(),this._run=t.runInterval(this.executeTick.bind(this,e))}stop(){t.clearRun(this._run)}timeDilation=1};U=K([T],U);let V=class extends H{scheduler=new U;getScheduler(){return this.scheduler}};V=K([T],V);class X{level;setLevel(t){return this.level?.stop?.(),t.start(),this.level=t}getLevel(){return this.level}onStart(e){this.setLevel(new V),t.runTimeout(()=>this.afterStart(),1)}shutdown(){this.level?.stop?.()}afterStart(){}}class Y extends w{playerRef=r.none();static{e.afterEvents.playerButtonInput.subscribe(t=>{const e=A()?.getLevel()?.getManager(t.player.id).getComponentUnsafe(Y);e?.inputKey(t.button,t.newButtonState===s.Pressed)})}onTick(){this.playerRef.isEmpty()?this.getEntity().use(t=>this.playerRef=R.toPlayer(t)):this.syncAxisAndButtons()}syncAxisAndButtons(){const t=this.playerRef.unwrap().inputInfo,{x:e,y:s}=t.getMovementVector();this.inputAxis("Movement",[e,s])}}class q extends m{hud;actor=r.none();onTick(t){this.hud=this.render(),this.draw()}}class B extends q{draw(){if(this.actor.isEmpty())return void(this.actor=R.toPlayer(this.getEntity().unwrap()));this.actor.unwrap().runCommand(`title @s actionbar ${this.hud}`)}}class W{static map=new Map;HEAD={prev:null,next:null};END=this.HEAD;count=0;append(t,e){const s=this.END,n={prev:s,listener:t,rawListener:e,next:null};return n.prev=s,n.listener=t,n.rawListener=e,n.next=null,s.next=n,this.END=n,W.map.set(e||t,n),this.count++,this}prepend(t,e){const s=this.HEAD,n=s.next,r={prev:s,listener:t,rawListener:e,next:n};return s.next=r,n&&(n.prev=r),W.map.set(e||t,r),this.count++,this}delete(t){let e=W.map,s=e.get(t);if(!s)return;let n=s.prev;return n.next=s.next,s.next&&(s.next.prev=n),e.delete(t),this.count--,requestIdleCallback(()=>{s.prev=null,s.next=null}),this}deleteAll(){let t=this.HEAD;for(;t=t.next;)t.prev=null,t.next=null,W.map.delete(t.rawListener||t.listener);return this.HEAD.next=null,this.count=0,this}[Symbol.iterator](){let t=this.HEAD;return{next:()=>t.next?(t=t.next,{value:t,done:!1}):{value:t,done:!0}}}}const G=new class{_events={};maxListeners=-1;thisArg=void 0;captureRejections=!1;setMaxListeners(t){return this.maxListeners=t,this}getMaxListeners(){return this.maxListeners}_addListener(t,e,s=!1){let n;if(!~this.maxListeners&&this.listenerCount(t)===this.maxListeners){const t=RangeError(`Exceeded maximum capacity(${this.maxListeners}).`);if(!this.listenerCount("error"))throw t;this._emitError(t)}this._events[t]||(this._events[t]=new W),n=this._events[t],s?n.prepend(e):n.append(e)}addListener(t,e){return this._addListener(t,e),this}on(t,e){return this._addListener(t,e),this}prependListener(t,e){return this._addListener(t,e,!0),this}_removeListener(t,e){let s;(s=this._events[t])&&(s.delete(e),s.count||delete this._events[t])}removeListener(t,e){return this._removeListener(t,e),this}off(t,e){return this._removeListener(t,e),this}removeAllListeners(t){let e;(e=this._events[t])&&(e.deleteAll(),delete this._events[t])}_emit(t,e,s){let n;if(n=this._events[t],n)try{let t=this.captureRejections,r=n.HEAD;for(;r=r.next;){const n=r.listener.apply(e,s);t&&n instanceof Promise&&n.catch(t=>{if(!this.listenerCount("error"))throw t;this._emitError(t)})}}catch(t){if(!this.listenerCount("error"))throw t;this._emitError(t)}}_emitError(t){this._emit("error",void 0,[t])}emit(t,...e){this._emit(t,this.thisArg,e)}emitNone(t,...e){this._emit(t,void 0,e)}bind(t){return this.thisArg=t,this}_onceWrapper(t,e){return(...s)=>{this._removeListener(t,e);return e.apply(this.thisArg,s)}}_once(t,e,s=!1){if(!~this.maxListeners&&this.listenerCount(t)===this.maxListeners){const t=RangeError(`Exceeded maximum capacity(${this.maxListeners}).`);if(!this.listenerCount("error"))throw t;this._emitError(t)}const n=this._onceWrapper(t,e);let r;this._events[t]||(this._events[t]=new W),r=this._events[t],s?r.prepend(n,e):r.append(n,e)}once(t,e){return this._once(t,e),this}prependOnceListener(t,e){return this._once(t,e,!0),this}listenerCount(t){let e;return e=this._events[t],e?e.count:0}listeners(t){let e,s=[];if(e=this._events[t],!e)return s;let n=e.HEAD;for(;n=n.next;)s.push(n.listener);return s}rawListeners(t){let e,s=[];if(e=this._events[t],!e)return s;let n=e.HEAD;for(;n=n.next;)n.rawListener&&s.push(n.rawListener);return s}eventNames(){return Object.getOwnPropertyNames(this._events)}constructor(t){if(t){const{thisArg:e,captureRejections:s}=t;void 0!==e&&(this.thisArg=e),s&&(this.captureRejections=!0)}}};t.afterEvents.scriptEventReceive.subscribe(t=>{G.emitNone(t.id,t)});const Q=t=>(e,s)=>{G.on(t,e[s])};Q.on=(t,e)=>{G.on(t,e)},Q.off=(t,e)=>{G.off(t,e)};export{N as ActorSpawned,h as BaseComponent,a as ComponentManager,m as CustomComponent,Z as EntitySpawned,_ as GameInstance,q as HudComponent,x as MathExt,f as Matrix,T as Minecraft,X as MinecraftGameInstance,V as MinecraftLevel,F as MinecraftMain,L as MinecraftMethod,Y as MinecraftPlayerInputComponent,U as MinecraftTickingScheduler,r as Optional,B as PlayerHudComponent,w as PlayerInputComponent,j as PlayerSpawned,u as RequireComponents,Q as ScriptEvent,I as SpawnFilter,d as Vec3,y as Vec4,$ as assertInMinecraft,E as finalize,A as getGameInstance,M as getGameInstanceClass,z as initialize,l as lazyGet,R as utils};
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "@sapdon/runtime",
3
+ "version": "3.3.2",
4
+ "type": "module",
5
+ "main": "index.js",
6
+ "types": "index.d.ts"
7
+ }
@@ -1,5 +1,23 @@
1
1
  declare function getMetadata(target: any): any;
2
2
  declare function getOrCreateMetadata(target: any): any;
3
+ declare function mixin<T extends object, S extends object, R = T>(target: T, ...source: S[]): R;
4
+ declare class NonNullMap<K, V> implements Map<K, V> {
5
+ private readonly empty;
6
+ constructor(empty: () => V);
7
+ clear(): void;
8
+ delete(key: K): boolean;
9
+ forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void;
10
+ get(key: K): V | undefined;
11
+ set(key: K, value: V): this;
12
+ has(key: K): boolean;
13
+ get size(): number;
14
+ entries(): MapIterator<[K, V]>;
15
+ keys(): MapIterator<K>;
16
+ values(): MapIterator<V>;
17
+ [Symbol.iterator](): MapIterator<[K, V]>;
18
+ get [Symbol.toStringTag](): string;
19
+ private readonly map;
20
+ }
3
21
 
4
22
  interface ISerializer {
5
23
  (instance: any): object;
@@ -24,7 +42,7 @@ interface EncodeDecoder<Base, Trans> {
24
42
  decode: (chunk: Trans) => Base;
25
43
  }
26
44
 
27
- type ConstructorOf<T, Arg extends unknown[] = []> = new (...args: Arg) => T;
45
+ type ConstructorOf<T, Args extends unknown[] = []> = new (...args: Args) => T;
28
46
 
29
47
  type FloatLiteral = `${number}.${number}`;
30
48
  interface RawType<T> extends RawJSON {
@@ -38,5 +56,5 @@ declare const f64: (literal: FloatLiteral) => {
38
56
  };
39
57
  declare function isRawJSON(v: any): boolean;
40
58
 
41
- export { Serializable, Serializer, decode, defaultSerializer, encode, f64, getMetadata, getOrCreateMetadata, isRawJSON, jsonEncodeDecoder, jsonEncoderReplacer, serialize };
59
+ export { NonNullMap, Serializable, Serializer, decode, defaultSerializer, encode, f64, getMetadata, getOrCreateMetadata, isRawJSON, jsonEncodeDecoder, jsonEncoderReplacer, mixin, serialize };
42
60
  export type { ConstructorOf, EncodeDecoder, FloatLiteral, ISerializer, RawType };
@@ -1 +1 @@
1
- function n(n){return n?.[Symbol.metadata]}function t(n){if(null==n)return;return n?.[Symbol.metadata]??(n[Symbol.metadata]={})}Symbol.metadata||(Symbol.metadata=Symbol("[[metadata]]"));const e=Symbol("isRawJSON"),r=n=>{const t=JSON.rawJSON(n).rawJSON;return{[e]:!0,rawJSON:t,valueOf:()=>parseFloat(n)}};function o(n){return!0===n?.[e]}const a=["boolean","number"],c=["string","undefined"];function i(n,t){const e=typeof t;if(null===e)return null;if(c.includes(e))return t;if(a.includes(e))return JSON.rawJSON(t);if("object"===e)return JSON.isRawJSON(t)?t:o(t)?JSON.rawJSON(t.rawJSON):t;if("bigint"===e)return JSON.rawJSON(t.toString());throw new Error("Unexpected value")}const s=n=>structuredClone(n),u=Symbol("serializer"),l=new WeakMap;function S(n=s){return(e,r)=>{if("class"!==r.kind)throw new Error("Serializable decorator can only be applied to classes");t(r)[u]=n}}const f=(n,t)=>{const e=n.constructor;if(!e)throw new Error("Cannot serialize an instance of an anonymous class");l.set(e,n[t])};function d(t){const e=Reflect.getPrototypeOf(t)?.constructor;if(!e)throw new Error("Cannot serialize an instance of an anonymous class");return(n(e)?.[u]??l.get(e)??s).call(t,t)}const w={encode:n=>JSON.stringify(n,i),decode:JSON.parse};function O(n,t=w){return t.encode(n)}function m(n,t=w){return t.decode(n)}export{S as Serializable,f as Serializer,m as decode,s as defaultSerializer,O as encode,r as f64,n as getMetadata,t as getOrCreateMetadata,o as isRawJSON,w as jsonEncodeDecoder,i as jsonEncoderReplacer,d as serialize};
1
+ function t(t){return t?.[Symbol.metadata]}function e(t){if(null==t)return;return t?.[Symbol.metadata]??(t[Symbol.metadata]={})}function r(t,...e){return Object.assign(t,...e)}Symbol.metadata||(Symbol.metadata=Symbol("[[metadata]]"));class n{empty;constructor(t){this.empty=t}clear(){this.map.clear()}delete(t){return this.map.delete(t)}forEach(t,e){this.map.forEach(t,e)}get(t){const e=this.map.get(t);if(null==e){const e=this.empty();return this.map.set(t,e),e}return e}set(t,e){return this.map.set(t,e),this}has(t){return this.map.has(t)}get size(){return this.map.size}entries(){return this.map.entries()}keys(){return this.map.keys()}values(){return this.map.values()}[Symbol.iterator](){return this.map[Symbol.iterator]()}get[Symbol.toStringTag](){return this.map[Symbol.toStringTag]}map=new Map}const a=Symbol("isRawJSON"),o=t=>{const e=JSON.rawJSON(t).rawJSON;return{[a]:!0,rawJSON:e,valueOf:()=>parseFloat(t)}};function s(t){return!0===t?.[a]}const i=["boolean","number"],u=["string","undefined"];function c(t,e){const r=typeof e;if(null===r)return null;if(u.includes(r))return e;if(i.includes(r))return JSON.rawJSON(e);if("object"===r)return JSON.isRawJSON(e)?e:s(e)?JSON.rawJSON(e.rawJSON):e;if("bigint"===r)return JSON.rawJSON(e.toString());throw new Error("Unexpected value")}const l=t=>structuredClone(t),m=Symbol("serializer"),S=new WeakMap;function f(t=l){return(r,n)=>{if("class"!==n.kind)throw new Error("Serializable decorator can only be applied to classes");e(n)[m]=t}}const p=(t,e)=>{const r=t.constructor;if(!r)throw new Error("Cannot serialize an instance of an anonymous class");S.set(r,t[e])};function h(e){const r=Reflect.getPrototypeOf(e)?.constructor;if(!r)throw new Error("Cannot serialize an instance of an anonymous class");return(t(r)?.[m]??S.get(r)??l).call(e,e)}const d={encode:t=>JSON.stringify(t,c),decode:JSON.parse};function y(t,e=d){return e.encode(t)}function b(t,e=d){return e.decode(t)}export{n as NonNullMap,f as Serializable,p as Serializer,b as decode,l as defaultSerializer,y as encode,o as f64,t as getMetadata,e as getOrCreateMetadata,s as isRawJSON,d as jsonEncodeDecoder,c as jsonEncoderReplacer,r as mixin,h as serialize};
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "@sapdon/utils",
3
+ "version": "3.3.2",
4
+ "type": "module",
5
+ "main": "index.js",
6
+ "types": "index.d.ts"
7
+ }