aboutsummaryrefslogtreecommitdiff
path: root/azalea-protocol/src
diff options
context:
space:
mode:
Diffstat (limited to 'azalea-protocol/src')
-rw-r--r--azalea-protocol/src/mc_buf/read.rs19
-rw-r--r--azalea-protocol/src/mc_buf/write.rs12
-rw-r--r--azalea-protocol/src/packets/game/clientbound_player_abilities_packet.rs11
-rw-r--r--azalea-protocol/src/packets/game/mod.rs2
4 files changed, 44 insertions, 0 deletions
diff --git a/azalea-protocol/src/mc_buf/read.rs b/azalea-protocol/src/mc_buf/read.rs
index 20b69238..e036643e 100644
--- a/azalea-protocol/src/mc_buf/read.rs
+++ b/azalea-protocol/src/mc_buf/read.rs
@@ -24,6 +24,7 @@ pub trait Readable {
async fn read_long(&mut self) -> Result<i64, String>;
async fn read_resource_location(&mut self) -> Result<ResourceLocation, String>;
async fn read_short(&mut self) -> Result<i16, String>;
+ async fn read_float(&mut self) -> Result<f32, String>;
}
#[async_trait]
@@ -189,6 +190,13 @@ where
Err(_) => Err("Error reading short".to_string()),
}
}
+
+ async fn read_float(&mut self) -> Result<f32, String> {
+ match AsyncReadExt::read_f32(self).await {
+ Ok(r) => Ok(r),
+ Err(_) => Err("Error reading float".to_string()),
+ }
+ }
}
#[async_trait]
@@ -362,6 +370,17 @@ impl McBufReadable for i8 {
}
}
+// f32
+#[async_trait]
+impl McBufReadable for f32 {
+ async fn read_into<R>(buf: &mut R) -> Result<Self, String>
+ where
+ R: AsyncRead + std::marker::Unpin + std::marker::Send,
+ {
+ buf.read_float().await
+ }
+}
+
// GameType
#[async_trait]
impl McBufReadable for GameType {
diff --git a/azalea-protocol/src/mc_buf/write.rs b/azalea-protocol/src/mc_buf/write.rs
index 26c0ef35..07605b16 100644
--- a/azalea-protocol/src/mc_buf/write.rs
+++ b/azalea-protocol/src/mc_buf/write.rs
@@ -41,6 +41,7 @@ pub trait Writable {
&mut self,
location: &ResourceLocation,
) -> Result<(), std::io::Error>;
+ fn write_float(&mut self, n: f32) -> Result<(), std::io::Error>;
}
#[async_trait]
@@ -147,6 +148,10 @@ impl Writable for Vec<u8> {
WriteBytesExt::write_i64::<BigEndian>(self, n)
}
+ fn write_float(&mut self, n: f32) -> Result<(), std::io::Error> {
+ WriteBytesExt::write_f32::<BigEndian>(self, n)
+ }
+
fn write_resource_location(
&mut self,
location: &ResourceLocation,
@@ -264,6 +269,13 @@ impl McBufWritable for i8 {
}
}
+// i8
+impl McBufWritable for f32 {
+ fn write_into(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error> {
+ buf.write_float(*self)
+ }
+}
+
// GameType
impl McBufWritable for GameType {
fn write_into(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error> {
diff --git a/azalea-protocol/src/packets/game/clientbound_player_abilities_packet.rs b/azalea-protocol/src/packets/game/clientbound_player_abilities_packet.rs
new file mode 100644
index 00000000..6136fff5
--- /dev/null
+++ b/azalea-protocol/src/packets/game/clientbound_player_abilities_packet.rs
@@ -0,0 +1,11 @@
+// i don't know the actual name of this packet, i couldn't find it in the source code
+
+use packet_macros::GamePacket;
+
+#[derive(Clone, Debug, GamePacket)]
+pub struct ClientboundPlayerAbilitiesPacket {
+ pub flags: u8,
+ pub flying_speed: f32,
+ /// Used for the fov
+ pub walking_speed: f32,
+}
diff --git a/azalea-protocol/src/packets/game/mod.rs b/azalea-protocol/src/packets/game/mod.rs
index 2dbf7f24..38630a0e 100644
--- a/azalea-protocol/src/packets/game/mod.rs
+++ b/azalea-protocol/src/packets/game/mod.rs
@@ -2,6 +2,7 @@ pub mod clientbound_change_difficulty_packet;
pub mod clientbound_custom_payload_packet;
pub mod clientbound_declare_commands_packet;
pub mod clientbound_login_packet;
+pub mod clientbound_player_abilities_packet;
pub mod clientbound_update_view_distance_packet;
use packet_macros::declare_state_packets;
@@ -14,6 +15,7 @@ declare_state_packets!(
0x12: clientbound_declare_commands_packet::ClientboundDeclareCommandsPacket,
0x18: clientbound_custom_payload_packet::ClientboundCustomPayloadPacket,
0x26: clientbound_login_packet::ClientboundLoginPacket,
+ 0x32: clientbound_player_abilities_packet::ClientboundPlayerAbilitiesPacket,
0x4a: clientbound_update_view_distance_packet::ClientboundUpdateViewDistancePacket
}
);