aboutsummaryrefslogtreecommitdiff
path: root/azalea/src
diff options
context:
space:
mode:
Diffstat (limited to 'azalea/src')
-rw-r--r--azalea/src/auto_respawn.rs4
-rw-r--r--azalea/src/lib.rs35
-rw-r--r--azalea/src/pathfinder/mod.rs7
-rw-r--r--azalea/src/pathfinder/moves.rs3
-rw-r--r--azalea/src/swarm/mod.rs41
5 files changed, 79 insertions, 11 deletions
diff --git a/azalea/src/auto_respawn.rs b/azalea/src/auto_respawn.rs
index c5dd12a4..d2973a2f 100644
--- a/azalea/src/auto_respawn.rs
+++ b/azalea/src/auto_respawn.rs
@@ -1,6 +1,6 @@
use crate::app::{App, Plugin};
use azalea_client::packet_handling::DeathEvent;
-use azalea_client::respawn::PerformRespawnEvent;
+use azalea_client::respawn::{perform_respawn, PerformRespawnEvent};
use bevy_ecs::prelude::*;
/// A plugin that makes [`DeathEvent`]s send [`PerformRespawnEvent`]s.
@@ -8,7 +8,7 @@ use bevy_ecs::prelude::*;
pub struct AutoRespawnPlugin;
impl Plugin for AutoRespawnPlugin {
fn build(&self, app: &mut App) {
- app.add_system(auto_respawn);
+ app.add_system(auto_respawn.before(perform_respawn));
}
}
diff --git a/azalea/src/lib.rs b/azalea/src/lib.rs
index 604961f4..fd735585 100644
--- a/azalea/src/lib.rs
+++ b/azalea/src/lib.rs
@@ -14,12 +14,13 @@ use app::{App, Plugin, PluginGroup};
pub use azalea_auth as auth;
pub use azalea_block as blocks;
pub use azalea_brigadier as brigadier;
+pub use azalea_chat::FormattedText;
pub use azalea_client::*;
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::{
@@ -80,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_builder = ClientBuilder::new_without_plugins()
+ /// .add_plugins(DefaultPlugins.build().disable::<LogPlugin>())
+ /// .add_plugins(DefaultBotPlugins);
+ /// # client_builder.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/mod.rs b/azalea/src/pathfinder/mod.rs
index 3f978c95..b7ed222d 100644
--- a/azalea/src/pathfinder/mod.rs
+++ b/azalea/src/pathfinder/mod.rs
@@ -70,6 +70,13 @@ pub trait PathfinderClientExt {
}
impl PathfinderClientExt for azalea_client::Client {
+ /// ```
+ /// # use azalea::prelude::*;
+ /// # use azalea::{BlockPos, pathfinder::BlockPosGoal};
+ /// # fn example(bot: &Client) {
+ /// bot.goto(BlockPosGoal::from(BlockPos::new(0, 70, 0)));
+ /// # }
+ /// ```
fn goto(&self, goal: impl Goal + Send + Sync + 'static) {
self.ecs.lock().send_event(GotoEvent {
entity: self.entity,
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..0bb9f7cd 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 swarm_builder = SwarmBuilder::new_without_plugins()
+ /// .add_plugins(DefaultPlugins.build().disable::<LogPlugin>())
+ /// .add_plugins(DefaultBotPlugins)
+ /// .add_plugins(DefaultSwarmPlugins);
+ /// # swarm_builder.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.