mirror of
https://github.com/mat-1/azalea.git
synced 2025-08-02 06:16:04 +00:00
* replace 0.9.1 with 0.10.0 * start migrating to bevy .10 * well it compiles * doesn't immediately panic * remove unused imports * fmt * delete azalea-ecs * make RelativeEntityUpdate an EntityCommand * fix a doc test * explain what FixedUpdate does
65 lines
2 KiB
Rust
Executable file
65 lines
2 KiB
Rust
Executable file
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(())
|
|
}
|