diff options
| author | mat <git@matdoes.dev> | 2023-05-16 23:26:45 -0500 |
|---|---|---|
| committer | mat <git@matdoes.dev> | 2023-05-16 23:26:45 -0500 |
| commit | 2ba7b83490f5fb6e40a4e94da743bebe23cd7862 (patch) | |
| tree | 730115f764f623069b490f62101c229726da815a /azalea | |
| parent | 0cc76dfb67e852868e30d1c8529826c41a18e9d1 (diff) | |
| download | azalea-drasl-2ba7b83490f5fb6e40a4e94da743bebe23cd7862.tar.xz | |
ClientBuilder::new_without_plugins
Diffstat (limited to 'azalea')
| -rw-r--r-- | azalea/Cargo.toml | 1 | ||||
| -rw-r--r-- | azalea/src/lib.rs | 34 | ||||
| -rw-r--r-- | azalea/src/pathfinder/moves.rs | 3 | ||||
| -rw-r--r-- | azalea/src/swarm/mod.rs | 41 |
4 files changed, 70 insertions, 9 deletions
diff --git a/azalea/Cargo.toml b/azalea/Cargo.toml index 4a7469d3..f7d050f6 100644 --- a/azalea/Cargo.toml +++ b/azalea/Cargo.toml @@ -39,3 +39,4 @@ priority-queue = "1.3.0" thiserror = "^1.0.37" tokio = "^1.24.2" uuid = "1.2.2" +bevy_log = "0.10.1" diff --git a/azalea/src/lib.rs b/azalea/src/lib.rs index dcfa43b1..09e88534 100644 --- a/azalea/src/lib.rs +++ b/azalea/src/lib.rs @@ -20,7 +20,7 @@ pub use azalea_core::{BlockPos, Vec3}; pub use azalea_protocol as protocol; pub use azalea_registry::{Block, EntityKind, Item}; pub use azalea_world::{entity, Instance}; -use bot::DefaultBotPlugins; +pub use bot::DefaultBotPlugins; use ecs::component::Component; use futures::Future; use protocol::{ @@ -81,16 +81,42 @@ where /// Start building a client that can join the world. #[must_use] pub fn new() -> Self { + Self::new_without_plugins() + .add_plugins(DefaultPlugins) + .add_plugins(DefaultBotPlugins) + } + + /// [`Self::new`] but without adding the plugins by default. This is useful + /// if you want to disable a default plugin. + /// + /// You **must** add [`DefaultPlugins`] and [`DefaultBotPlugins`] to this. + /// + /// ``` + /// # use azalea::prelude::*; + /// use azalea::{app::PluginGroup, DefaultBotPlugins, DefaultPlugins}; + /// use bevy_log::LogPlugin; + /// + /// let client = ClientBuilder::new_without_plugins() + /// .add_plugins(DefaultPlugins.build().disable::<LogPlugin>()) + /// .add_plugins(DefaultBotPlugins); + /// # client.set_handler(handle); + /// # #[derive(Component, Clone, Default)] + /// # pub struct State; + /// # async fn handle(mut bot: Client, event: Event, state: State) -> anyhow::Result<()> { + /// # Ok(()) + /// # } + /// ``` + #[must_use] + pub fn new_without_plugins() -> Self { Self { // we create the app here so plugins can add onto it. // the schedules won't run until [`Self::start`] is called. - app: init_ecs_app(), - + app: App::new(), handler: None, state: S::default(), } - .add_plugins(DefaultBotPlugins) } + /// Set the function that's called every time a bot receives an [`Event`]. /// This is the way to handle normal per-bot events. /// diff --git a/azalea/src/pathfinder/moves.rs b/azalea/src/pathfinder/moves.rs index 6625581d..0dca3c95 100644 --- a/azalea/src/pathfinder/moves.rs +++ b/azalea/src/pathfinder/moves.rs @@ -15,7 +15,8 @@ fn is_block_passable(pos: &BlockPos, world: &Instance) -> bool { /// whether this block has a solid hitbox (i.e. we can stand on it) fn is_block_solid(pos: &BlockPos, world: &Instance) -> bool { if let Some(block) = world.chunks.get_block_state(pos) { - block.shape() == &collision::block_shape() + // block.shape() == &collision::block_shape() + block.shape() != &collision::empty_shape() } else { false } diff --git a/azalea/src/swarm/mod.rs b/azalea/src/swarm/mod.rs index 2253f5bd..f138950f 100644 --- a/azalea/src/swarm/mod.rs +++ b/azalea/src/swarm/mod.rs @@ -5,7 +5,9 @@ mod events; pub mod prelude; use crate::{bot::DefaultBotPlugins, HandleFn}; -use azalea_client::{chat::ChatPacket, init_ecs_app, start_ecs, Account, Client, Event, JoinError}; +use azalea_client::{ + chat::ChatPacket, start_ecs, Account, Client, DefaultPlugins, Event, JoinError, +}; use azalea_protocol::{ connect::ConnectionError, resolver::{self, ResolverError}, @@ -83,10 +85,43 @@ where /// Start creating the swarm. #[must_use] pub fn new() -> Self { + Self::new_without_plugins() + .add_plugins(DefaultPlugins) + .add_plugins(DefaultBotPlugins) + .add_plugins(DefaultSwarmPlugins) + } + + /// [`Self::new`] but without adding the plugins by default. This is useful + /// if you want to disable a default plugin. + /// + /// You **must** add [`DefaultPlugins`], [`DefaultBotPlugins`], and + /// [`DefaultSwarmPlugins`] to this. + /// + /// ``` + /// # use azalea::{prelude::*, swarm::prelude::*}; + /// use azalea::{app::PluginGroup, DefaultBotPlugins, DefaultPlugins, swarm::{DefaultSwarmPlugins}}; + /// use bevy_log::LogPlugin; + /// + /// let client = SwarmBuilder::new_without_plugins() + /// .add_plugins(DefaultPlugins.build().disable::<LogPlugin>()) + /// .add_plugins(DefaultBotPlugins) + /// .add_plugins(DefaultSwarmPlugins); + /// # client.set_handler(handle).set_swarm_handler(swarm_handle); + /// # #[derive(Component, Resource, Clone, Default)] + /// # pub struct State; + /// # async fn handle(mut bot: Client, event: Event, state: State) -> anyhow::Result<()> { + /// # Ok(()) + /// # } + /// # async fn swarm_handle(swarm: Swarm, event: SwarmEvent, state: State) -> anyhow::Result<()> { + /// # Ok(()) + /// # } + /// ``` + #[must_use] + pub fn new_without_plugins() -> Self { Self { // we create the app here so plugins can add onto it. // the schedules won't run until [`Self::start`] is called. - app: init_ecs_app(), + app: App::new(), accounts: Vec::new(), states: Vec::new(), @@ -95,8 +130,6 @@ where swarm_handler: None, join_delay: None, } - .add_plugins(DefaultSwarmPlugins) - .add_plugins(DefaultBotPlugins) } /// Add a vec of [`Account`]s to the swarm. |
