@tendrock/database
Version:
A database lib under the Tendrock ecosystem for Minecraft Bedrock Edition Script API
97 lines (96 loc) • 5.14 kB
TypeScript
import { Block, Entity, ItemStack, World } from "@minecraft/server";
import { BlockDatabase, EntityDatabase, ItemStackDatabase, WorldDatabase } from "../impl";
import { GameObjectDatabase } from "../GameObjectDatabase";
import { DatabaseTypes } from "../DatabaseTypes";
import { ConstructorRegistry } from "../instance/ConstructorRegistry";
import { TendrockDynamicPropertyValue } from "../DynamicPropertySerializer";
import { InstanceData } from "../instance";
export type Constructor<T> = new (...args: any[]) => T;
export type GameObjectType = Block | Entity | ItemStack | World | string;
export type DatabaseTypeBy<T> = T extends (string | Block) ? BlockDatabase : T extends Entity ? EntityDatabase : T extends ItemStack ? ItemStackDatabase : WorldDatabase;
export type DatabaseFactory<T extends Block | Entity | ItemStack | World | string> = {
create(manager: DatabaseManager, gameObject: T, initialIdList?: [string, string][]): InstanceType<DatabaseFactory<T>>;
} & (new (...args: any[]) => any);
export type DatabaseTypeMap = {
[DatabaseTypes.Entity]: EntityDatabase;
[DatabaseTypes.Block]: BlockDatabase;
[DatabaseTypes.Item]: ItemStackDatabase;
[DatabaseTypes.World]: WorldDatabase;
};
export declare class DatabaseManager {
static Instance: DatabaseManager;
private readonly _databaseManagerMap;
private readonly _eventCallbackMap;
private readonly _changingEntityDatabaseBuffer;
private _isInitialized;
private _autoFlushTaskId;
private _flushInterval;
private _autoUpdateSourceEntity;
private _autoFlush;
private _blockDatabaseMap;
private _itemDatabaseMap;
private _entityDatabaseMap;
private _worldDatabase;
private _blockInitialIdListMap;
private _worldInitialIdList;
private _isFlushing;
private _dirtyDatabaseList;
private _dirtyDatabaseBuffer;
protected constructor();
private _triggerStartupEventWhenSystemStartup;
private _loadAndParseWorldDynamicPropertiesGenerator;
private _loadWorldDynamicProperties;
private _loadWorldDynamicPropertiesWhenWorldLoad;
private _addBlockDataId;
private _addWorldDataId;
protected _initWorldDataGenerator(): Generator<void, void, void>;
protected _initBlockDataGenerator(): Generator<void, void, void>;
private _initWorldBlockDataGenerator;
private _doStartup;
whenStartup(callback: (event: {
constructorRegistry: ConstructorRegistry;
}) => void): () => void;
private _doReady;
whenReady(callback: () => void): (() => void) | undefined;
isReady(): boolean;
_markDirty(runtimeId: string, dataBase: GameObjectDatabase<any>): void;
setFlushInterval(interval: number, flush?: boolean): void;
getFlushInterval(): number;
setAutoFlush(value?: boolean): void;
autoFlush(): boolean;
setAutoUpdateSourceEntity(value?: boolean): void;
autoUpdateSourceEntity(): boolean;
private _flushDatabase;
private _flushDataGenerator;
private _flushDatabaseSync;
private _flushSyncImpl;
flushSync(): void;
private _flushWhenShutdown;
flush(): void;
private _flushDataWhenPlayerLeave;
private _clearFlushJobIfPresent;
private _startAutoFlushTask;
private _beginFlush;
private _endFlush;
private _prepare;
createIfAbsent<T extends Block | Entity | ItemStack | World | string>(gameObject: T): DatabaseTypeBy<T>;
get<T extends Block | Entity | ItemStack | World | string>(gameObject: T): DatabaseTypeBy<T> | undefined;
remove<T extends Block | Entity | ItemStack | World | string>(gameObject: T, clearProperty?: boolean): void;
getDatabaseList<T extends DatabaseTypes>(type: T): DatabaseTypeMap[T][];
getWorldDatabase(): DatabaseTypeBy<World> | undefined;
_addDatabase<T extends Block | Entity | ItemStack | World | string>(runtimeId: string, database: DatabaseTypeBy<T>): void;
setData(gameObject: GameObjectType, identifier: string, value: TendrockDynamicPropertyValue): void;
getData<T extends TendrockDynamicPropertyValue>(gameObject: GameObjectType, identifier: string): T;
deleteData(gameObject: GameObjectType, identifier: string): boolean;
buildDataInstanceIfPresent<T extends InstanceData<any>>(gameObject: GameObjectType, identifier: string, objectConstructor: Constructor<T>, options?: (Parameters<T['onConstruct']>[0])): T | undefined;
getBuiltDataInstance<T extends InstanceData<any>>(gameObject: GameObjectType, identifier: string): T | undefined;
createDataInstanceIfAbsent<T extends InstanceData<any>>(gameObject: GameObjectType, identifier: string, objectConstructor: Constructor<T>, options?: (Parameters<T['onConstruct']>[0])): T;
getDirtyDatabaseList(): Array<GameObjectDatabase<any>>;
getAllDirtyDatabaseList(): Array<GameObjectDatabase<any>>;
_setChangingEntityDatabaseBuffer(runtimeId: string, locationId: string, entityDatabase: EntityDatabase): void;
_getChangingEntityDatabaseBuffer(runtimeId: string, locationId: string): {
entityDatabase: EntityDatabase | undefined;
cleanBuffer: () => void;
};
}
export declare const databaseManager: DatabaseManager;