UNPKG

@tendrock/database

Version:

A database lib under the Tendrock ecosystem for Minecraft Bedrock Edition Script API

97 lines (96 loc) 5.14 kB
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;