shulkerbox 0.1.0

Crate for creating Minecraft datapacks in Rust
Documentation
use std::path::Path;

// import the prelude to get all the necessary structs
use shulkerbox::prelude::*;

fn main() {
    // create a new datapack
    let mut dp = Datapack::new(16).with_supported_formats(16..=20);

    // get the namespace "test"
    let namespace = dp.namespace_mut("test");

    // get the function "foo" of the namespace "test" and add some commands
    let foo_function = namespace.function_mut("foo");
    foo_function.add_command("say Hello, world!");
    foo_function.add_command(Command::Debug("debug message".into()));

    // get a call command to the function "foo"
    let call_func = Command::from(foo_function);
    let bar_function = namespace.function_mut("bar");
    // add the call command to the function "bar"
    bar_function.add_command(call_func);
    // add a complex command to the function "bar"
    bar_function.add_command(Command::Execute(Execute::As(
        "@a".to_string(),
        Box::new(Execute::If(
            Condition::from("block ~ ~ ~ minecraft:stone")
                | !(!Condition::from("block ~ ~1 ~ minecraft:stone")
                    | "block ~ ~-1 ~ minecraft:stone".into()),
            Box::new(Execute::Run(Box::new("say bar".into()))),
            None,
        )),
    )));

    dp.add_load("test:foo");

    // compile the datapack
    let v_folder = dp.compile(&CompileOptions::default());

    // place the compiled datapack in the "./dist" folder
    v_folder.place(Path::new("./dist")).unwrap();
}