aboutsummaryrefslogtreecommitdiff
path: root/azalea-protocol/src/mc_buf/read.rs
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2022-05-07 11:58:00 -0500
committermat <github@matdoes.dev>2022-05-07 11:58:00 -0500
commitb9c31efc0161457771861e6858a4a4da0b6a2727 (patch)
tree5ce24cf6e79f8fb640b4213bc60597f89b2f0bae /azalea-protocol/src/mc_buf/read.rs
parent79bf5771303c70115cba09ac55c7b7a2d3e32091 (diff)
downloadazalea-drasl-b9c31efc0161457771861e6858a4a4da0b6a2727.tar.xz
Initialize worldborder packet
Also add varlong and replace #[varint] with #[var]
Diffstat (limited to 'azalea-protocol/src/mc_buf/read.rs')
-rwxr-xr-xazalea-protocol/src/mc_buf/read.rs38
1 files changed, 30 insertions, 8 deletions
diff --git a/azalea-protocol/src/mc_buf/read.rs b/azalea-protocol/src/mc_buf/read.rs
index 68c9cb3f..72b99222 100755
--- a/azalea-protocol/src/mc_buf/read.rs
+++ b/azalea-protocol/src/mc_buf/read.rs
@@ -236,11 +236,11 @@ where
fn read_into(buf: &mut impl Read) -> Result<Self, String>;
}
-pub trait McBufVarintReadable
+pub trait McBufVarReadable
where
Self: Sized,
{
- fn varint_read_into(buf: &mut impl Read) -> Result<Self, String>;
+ fn var_read_into(buf: &mut impl Read) -> Result<Self, String>;
}
impl McBufReadable for i32 {
@@ -249,12 +249,34 @@ impl McBufReadable for i32 {
}
}
-impl McBufVarintReadable for i32 {
- fn varint_read_into(buf: &mut impl Read) -> Result<Self, String> {
+impl McBufVarReadable for i32 {
+ fn var_read_into(buf: &mut impl Read) -> Result<Self, String> {
buf.read_varint()
}
}
+impl McBufVarReadable for i64 {
+ // fast varints modified from https://github.com/luojia65/mc-varint/blob/master/src/lib.rs#L54
+ fn var_read_into(buf: &mut impl Read) -> Result<Self, String> {
+ let mut buffer = [0];
+ let mut ans = 0;
+ for i in 0..8 {
+ buf.read_exact(&mut buffer)
+ .map_err(|_| "Invalid VarLong".to_string())?;
+ ans |= ((buffer[0] & 0b0111_1111) as i64) << 7 * i;
+ if buffer[0] & 0b1000_0000 == 0 {
+ break;
+ }
+ }
+ Ok(ans)
+ }
+}
+impl McBufVarReadable for u64 {
+ fn var_read_into(buf: &mut impl Read) -> Result<Self, String> {
+ i64::var_read_into(buf).map(|i| i as u64)
+ }
+}
+
impl McBufReadable for UnsizedByteArray {
fn read_into(buf: &mut impl Read) -> Result<Self, String> {
Ok(UnsizedByteArray(buf.read_bytes()?))
@@ -300,8 +322,8 @@ impl McBufReadable for u32 {
}
// u32 varint
-impl McBufVarintReadable for u32 {
- fn varint_read_into(buf: &mut impl Read) -> Result<Self, String> {
+impl McBufVarReadable for u32 {
+ fn var_read_into(buf: &mut impl Read) -> Result<Self, String> {
buf.read_varint().map(|i| i as u32)
}
}
@@ -321,8 +343,8 @@ impl McBufReadable for i16 {
}
// u16 varint
-impl McBufVarintReadable for u16 {
- fn varint_read_into(buf: &mut impl Read) -> Result<Self, String> {
+impl McBufVarReadable for u16 {
+ fn var_read_into(buf: &mut impl Read) -> Result<Self, String> {
buf.read_varint().map(|i| i as u16)
}
}