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.
- package/README.md +245 -121
- package/doc/dev/architecture.md +415 -0
- package/doc/dev/cli.md +467 -0
- package/doc/dev/core.md +717 -0
- package/doc/dev/oc.md +582 -0
- package/doc/user/api/biome.md +558 -0
- package/doc/user/api/block.md +945 -0
- package/doc/user/api/entity.md +685 -0
- package/doc/user/api/extra.md +231 -0
- package/doc/user/api/item.md +896 -0
- package/doc/user/api/recipe.md +427 -0
- package/doc/user/api/texture.md +181 -0
- package/doc/user/config/build-config.md +84 -0
- package/doc/user/config/mod-info.md +33 -0
- package/doc/user/faq.md +160 -0
- package/doc/user/quick-start.md +108 -0
- package/doc/user/tutorials/block.md +463 -0
- package/doc/user/tutorials/entity.md +356 -0
- package/doc/user/tutorials/item.md +449 -0
- package/doc/user/tutorials/recipe.md +278 -0
- package/package.json +4 -3
- package/prod/cli/index.js +1 -1
- package/prod/cli/start.js +1 -1458
- package/prod/core/index.d.ts +3290 -2150
- package/prod/core/index.js +1 -59015
- package/prod/core/package.json +7 -0
- package/prod/oc/index.d.ts +348 -108
- package/prod/oc/index.js +1 -1
- package/prod/oc/package.json +7 -0
- package/prod/utils/index.d.ts +20 -2
- package/prod/utils/index.js +1 -1
- package/prod/utils/package.json +7 -0
- package/doc/BlockAPI.md +0 -145
- package/doc/api.md +0 -128
- package/doc/oc/index.md +0 -0
- package/doc/sapdon-ts.md +0 -64
- package/src/templates/js_sapdon/build.config +0 -23
- package/src/templates/js_sapdon/main.mjs +0 -4
- package/src/templates/js_sapdon/mod.info +0 -7
- package/src/templates/js_sapdon/pack_icon.png +0 -0
- package/src/templates/js_sapdon/package.json +0 -20
- package/src/templates/js_sapdon/res/animations/animation_item.animation.json +0 -34
- package/src/templates/js_sapdon/res/animations/large_item.animation.json +0 -27
- package/src/templates/js_sapdon/res/models/blocks/crop.geo.json +0 -48
- package/src/templates/js_sapdon/res/models/entity/animation/animation_item.geo.json +0 -26
- package/src/templates/js_sapdon/res/models/entity/animation/large_item.geo.json +0 -28
- package/src/templates/js_sapdon/res/textures/blocks/none.png +0 -0
- package/src/templates/js_sapdon/res/textures/blocks/test_log_oak.png +0 -0
- package/src/templates/js_sapdon/res/textures/blocks/test_log_top.png +0 -0
- package/src/templates/js_sapdon/res/textures/items/masterball.png +0 -0
- package/src/templates/js_sapdon/scripts/custom_components/cropComponent.js +0 -50
- package/src/templates/js_sapdon/scripts/custom_components/items/gui_book.js +0 -37
- package/src/templates/js_sapdon/scripts/custom_components/registry.js +0 -25
- package/src/templates/js_sapdon/scripts/index.js +0 -0
- package/src/templates/ts_sapdon/build.config +0 -23
- package/src/templates/ts_sapdon/main.ts +0 -11
- package/src/templates/ts_sapdon/mod.info +0 -7
- package/src/templates/ts_sapdon/pack_icon.png +0 -0
- package/src/templates/ts_sapdon/package.json +0 -20
- package/src/templates/ts_sapdon/res/models/blocks/crop.geo.json +0 -48
- package/src/templates/ts_sapdon/res/textures/blocks/test_log_oak.png +0 -0
- package/src/templates/ts_sapdon/res/textures/blocks/test_log_top.png +0 -0
- package/src/templates/ts_sapdon/res/textures/items/masterball.png +0 -0
- package/src/templates/ts_sapdon/scripts/components/cropComponent.ts +0 -44
- package/src/templates/ts_sapdon/scripts/components/items/guiBook.ts +0 -36
- package/src/templates/ts_sapdon/scripts/components/registry.ts +0 -24
- package/src/templates/ts_sapdon/scripts/index.ts +0 -7
- package/src/templates/ts_sapdon/tsconfig.json +0 -117
package/prod/oc/index.d.ts
CHANGED
|
@@ -1,143 +1,383 @@
|
|
|
1
|
-
import
|
|
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) =>
|
|
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(
|
|
17
|
-
detach(
|
|
18
|
-
getManager(): ComponentManager
|
|
19
|
-
getEntity(): Optional<
|
|
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<
|
|
30
|
-
onTick(
|
|
31
|
-
detach(
|
|
32
|
-
getManager(): ComponentManager
|
|
33
|
-
getEntity(): Optional<
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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:
|
|
47
|
-
getComponent<T extends Component
|
|
48
|
-
getComponents(...ctor: ComponentCtor[]): (Component | undefined)[];
|
|
49
|
-
attachComponent(...component: Component[]):
|
|
50
|
-
getOrCreate<T extends Component
|
|
51
|
-
detachComponent(ctor: ComponentCtor):
|
|
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<
|
|
56
|
-
beforeTick(fn: (en: Optional<
|
|
57
|
-
handleTicks(en:
|
|
58
|
-
update<T extends Component
|
|
59
|
-
profiler(fn: Function, component?: Component
|
|
60
|
-
}
|
|
61
|
-
type RequireComponentsParam = ComponentCtor | [ComponentCtor
|
|
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
|
|
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
|
|
69
|
-
[REQUIRED_COMPONENTS]: Map<ComponentCtor<Component
|
|
70
|
-
onAttach(manager: ComponentManager): boolean | void | Promise<boolean | void>;
|
|
71
|
-
onDetach(manager: ComponentManager): void | Promise<void>;
|
|
72
|
-
onTick(
|
|
73
|
-
detach(
|
|
74
|
-
getManager(): ComponentManager
|
|
75
|
-
getEntity(): Optional<
|
|
76
|
-
|
|
77
|
-
[
|
|
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
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
*
|
|
97
|
-
* @param
|
|
98
|
-
* @returns
|
|
328
|
+
* 在 Startup 阶段完成时运行
|
|
329
|
+
* @param ev
|
|
99
330
|
*/
|
|
100
|
-
|
|
331
|
+
onStart(ev: StartupEvent): void;
|
|
101
332
|
/**
|
|
102
|
-
*
|
|
103
|
-
* @param ctors
|
|
104
|
-
* @returns
|
|
333
|
+
* 在 shutdown 阶段运行
|
|
105
334
|
*/
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
|
|
143
|
-
|
|
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};
|
package/prod/utils/index.d.ts
CHANGED
|
@@ -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,
|
|
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 };
|
package/prod/utils/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
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};
|