1use minecraft_command_types::datapack::pack::Pack;
2use minecraft_command_types::datapack::pack::format::Format;
3use minecraft_command_types::datapack::tag::{Tag, TagType, TagValue};
4use minecraft_command_types::datapack::{Datapack, FilePathNode, Namespace, PackMCMeta};
5use minecraft_command_types::resource_location::ResourceLocation;
6
7fn main() {
8 use std::collections::BTreeMap;
9 use std::path::Path;
10
11 let pack_meta = PackMCMeta {
12 pack: Pack {
13 description: serde_json::json!("A datapack written with Rust!"),
14 pack_format: Some(15),
15 supported_formats: Some(Format::Array(15, 20)),
16 min_format: None,
17 max_format: None,
18 },
19 features: None,
20 filter: None,
21 overlays: None,
22 language: None,
23 };
24
25 let mut my_namespace = Namespace::default();
26
27 my_namespace.functions.push(FilePathNode::File(
28 "main".to_string(),
29 "say Datapack loaded!".to_string(),
30 ));
31
32 my_namespace.functions.push(FilePathNode::Directory(
33 "utils".to_string(),
34 vec![FilePathNode::File(
35 "teleport".to_string(),
36 "tp @s ~ ~10 ~".to_string(),
37 )],
38 ));
39
40 let mut block_tags = BTreeMap::new();
41 block_tags.insert(
42 TagType::Block,
43 vec![FilePathNode::File(
44 "cool_blocks".to_string(),
45 Tag {
46 replace: Some(false),
47 values: vec![
48 TagValue::ResourceLocation(ResourceLocation::new_namespace_path(
49 "minecraft",
50 "diamond_block",
51 )),
52 TagValue::ResourceLocation(ResourceLocation::new_namespace_path(
53 "minecraft",
54 "emerald_block",
55 )),
56 ],
57 },
58 )],
59 );
60 my_namespace.tags = block_tags;
61
62 let mut namespaces = BTreeMap::new();
63 namespaces.insert("mydp".to_string(), my_namespace);
64
65 let my_datapack = Datapack {
66 pack: pack_meta,
67 namespaces,
68 };
69
70 let output_path = Path::new("my_awesome_datapack");
71 if let Err(e) = my_datapack.write(output_path) {
72 eprintln!("Failed to write datapack: {}", e);
73 }
74}