Skip to content

UgnilJoZ/rust-minetestworld

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

minetestworld

This crate lets you read Luanti worlds in a low-level way.

Build Crates.io Documentation dependency status

Usage

As this crate returns tokio based futures, you have to specify that along the dependencies:

[dependencies]
minetestworld = "0.6"
tokio = "1"

An example

Here is an example that reads all nodes of a specific chunk ("map block"):

[dependencies]
tokio = { version = "1", features = ["full"] }
minetestworld = "0.6"
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(())
}

Selectable features

The Cargo features sqlite, redis, and postgres enable the respective map data backend. They are enabled by default and can be selected individually:

[dependencies]
minetestworld = { version = "0.6", 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 connection, add the tls-rustls or the tls-native-tls feature.

See minetest-worldmapper for a real-world example.

About

Read and write Luanti world data in Rust

Topics

Resources

License

Stars

Watchers

Forks

Contributors 2

  •  
  •