mirror of
https://github.com/mat-1/azalea.git
synced 2025-08-02 06:16:04 +00:00
make PlayerAbilitiesFlags its own thing
This commit is contained in:
parent
8bd97c6c96
commit
298d30ad08
1 changed files with 49 additions and 1 deletions
|
@ -1,11 +1,59 @@
|
|||
// i don't know the actual name of this packet, i couldn't find it in the source code
|
||||
|
||||
use crate::mc_buf::{McBufReadable, McBufWritable, Readable};
|
||||
use async_trait::async_trait;
|
||||
use packet_macros::GamePacket;
|
||||
use tokio::io::AsyncRead;
|
||||
|
||||
#[derive(Clone, Debug, GamePacket)]
|
||||
pub struct ClientboundPlayerAbilitiesPacket {
|
||||
pub flags: u8,
|
||||
pub flags: PlayerAbilitiesFlags,
|
||||
pub flying_speed: f32,
|
||||
/// Used for the fov
|
||||
pub walking_speed: f32,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct PlayerAbilitiesFlags {
|
||||
pub invulnerable: bool,
|
||||
pub flying: bool,
|
||||
pub can_fly: bool,
|
||||
pub instant_break: bool,
|
||||
}
|
||||
|
||||
// Difficulty
|
||||
#[async_trait]
|
||||
impl McBufReadable for PlayerAbilitiesFlags {
|
||||
async fn read_into<R>(buf: &mut R) -> Result<Self, String>
|
||||
where
|
||||
R: AsyncRead + std::marker::Unpin + std::marker::Send,
|
||||
{
|
||||
let byte = buf.read_byte().await?;
|
||||
Ok(PlayerAbilitiesFlags {
|
||||
invulnerable: byte & 1 != 0,
|
||||
flying: byte & 2 != 0,
|
||||
can_fly: byte & 4 != 0,
|
||||
instant_break: byte & 8 != 0,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Difficulty
|
||||
impl McBufWritable for PlayerAbilitiesFlags {
|
||||
fn write_into(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error> {
|
||||
let mut byte = 0;
|
||||
if self.invulnerable {
|
||||
byte = byte | 1;
|
||||
}
|
||||
if self.flying {
|
||||
byte = byte | 2;
|
||||
}
|
||||
if self.can_fly {
|
||||
byte = byte | 4;
|
||||
}
|
||||
if self.instant_break {
|
||||
byte = byte | 8;
|
||||
}
|
||||
u8::write_into(&byte, buf)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue