aboutsummaryrefslogtreecommitdiff
path: root/azalea-client/src/plugins/mining.rs
diff options
context:
space:
mode:
authormat <git@matdoes.dev>2025-09-20 20:35:16 -1200
committermat <git@matdoes.dev>2025-09-20 20:35:16 -1200
commit585b51e91a5335eae37bc5af7c0111bb2092b156 (patch)
treec1559014df9db20dd625d9fe972d4e9f88317008 /azalea-client/src/plugins/mining.rs
parentdb793448ff8e656ad80859835edc3b89cb547dd2 (diff)
downloadazalea-drasl-585b51e91a5335eae37bc5af7c0111bb2092b156.tar.xz
more accurate mining and impl PartialEq for packets
Diffstat (limited to 'azalea-client/src/plugins/mining.rs')
-rw-r--r--azalea-client/src/plugins/mining.rs23
1 files changed, 16 insertions, 7 deletions
diff --git a/azalea-client/src/plugins/mining.rs b/azalea-client/src/plugins/mining.rs
index 1b7adadc..b6ac113a 100644
--- a/azalea-client/src/plugins/mining.rs
+++ b/azalea-client/src/plugins/mining.rs
@@ -8,7 +8,7 @@ use azalea_world::{InstanceContainer, InstanceName};
use bevy_app::{App, Plugin, Update};
use bevy_ecs::prelude::*;
use derive_more::{Deref, DerefMut};
-use tracing::trace;
+use tracing::{debug, trace};
use crate::{
Client,
@@ -35,14 +35,14 @@ impl Plugin for MiningPlugin {
GameTick,
(
update_mining_component,
- continue_mining_block,
handle_auto_mine,
handle_mining_queued,
+ continue_mining_block,
)
.chain()
- .after(PhysicsSet)
- .after(super::movement::send_position)
- .after(super::attack::handle_attack_queued)
+ .before(PhysicsSet)
+ .before(super::movement::send_position)
+ .before(super::interact::handle_start_use_item_queued)
.in_set(MiningSet),
)
.add_systems(
@@ -358,9 +358,9 @@ fn handle_mining_queued(
seq: sequence_number.start_predicting(),
},
));
- // vanilla really does send two swing arm packets
- commands.trigger(SwingArmEvent { entity });
commands.trigger(SwingArmEvent { entity });
+ // another swing packet gets sent in the same tick in
+ // continue_mining_block, vanilla does this too
}
}
}
@@ -687,9 +687,18 @@ pub fn update_mining_component(
) {
for (entity, mut mining, hit_result_component) in &mut query.iter_mut() {
if let Some(block_hit_result) = hit_result_component.as_block_hit_result_if_not_miss() {
+ if mining.force && block_hit_result.block_pos != mining.pos {
+ continue;
+ }
+
mining.pos = block_hit_result.block_pos;
mining.dir = block_hit_result.direction;
} else {
+ if mining.force {
+ continue;
+ }
+
+ debug!("Removing mining component because we're no longer looking at the block");
commands.entity(entity).remove::<Mining>();
}
}