Skip to main content

bedrock_world/
bedrock_world.rs

1//! Tools for inspecting and editing Minecraft Bedrock `LevelDB` worlds.
2//!
3//! `bedrock-world` focuses on world-level concepts layered above
4//! `bedrock-leveldb`: `level.dat`, little-endian Bedrock NBT, chunk and
5//! subchunk decoding, player records, entity summaries, biome data, map/village
6//! records, and scan-oriented APIs for launchers or offline tools.
7//!
8//! The default APIs are deliberately lazy. Opening a [`BedrockWorld`] does not
9//! parse the full database; callers choose targeted operations such as
10//! [`read_level_dat`], [`BedrockWorld::list_players_blocking`],
11//! [`BedrockWorld::parse_chunk_blocking`], or [`BedrockWorld::scan_items_blocking`].
12//! Async wrappers use `tokio::task::spawn_blocking` so `LevelDB` and NBT work does
13//! not run on foreground async tasks.
14//!
15//! # Features
16//!
17//! docs.rs builds this crate with all features enabled. Default builds enable
18//! `async` and the `bedrock-leveldb` backend. Disable default features for
19//! pure parsing, in-memory storage, `level.dat`, and NBT workflows that should
20//! not depend on a database backend.
21
22#![deny(missing_docs)]
23#![allow(
24    clippy::cast_possible_truncation,
25    clippy::cast_possible_wrap,
26    clippy::cast_precision_loss,
27    clippy::cast_sign_loss,
28    clippy::items_after_test_module,
29    clippy::missing_errors_doc,
30    clippy::must_use_candidate,
31    clippy::needless_pass_by_value,
32    clippy::struct_excessive_bools,
33    clippy::type_complexity,
34    clippy::wildcard_imports
35)]
36
37/// Chunk keys, subchunk formats, palette data, and legacy terrain helpers.
38pub mod chunk;
39/// Filesystem discovery for Bedrock world folders.
40pub mod discover;
41/// Crate-wide error and result types.
42pub mod error;
43/// `level.dat` header parsing, validation, and atomic write helpers.
44pub mod level_dat;
45/// Little-endian Bedrock NBT reader and writer.
46pub mod nbt;
47/// Structured parsers for world, chunk, entity, biome, map, and village data.
48pub mod parsed;
49/// Player identifiers and raw player record helpers.
50pub mod player;
51/// Professional map query helpers and guarded world edits.
52pub mod query;
53/// Storage abstraction and LevelDB backend adapters.
54pub mod storage;
55/// High-level lazy world handle and scan/render helpers.
56pub mod world;
57
58pub use chunk::{
59    ActorDigestKey, ActorUid, BedrockDbKey, BlockPalette, BlockPos, BlockState, Chunk, ChunkKey,
60    ChunkPos, ChunkRecord, ChunkRecordTag, ChunkVersion, Dimension, EntityData, GlobalRecordKind,
61    LEGACY_SUBCHUNK_BLOCK_COUNT, LEGACY_SUBCHUNK_MIN_VALUE_LEN,
62    LEGACY_SUBCHUNK_WITH_LIGHT_VALUE_LEN, LEGACY_TERRAIN_BLOCK_COUNT, LEGACY_TERRAIN_VALUE_LEN,
63    LegacyBiomeSample, LegacySubChunk, LegacyTerrain, MapRecordId, ParsedVillageKey, SubChunk,
64    SubChunkDecodeMode, SubChunkFormat, VillageRecordKind, block_storage_index,
65};
66pub use discover::{WorldDiscovery, WorldSummary, discover_worlds};
67pub use error::{BedrockWorldError, BedrockWorldErrorKind, Result};
68pub use level_dat::{
69    LevelDatDocument, LevelDatHeader, LevelDatReadWarning, parse_level_dat_document,
70    read_level_dat, read_level_dat_document, write_level_dat_atomic, write_level_dat_document,
71};
72#[cfg(feature = "async")]
73pub use level_dat::{read_level_dat_async, write_level_dat_atomic_async};
74pub use nbt::{NbtEvent, NbtReader, NbtRef, NbtTag, NbtValue, NbtView, NbtWriter};
75pub use parsed::{
76    ActorRecord, ActorResolution, ActorSource, Biome2d, Biome3d, BlockEntityRecord,
77    HardcodedSpawnAreaKind, HeightMap2d, ItemStack, MapKnownFields, MapPixels, ParsedActorDigest,
78    ParsedBiomeData, ParsedBiomeStorage, ParsedBlockEntity, ParsedChunkData, ParsedChunkRecord,
79    ParsedChunkRecordValue, ParsedDbEntry, ParsedDbValue, ParsedEntity, ParsedGlobalData,
80    ParsedHardcodedSpawnArea, ParsedMapData, ParsedPlayer, ParsedVillageData, ParsedWorld,
81    RetentionMode, WorldParseCategories, WorldParseOptions, WorldParseReport,
82};
83pub use player::{PlayerData, PlayerId};
84pub use query::{
85    BlockEntityOverlay, BlockTip, ChunkDetail, ChunkRecordDetail, EntityOverlay,
86    HardcodedSpawnAreaOverlay, RegionOverlayQuery, RegionOverlayQueryOptions, SelectionStats,
87    SlimeChunkBounds, SlimeChunkWindow, SlimeWindowSize, VillageOverlay, VillageOverlayIndex,
88    WriteGuard, delete_chunks_blocking, is_bedrock_slime_chunk, is_slime_chunk,
89    query_block_tip_blocking, query_chunk_detail_blocking, query_region_overlays_blocking,
90    query_region_overlays_blocking_with_control, query_selection_stats_blocking,
91    query_slime_chunk_windows, write_chunk_record_nbt_blocking,
92};
93pub use storage::{
94    MemoryStorage, POCKET_CHUNKS_DAT_TERRAIN_VALUE_LEN, PocketChunksDatStorage, StorageBatch,
95    StorageCancelFlag, StorageEntry, StorageEntryRef, StorageOp, StoragePipelineOptions,
96    StorageProgressSink, StorageReadOptions, StorageScanMode, StorageScanOutcome,
97    StorageScanProgress, StorageThreadingOptions, StorageVisitorControl, WorldStorage,
98    backend::BedrockLevelDbStorage,
99};
100pub use world::{
101    BedrockWorld, CancelFlag, ChunkBounds, ExactSurfaceBiomeLoad, ExactSurfaceSubchunkPolicy,
102    OpenOptions, ProgressSink, RenderBlockEntity, RenderChunkData, RenderChunkLoadOptions,
103    RenderChunkPriority, RenderChunkRegion, RenderChunkRequest, RenderLoadStats, RenderRegionData,
104    RenderRegionLoadOptions, SurfaceColumn, SurfaceColumnOptions, TerrainColumnBiome,
105    TerrainColumnOverlay, TerrainColumnSample, TerrainColumnSamples, TerrainColumnWater,
106    TerrainSampleSource, TerrainSurfaceRole, WorldFormat, WorldFormatHint, WorldPipelineOptions,
107    WorldScanOptions, WorldScanProgress, WorldStorageHandle, WorldThreadingOptions,
108    WorldTransaction, terrain_surface_overlay_alpha, terrain_surface_role,
109};