diff options
| author | Aditya Kumar <117935160+AS1100K@users.noreply.github.com> | 2024-07-22 06:47:40 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-21 20:17:40 -0500 |
| commit | 832f9605319052e903fce56b401461e17954f316 (patch) | |
| tree | d0370ad9011fd7dd66aaab221cfc9480ab19a13a | |
| parent | ca48ed9e2596e3ccfeb7d975e276a6168de74420 (diff) | |
| download | azalea-drasl-832f9605319052e903fce56b401461e17954f316.tar.xz | |
Added Left Click Mine (1.21) (#168)
* Added Auto Mine
* Unnecessary Block Reach Check
* Added `LeftClickMine`
| -rw-r--r-- | azalea-client/src/mining.rs | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/azalea-client/src/mining.rs b/azalea-client/src/mining.rs index f0b86db1..54e27013 100644 --- a/azalea-client/src/mining.rs +++ b/azalea-client/src/mining.rs @@ -33,7 +33,15 @@ impl Plugin for MinePlugin { .add_event::<StopMiningBlockEvent>() .add_event::<MineBlockProgressEvent>() .add_event::<AttackBlockEvent>() - .add_systems(GameTick, continue_mining_block.before(PhysicsSet)) + .add_systems( + GameTick, + ( + continue_mining_block, + handle_auto_mine + ) + .chain() + .before(PhysicsSet) + ) .add_systems( Update, ( @@ -66,6 +74,68 @@ impl Client { position, }); } + + /// When enabled, the bot will mine any block that it is looking at if it is reachable. + pub fn left_click_mine(&self, enabled: bool) { + let mut ecs = self.ecs.lock(); + let mut entity_mut = ecs.entity_mut(self.entity); + + if enabled { + entity_mut.insert(LeftClickMine); + } else { + entity_mut.remove::<LeftClickMine>(); + } + } +} + +#[derive(Component)] +pub struct LeftClickMine; + +#[allow(clippy::type_complexity)] +fn handle_auto_mine( + mut query: Query< + ( + &HitResultComponent, + Entity, + Option<&Mining>, + &InventoryComponent, + &MineBlockPos, + &MineItem, + ), + With<LeftClickMine>, + >, + mut start_mining_block_event: EventWriter<StartMiningBlockEvent>, + mut stop_mining_block_event: EventWriter<StopMiningBlockEvent> +) { + for ( + hit_result_component, + entity, + mining, + inventory, + current_mining_pos, + current_mining_item, + ) in &mut query.iter_mut() + { + let block_pos = hit_result_component.block_pos; + + if (mining.is_none() + || !is_same_mining_target( + block_pos, + inventory, + current_mining_pos, + current_mining_item, + )) && !hit_result_component.miss + { + start_mining_block_event.send(StartMiningBlockEvent { + entity, + position: block_pos, + }); + } else if mining.is_some() && hit_result_component.miss { + stop_mining_block_event.send(StopMiningBlockEvent { + entity + }); + } + } } /// Information about the block we're currently mining. This is only present if |
