export interface BlockState { id: string properties?: Record } export interface Block { state: number pos: [number, number, number] nbt?: Record } export interface Entity { pos: [number, number, number] nbt: Record } export interface Structure { size: [number, number, number] palette: BlockState[] blocks: Block[] entities: Entity[] /** The same blocks as a flat `[state, x, y, z, state, x, y, z, …]` run. */ readonly raw: Int32Array /** Block entity nbt, keyed by the block's index in `raw`. */ readonly blockNbt: Map> } export interface ChunkRef { cx: number cz: number region: string index: number } export interface BlockBox { x0: number z0: number x1: number z1: number y0?: number y1?: number includeAir?: boolean } export interface Blocks { palette: BlockState[] blocks: Block[] entities: Entity[] /** The same blocks as a flat `[state, x, y, z, state, x, y, z, …]` run. */ readonly raw: Int32Array /** Block entity nbt, keyed by the block's index in `raw`. */ readonly blockNbt: Map> } export interface BlockResult extends Blocks { chunks: { read: number, missing: number, outdated: number } } export interface ChunkGrid { palette: BlockState[] /** `256 * height` cells of `(y - yMin) * 256 + z * 16 + x`, 0 for air or a one-based palette index. */ grid: Uint16Array blockEntities: { x: number, y: number, z: number, nbt: Record }[] empty: boolean biomes: ChunkBiomes } export interface ChunkBiomes { /** Biome ids, such as `"minecraft:plains"`. */ palette: string[] /** One byte per block, indexed like the block grid: 0 when unknown or a one-based palette index. */ grid: Uint8Array } export type Progress = (done: number, total: number) => void export interface World { name: string dimension: string dimensions: string[] chunks: ChunkRef[] structures: string[] blocks(box: BlockBox, onProgress?: Progress): Promise chunk(chunk: ChunkRef): Promise | null> chunkExtent(chunk: ChunkRef, options?: { yMin?: number, yMax?: number }): Promise<{ top: number, bottom: number } | null> chunkBlocks(chunk: ChunkRef, options?: ChunkBlocksOptions): Promise chunkGrid(chunk: ChunkRef, options?: { yMin?: number, yMax?: number }): Promise setDimension(id: string, onProgress?: Progress): Promise structure(rel: string): Promise file(path: string): Promise } export type Source = Uint8Array | ArrayBuffer | ArrayBufferView | Blob export interface ReadOptions { region?: [number, number] dimension?: string onProgress?: Progress cacheSize?: number } export function read(src: Source, options?: ReadOptions): Promise export interface ChunkBlocksOptions { yMin?: number yMax?: number includeAir?: boolean } export function chunkBlocks(nbt: Record | null | undefined, options?: ChunkBlocksOptions): Blocks /** The biome of every block in a chunk. Without a y range it covers every section the chunk has. */ export function chunkBiomes(nbt: Record | null | undefined, options?: { yMin?: number, yMax?: number }): ChunkBiomes export type Keys = string | Iterable export interface ReadNBTOptions { littleEndian?: boolean skip?: Keys only?: Keys } export function readNBT(input: Uint8Array | ArrayBuffer, options?: ReadNBTOptions): Promise> export function parseState(str: string): BlockState export function normState(v: T): T | BlockState export const AIR: RegExp export const REAL_AIR: RegExp