mirror of
https://github.com/mat-1/azalea.git
synced 2025-08-02 06:16:04 +00:00
sequence number
This commit is contained in:
parent
67f3a0aaee
commit
c5237daf51
2 changed files with 17 additions and 4 deletions
|
@ -2,6 +2,7 @@ use crate::{
|
|||
chat::ChatPlugin,
|
||||
disconnect::{DisconnectEvent, DisconnectPlugin},
|
||||
events::{Event, EventPlugin, LocalPlayerEvents},
|
||||
interact::CurrentSequenceNumber,
|
||||
inventory::{InventoryComponent, InventoryPlugin},
|
||||
local_player::{
|
||||
death_event, handle_send_packet_event, update_in_loaded_chunk, GameProfileComponent,
|
||||
|
@ -251,6 +252,7 @@ impl Client {
|
|||
inventory: InventoryComponent::default(),
|
||||
client_information: ClientInformation::default(),
|
||||
tab_list: TabList::default(),
|
||||
current_sequence_number: CurrentSequenceNumber::default(),
|
||||
_local: Local,
|
||||
});
|
||||
|
||||
|
@ -493,6 +495,7 @@ pub struct JoinedClientBundle {
|
|||
pub inventory: InventoryComponent,
|
||||
pub client_information: ClientInformation,
|
||||
pub tab_list: TabList,
|
||||
pub current_sequence_number: CurrentSequenceNumber,
|
||||
pub _local: Local,
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,8 @@ use azalea_protocol::packets::game::{
|
|||
serverbound_use_item_on_packet::{BlockHitResult, ServerboundUseItemOnPacket},
|
||||
};
|
||||
use bevy_app::{App, Plugin};
|
||||
use bevy_ecs::{entity::Entity, event::EventReader, system::Query};
|
||||
use bevy_ecs::{component::Component, entity::Entity, event::EventReader, system::Query};
|
||||
use derive_more::{Deref, DerefMut};
|
||||
use log::warn;
|
||||
|
||||
use crate::{Client, LocalPlayer};
|
||||
|
@ -43,18 +44,27 @@ pub struct BlockInteractEvent {
|
|||
pub position: BlockPos,
|
||||
}
|
||||
|
||||
/// The number of changes this client has made to blocks.
|
||||
#[derive(Component, Copy, Clone, Debug, Default, Deref, DerefMut)]
|
||||
pub struct CurrentSequenceNumber(u32);
|
||||
|
||||
fn handle_block_interact_event(
|
||||
mut events: EventReader<BlockInteractEvent>,
|
||||
query: Query<&LocalPlayer>,
|
||||
mut query: Query<(&LocalPlayer, &mut CurrentSequenceNumber)>,
|
||||
) {
|
||||
for event in events.iter() {
|
||||
let Ok( local_player) = query.get(event.entity) else {
|
||||
let Ok((local_player, mut sequence_number)) = query.get_mut(event.entity) else {
|
||||
warn!("Sent BlockInteractEvent for entity that isn't LocalPlayer");
|
||||
continue;
|
||||
};
|
||||
|
||||
// TODO: check to make sure we're within the world border
|
||||
|
||||
**sequence_number += 1;
|
||||
|
||||
// minecraft also does the interaction client-side (so it looks like clicking a
|
||||
// button is instant) but we don't really need that
|
||||
|
||||
local_player.write_packet(
|
||||
ServerboundUseItemOnPacket {
|
||||
hand: InteractionHand::MainHand,
|
||||
|
@ -64,7 +74,7 @@ fn handle_block_interact_event(
|
|||
location: event.position.center(),
|
||||
inside: false,
|
||||
},
|
||||
sequence: 0,
|
||||
sequence: sequence_number.0,
|
||||
}
|
||||
.get(),
|
||||
)
|
||||
|
|
Loading…
Add table
Reference in a new issue