| Crates.io | minetestworld |
| lib.rs | minetestworld |
| version | 0.6.1 |
| created_at | 2022-02-21 14:16:23.210417+00 |
| updated_at | 2025-09-04 20:21:35.800788+00 |
| description | Read and modify Minetest worlds |
| homepage | |
| repository | https://github.com/UgnilJoZ/rust-minetestworld/ |
| max_upload_size | |
| id | 536472 |
| size | 174,671 |
This crate lets you read Luanti worlds in a low-level way.
As this crate returns tokio based futures, you have to specify that along the dependencies:
[dependencies]
minetestworld = "0.6.1"
tokio = "1"
With the map block API, you can load chunks from and save them to the map:
For reading and writing individual voxels ("nodes") though, the VoxelManip struct will be more convenient, as the example shows.
Here is an example that reads all nodes of a random chunk ("map block"):
[dependencies]
tokio = { version = "1", features = ["full"] }
minetestworld = "0.6.1"
futures = "0.3"
use std::error::Error;
use futures::StreamExt;
use minetestworld::{World, Position};
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn Error>> {
// Open a world by its path
let world = World::open("TestWorld");
let mapdata = world.get_map_data().await?;
// Take the first mapblock position we can grab
let mut positions = mapdata.all_mapblock_positions().await;
let blockpos = positions.next().await.unwrap()?;
// Iterate all nodes in that mapblock
for (pos, node) in mapdata.iter_mapblock_nodes(blockpos).await? {
let param0 = String::from_utf8(node.param0)?;
println!("{pos:?}, {param0:?}");
}
Ok(())
}
The Cargo features sqlite, redis, postgres, and leveldb enable the respective map data backend. They are enabled by default and can be selected individually:
[dependencies]
minetestworld = { version = "0.6.1", default-features = false, features = [ "sqlite" ] }
This crate only compiles if at least one backend is enabled, because it becomes pointless without.
To gain TLS support for the postgres and redis connections, add the tls-rustls or the tls-native-tls feature.
See minetest-worldmapper for a real-world example.