53 lines
1.4 KiB
Rust
53 lines
1.4 KiB
Rust
use std::io::Write;
|
|
|
|
use crate::{
|
|
ClientPacket,
|
|
codec::var_int::VarInt,
|
|
ser::{NetworkWriteExt, WritingError},
|
|
};
|
|
use pumpkin_data::{packet::clientbound::CONFIG_REGISTRY_DATA, registry::RegistryEntryData};
|
|
use pumpkin_macros::java_packet;
|
|
use pumpkin_util::{resource_location::ResourceLocation, version::JavaMinecraftVersion};
|
|
|
|
#[java_packet(CONFIG_REGISTRY_DATA)]
|
|
pub struct CRegistryData<'a> {
|
|
pub registry_id: &'a ResourceLocation,
|
|
pub entries: &'a [RegistryEntryData],
|
|
}
|
|
|
|
impl<'a> CRegistryData<'a> {
|
|
#[must_use]
|
|
pub const fn new(registry_id: &'a ResourceLocation, entries: &'a [RegistryEntryData]) -> Self {
|
|
Self {
|
|
registry_id,
|
|
entries,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl ClientPacket for CRegistryData<'_> {
|
|
fn write_packet_data(
|
|
&self,
|
|
write: impl Write,
|
|
_version: &JavaMinecraftVersion,
|
|
) -> Result<(), WritingError> {
|
|
let mut write = write;
|
|
|
|
write.write_string(&self.registry_id.clone())?;
|
|
|
|
write.write_var_int(&VarInt(self.entries.len() as i32))?;
|
|
for entry in self.entries {
|
|
write.write_string(&entry.entry_id.clone())?;
|
|
|
|
if let Some(data) = &entry.data {
|
|
write.write_bool(true)?;
|
|
write.write_all(data).map_err(WritingError::IoError)?;
|
|
} else {
|
|
write.write_bool(false)?;
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
}
|