aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/craft_dig_straight_down.rs37
-rw-r--r--examples/echo.rs38
-rw-r--r--examples/mine_a_chunk.rs27
3 files changed, 102 insertions, 0 deletions
diff --git a/examples/craft_dig_straight_down.rs b/examples/craft_dig_straight_down.rs
new file mode 100644
index 00000000..79985672
--- /dev/null
+++ b/examples/craft_dig_straight_down.rs
@@ -0,0 +1,37 @@
+use azalea::{Bot, Event};
+
+let bot = Bot::offline("bot");
+// or let bot = azalea::Bot::microsoft("access token").await;
+
+bot.join("localhost".try_into().unwrap()).await.unwrap();
+
+loop {
+ match bot.next().await {
+ Event::Message(m) {
+ if m.username == bot.username { return };
+ if m.message = "go" {
+ bot.goto_goal(
+ pathfinder::Goals::NearXZ(5, azalea::BlockXZ(0, 0))
+ ).await;
+ let chest = bot.open_chest(&bot.world.find_one_block(|b| b.id == "minecraft:chest")).await.unwrap();
+ bot.take_amount(&chest, 3, |i| i.id == "#minecraft:planks").await;
+ // when rust adds async drop this won't be necessary
+ chest.close().await;
+
+ let crafting_table = bot.open_crafting_table(&bot.world.find_one_block(|b| b.id == "minecraft:crafting_table")).await.unwrap();
+ bot.craft(&crafting_table, &bot.recipe_for("minecraft:sticks")).await?;
+ let pickaxe = bot.craft(&crafting_table, &bot.recipe_for("minecraft:wooden_pickaxe")).await?;
+ crafting_table.close().await;
+
+ bot.hold(&pickaxe);
+ loop {
+ if let Err(e) = bot.dig(bot.feet_coords().down(1)).await {
+ println!("{:?}", e);
+ break;
+ }
+ }
+ }
+ },
+ _ => {}
+ }
+}
diff --git a/examples/echo.rs b/examples/echo.rs
new file mode 100644
index 00000000..c9e46a09
--- /dev/null
+++ b/examples/echo.rs
@@ -0,0 +1,38 @@
+use azalea::{Account, Event};
+
+let account = Account::offline("bot");
+// or let account = azalea::Account::microsoft("access token").await;
+
+let bot = account.join("localhost".try_into().unwrap()).await.unwrap();
+
+loop {
+ match bot.next().await {
+ Event::Message(m) {
+ if m.username == bot.username { return };
+ bot.chat(m.message).await;
+ },
+ Event::Kicked(m) {
+ println!(m);
+ bot.reconnect().await.unwrap();
+ },
+ Event::Hunger(h) {
+ if !h.using_held_item() && h.hunger <= 17 {
+ match bot.hold(azalea::ItemGroup::Food).await {
+ Ok(_) => {},
+ Err(e) => {
+ println!("{}", e);
+ break;
+ }
+ }
+ match bot.use_held_item().await {
+ Ok(_) => {},
+ Err(e) => {
+ println!("{}", e);
+ break;
+ }
+ }
+ }
+ }
+ _ => {}
+ }
+}
diff --git a/examples/mine_a_chunk.rs b/examples/mine_a_chunk.rs
new file mode 100644
index 00000000..bb85a637
--- /dev/null
+++ b/examples/mine_a_chunk.rs
@@ -0,0 +1,27 @@
+use azalea::{Account, Accounts, Event, pathfinder};
+
+// You can use the `azalea::Bots` struct to control many bots as one unit.
+
+#[tokio::main]
+async fn main() {
+ let accounts = Accounts::new();
+
+ for i in 0..10 {
+ accounts.add(Account::offline(format!("bot{}", i)));
+ }
+
+ let bots = accounts.join("localhost".try_into().unwrap()).await.unwrap();
+
+ bots.goto(azalea::BlockCoord(0, 70, 0)).await;
+ // or bots.goto_goal(pathfinder::Goals::Goto(azalea::BlockCoord(0, 70, 0))).await;
+
+ // destroy the blocks in this area and then leave
+
+ bots.fill(
+ azalea::Selection::Range(
+ azalea::BlockCoord(0, 0, 0),
+ azalea::BlockCoord(16, 255, 16)
+ ),
+ azalea::block::Air
+ ).await;
+}