1
- use base:: { ItemStack , ValidBlockPosition } ;
1
+ use base:: { BlockKind , ItemStack , ValidBlockPosition } ;
2
2
use ecs:: { EntityBuilder , SysResult , SystemExecutor } ;
3
3
use libcraft_items:: EnchantmentKind ;
4
4
use quill_common:: { entities:: Player , entity_init:: EntityInit } ;
@@ -141,7 +141,7 @@ impl ActiveBreaker {
141
141
equipped_item : Option < & ItemStack > ,
142
142
) -> Option < Self > {
143
143
let block = world. block_at ( block_pos) ?. kind ( ) ;
144
- if !block. diggable ( ) {
144
+ if !block. diggable ( ) || block == BlockKind :: Air {
145
145
return None ;
146
146
}
147
147
let harvestable = match ( block. harvest_tools ( ) , equipped_item) {
@@ -233,11 +233,10 @@ fn process_block_breaking(game: &mut Game) -> SysResult {
233
233
update_queue. push ( entity) ;
234
234
}
235
235
// Break block when client requests to finish in order to prevent desyncs
236
- if break_block {
237
- if breaker. finished ( ) . unwrap ( ) . fake_finished || !game. ecs . get :: < Player > ( entity) . is_ok ( )
238
- {
239
- break_queue. push ( entity) ;
240
- }
236
+ if break_block && breaker. finished ( ) . unwrap ( ) . fake_finished
237
+ || game. ecs . get :: < Player > ( entity) . is_err ( )
238
+ {
239
+ break_queue. push ( entity) ;
241
240
}
242
241
}
243
242
for entity in update_queue {
@@ -249,7 +248,12 @@ fn process_block_breaking(game: &mut Game) -> SysResult {
249
248
game. ecs . insert_entity_event ( entity, event) ?;
250
249
}
251
250
for entity in break_queue. into_iter ( ) {
252
- let breaker = game. ecs . get :: < BlockBreaker > ( entity) ?. finished ( ) . unwrap ( ) . clone ( ) ;
251
+ let breaker = game
252
+ . ecs
253
+ . get :: < BlockBreaker > ( entity) ?
254
+ . finished ( )
255
+ . unwrap ( )
256
+ . clone ( ) ;
253
257
breaker. break_block ( game) ?;
254
258
}
255
259
Ok ( ( ) )
0 commit comments