2 个版本
0.1.1 | 2024 年 5 月 26 日 |
---|---|
0.1.0 | 2024 年 5 月 25 日 |
#73 在 游戏
69 每月下载量
1MB
2K SLoC
紫水晶是用于 Rust 驱动的 MCBE 插件开发的 Rust 框架(仍在开发中)
可用功能
- 包生成
- 物品(所有组件都齐全!)
- 脚本支持(将包含 .js 脚本的文件夹与包配对)
- 配方
- 方块*
* - 特性和一些组件目前不可用
计划
- 实体;
- 动画/渲染控制器;
入门指南
让我们从创建一个新的 包 来配置一个新的项目开始。
let scripts = Some(ScriptData {
mc_server_ui_version: "1.2.0-beta".to_string(), // @minecraft/server_ui version
mc_server_version: "1.11.0-beta".to_string(), // @minecraft/server version
paired_scripts_folder: r"./src-scripts", // folder from where to get scripts
}); // Script Data. Can be set to None if project doesn't use scripts
let mut pack = Pack::new( // Pack needs to be mutable
"Violet Crystal".to_string(), // Pack Name
"violet_crystal".to_string(), // Pack Identifier
"NaKeR".to_string(), // Pack Author
"1, 0, 0", // Pack Version. Separated with commas
"Nothing here".to_string(), // Pack Description
true, // Does the project use scripts
r"*some path*", // Developer BP Folder
r"*some path*", // Developer RP Folder
r"*some path*", // Pack Icon
&scripts, // Script Data which we defined earlier
);
要生成包,我们将使用 pack.generate() 和 pack.build_to_dev()。将这些放在函数末尾。
// Your code here
// Your code here
pack.generate(None); // Generates to "violet_crystal_results" folder.
pack.build_to_dev(); // Copies to specified dev folders.
这将已经创建了一个包。在第一次生成后,将 pack.generate(None) 更改为 pack.generate(Some(false))。这样做是为了确保紫水晶不会更改清单,从而更改 UUID。
让我们添加一个新的物品!
使用 pack.register_item() 添加一个新的物品,它需要一个 Item 参数。
pack.register_item(Item {
type_id: Identifier {
namespace: "vc",
value: "tutorial"
}, // Identifier is used to indicate a namespaced value
components: vec![
], // item components are going here
});
这将添加一个新的物品。但是等等... 它没有纹理!为了添加纹理,我们首先需要使用 pack.register_item_texture() 将其注册,它需要一个 ItemAtlasEntry 参数。
pack.register_item_texture(ItemAtlasEntry {
id: "vc_test".to_string(), // Id to use in Item Icon component
texture_name: "vc_test".to_string(), // Name to use in file system
path: r"*some path*".to_string(), // Path to texture on your PC
});
然后让我们将其添加到物品中。还记得组件字段吗?
pack.register_item(Item {
type_id: Identifier {
namespace: "vc",
value: "tutorial"
}, // Identifier is used to indicate a namespaced value
components: vec![
&ItemIconComponent {
texture: "vc_test", // texture id we've specified earlier
},
], // item components are going here
});
这将把纹理添加到物品中。所有物品组件都在那里。我不会列出所有这些。您可以在官方 MC 文档中查看它们的文档。
方块
添加方块也是以类似的方式进行。目前,在 Beta 1 中,您不需要在 texture_set 字段中注册纹理,只需指定路径即可。它可能会像物品那样进行更改,以保持一致性。方块的示例
pack.register_block(Block {
type_id: Identifier {
namespace: "vc",
value: "test"
},
components: vec![
&collision_box,
&crafting_table_component,
&BlockDestructibleByExplosionComponent {
explosion_resistance: Some(1.0)
},
&BlockDestructibleByMiningComponent {
seconds_to_destroy: Some(10.0)
},
&flammable,
&BlockFrictionComponent {
friction: 0.7,
},
],
texture_set: r"*path here*".to_string(),
sound: "stone".to_string(),
permutations: vec![
BlockPermutation {
condition: "q.block_state('amex:test') == true",
components: vec![
&BlockFrictionComponent {
friction: 0.1,
}
]
}
],
states: vec![
&BoolBlockState {
id: Identifier {
namespace: "amex",
value: "test"
}
}
]
});
有了这些知识,你就可以开始了!
依赖关系
~3–12MB
~124K SLoC