1
2
Fork 0
mirror of https://github.com/mat-1/azalea.git synced 2025-08-02 06:16:04 +00:00

add bitset and work on chunk packets

This commit is contained in:
mat 2022-04-28 16:38:27 +00:00
parent 64823e661f
commit 1ca9caee36
4 changed files with 48 additions and 6 deletions

View file

@ -54,7 +54,7 @@ pub fn derive_mcbufreadable(input: TokenStream) -> TokenStream {
impl crate::mc_buf::McBufReadable for #ident {
async fn read_into<R>(buf: &mut R) -> Result<Self, String>
where
R: AsyncRead + std::marker::Unpin + std::marker::Send,
R: tokio::io::AsyncRead + std::marker::Unpin + std::marker::Send,
{
#(#read_fields)*
Ok(#ident {

View file

@ -4,13 +4,15 @@ mod read;
mod write;
pub use read::{McBufReadable, McBufVarintReadable, Readable};
use std::ops::Deref;
use std::ops::{Deref, Index};
pub use write::{McBufVarintWritable, McBufWritable, Writable};
// const DEFAULT_NBT_QUOTA: u32 = 2097152;
const MAX_STRING_LENGTH: u16 = 32767;
// const MAX_COMPONENT_STRING_LENGTH: u32 = 262144;
// TODO: have a definitions.rs in mc_buf that contains UnsizedByteArray and BitSet
/// A Vec<u8> that isn't prefixed by a VarInt with the size.
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct UnsizedByteArray(Vec<u8>);
@ -29,6 +31,20 @@ impl From<Vec<u8>> for UnsizedByteArray {
}
}
/** Represents Java's BitSet, a list of bits. */
pub struct BitSet {
data: Vec<u64>,
}
impl Index<usize> for BitSet {
type Output = bool;
fn index(&self, index: usize) -> &Self::Output {
let result = (self.data[index / 64] & (1u64 << (index % 64))) != 0;
&result
}
}
#[cfg(test)]
mod tests {
use super::*;

View file

@ -1,5 +1,6 @@
use azalea_core::{game_type::GameType, resource_location::ResourceLocation};
use packet_macros::GamePacket;
use packet_macros::{GamePacket, McBufReadable, McBufWritable};
use super::clientbound_light_update_packet::ClientboundLightUpdatePacketData;
#[derive(Clone, Debug, GamePacket)]
pub struct ClientboundLevelChunkWithLightPacket {
@ -9,4 +10,18 @@ pub struct ClientboundLevelChunkWithLightPacket {
pub light_data: ClientboundLightUpdatePacketData,
}
pub struct ClientboundLevelChunkPacketData {}
#[derive(Clone, Debug, McBufReadable, McBufWritable)]
pub struct ClientboundLevelChunkPacketData {
heightmaps: azalea_nbt::Tag,
data: Vec<u8>,
block_entities: BlockEntity,
}
#[derive(Clone, Debug, McBufReadable, McBufWritable)]
pub struct BlockEntity {
packed_xz: u8,
y: u16,
#[varint]
type_: i32,
data: azalea_nbt::Tag,
}

View file

@ -1,3 +1,4 @@
use crate::mc_buf::BitSet;
use azalea_core::{game_type::GameType, resource_location::ResourceLocation};
use packet_macros::GamePacket;
@ -8,4 +9,14 @@ pub struct ClientboundLightUpdatePacket {
pub light_data: ClientboundLightUpdatePacketData,
}
pub struct ClientboundLightUpdatePacketData {}
#[derive(Clone, Debug, McBufReadable, McBufWritable)]
pub struct ClientboundLightUpdatePacketData {
trust_edges: bool,
sky_y_mask: BitSet,
block_y_mask: BitSet,
empty_sky_y_mask: BitSet,
empty_block_y_mask: BitSet,
sky_updates: Vec<>,
block_updates: BitSet,
}