aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2022-05-14 20:50:20 -0500
committermat <github@matdoes.dev>2022-05-14 20:50:20 -0500
commit5c1712c8404e52f893e3fc10f79a337933865123 (patch)
treea515b76d77fdf710314f07d70ec639f4a6dded6a
parent4000a9d29cbd286517e00db88a27aeddc1967557 (diff)
downloadazalea-drasl-5c1712c8404e52f893e3fc10f79a337933865123.tar.xz
move examples into examples directory
-rw-r--r--README.md116
-rw-r--r--examples/craft_dig_straight_down.rs37
-rw-r--r--examples/echo.rs38
-rw-r--r--examples/mine_a_chunk.rs27
4 files changed, 103 insertions, 115 deletions
diff --git a/README.md b/README.md
index 2695b479..c9942141 100644
--- a/README.md
+++ b/README.md
@@ -15,122 +15,8 @@ I wanted a fun excuse to do something cool with Rust, and I also felt like I cou
## Goals
- Do everything a vanilla client can do.
-- Be easy to use.
+- Be intuitive and easy to use.
- Bypass most/all anticheats.
- Support the latest Minecraft version.
- Be fast and memory efficient.
-## Example code
-
-Note that these don't work yet, it's just how I want the API to look.
-
-```rs
-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;
- }
- }
- }
- }
- _ => {}
- }
-}
-```
-
-```rs
-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;
- }
- }
- }
- },
- _ => {}
- }
-}
-```
-
-You can use the `azalea::Bots` struct to control many bots as one unit.
-
-```rs
-use azalea::{Account, Accounts, Event, pathfinder};
-
-#[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;
-}
-```
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;
+}