Pumpkin/crates/pumpkin-protocol/src/java/client/play/respawn.rs
Alexander Medvedev 5ef9648362 fix: ci
2026-08-18 22:19:13 +02:00

66 lines
2.1 KiB
Rust

use pumpkin_data::packet::clientbound::PLAY_RESPAWN;
use pumpkin_macros::java_packet;
use pumpkin_util::version::JavaMinecraftVersion;
use crate::{
ClientPacket,
java::client::play::player_spawn_data::PlayerSpawnData,
ser::{NetworkWriteExt, WritingError},
};
#[java_packet(PLAY_RESPAWN)]
pub struct CRespawn {
pub player_spawn_info: PlayerSpawnData,
pub data_kept: u8,
}
impl CRespawn {
pub const KEEP_ATTRIBUTE_MODIFIERS: u8 = 1;
pub const KEEP_ENTITY_DATA: u8 = 2;
pub const KEEP_ALL_DATA: u8 = 3;
#[must_use]
pub const fn new(player_spawn_info: PlayerSpawnData, data_kept: u8) -> Self {
Self {
player_spawn_info,
data_kept,
}
}
}
impl ClientPacket for CRespawn {
fn write_packet_data(
&self,
mut write: impl std::io::Write,
version: &JavaMinecraftVersion,
) -> Result<(), WritingError> {
if version < &JavaMinecraftVersion::V_1_20_2 {
write.write_string(self.player_spawn_info.dimension.minecraft_name)?;
write.write_string(self.player_spawn_info.dimension.minecraft_name)?;
write.write_i64_be(self.player_spawn_info.hashed_seed)?;
write.write_u8(self.player_spawn_info.game_mode)?;
write.write_i8(self.player_spawn_info.previous_gamemode)?;
write.write_bool(self.player_spawn_info.debug)?;
write.write_bool(self.player_spawn_info.is_flat)?;
write.write_i8(self.data_kept as i8)?;
write.write_option(
&self.player_spawn_info.death_dimension_name,
|write, (dim, pos)| {
write.write_string(dim)?;
write.write_block_pos(pos)?;
Ok(())
},
)?;
if version >= &JavaMinecraftVersion::V_1_20 {
write.write_var_int(&self.player_spawn_info.portal_cooldown)?;
}
return Ok(());
}
self.player_spawn_info
.write_packet_data(&mut write, version)?;
write.write_i8(self.data_kept as i8)?;
Ok(())
}
}