diff options
| author | mat <27899617+mat-1@users.noreply.github.com> | 2023-03-07 22:09:56 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-07 22:09:56 -0600 |
| commit | 5dd35c7ed82c38ef36ca28f630e8d05c5db2cbea (patch) | |
| tree | 72719e46479e7884ea535c768ab7c244ce048063 /azalea/examples/todo/pvp.rs | |
| parent | 719379a8a76ab0685f2bd14bebe2f0cd1e97f06b (diff) | |
| download | azalea-drasl-5dd35c7ed82c38ef36ca28f630e8d05c5db2cbea.tar.xz | |
Add World::find_block (#80)
* start adding World::find_block
* keep working on find_block
* BlockStates
* fix sorting
* update examples that use find_one_block
* azalea_block::properties
* fix tests
* add a gotoblock command to testbot
Diffstat (limited to 'azalea/examples/todo/pvp.rs')
| -rw-r--r-- | azalea/examples/todo/pvp.rs | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/azalea/examples/todo/pvp.rs b/azalea/examples/todo/pvp.rs new file mode 100644 index 00000000..fb5a768d --- /dev/null +++ b/azalea/examples/todo/pvp.rs @@ -0,0 +1,65 @@ +use std::time::Duration; + +use azalea::ecs::query::With; +use azalea::entity::metadata::Player; +use azalea::{pathfinder, Account, Client, Event, GameProfileComponent}; +use azalea::{prelude::*, swarm::prelude::*}; + +#[tokio::main] +async fn main() { + let mut accounts = Vec::new(); + let mut states = Vec::new(); + + for i in 0..10 { + accounts.push(Account::offline(&format!("bot{i}"))); + states.push(State::default()); + } + + SwarmBuilder::new() + .add_accounts(accounts.clone()) + .set_handler(handle) + .set_swarm_handler(swarm_handle) + .join_delay(Duration::from_millis(1000)) + .start("localhost") + .await + .unwrap(); +} + +#[derive(Component, Default, Clone)] +struct State {} + +#[derive(Resource, Default, Clone)] +struct SwarmState {} + +async fn handle(bot: Client, event: Event, state: State) -> anyhow::Result<()> { + Ok(()) +} +async fn swarm_handle(swarm: Swarm, event: SwarmEvent, state: SwarmState) -> anyhow::Result<()> { + match event { + SwarmEvent::Tick => { + if let Some(target_entity) = + swarm.entity_by::<With<Player>>(|profile: &&GameProfileComponent| { + profile.name == "Herobrine" + }) + { + let target_bounding_box = + swarm.map_entity(target_entity, |bb: &BoundingBox| bb.clone()); + + for (bot, bot_state) in swarm { + bot.tick_goto_goal(pathfinder::Goals::Reach(target_bounding_box)); + // if target.bounding_box.distance(bot.eyes) < bot.reach_distance() { + if azalea::entities::can_reach(bot.entity(), target_bounding_box) { + bot.swing(); + } + if !bot.using_held_item() && bot.hunger() <= 17 { + bot.hold(azalea::ItemGroup::Food); + tokio::task::spawn(bot.use_held_item()); + } + } + } + } + _ => {} + } + + Ok(()) +} |
