Skip to content

Commit

Permalink
Fixed: Clientbound Entity Metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
Snowiiii committed Aug 12, 2024
1 parent 2909cad commit 50051d9
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 25 deletions.
6 changes: 4 additions & 2 deletions pumpkin-protocol/src/client/play/c_entity_metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,16 @@ use crate::VarInt;
#[packet(0x58)]
pub struct CSetEntityMetadata {
entity_id: VarInt,
metadata: Vec<Metadata>,
metadata: Metadata,
end: u8,
}

impl CSetEntityMetadata {
pub fn new(entity_id: VarInt, metadata: Vec<Metadata>) -> Self {
pub fn new(entity_id: VarInt, metadata: Metadata) -> Self {
Self {
entity_id,
metadata,
end: 255,
}
}
}
Expand Down
1 change: 1 addition & 0 deletions pumpkin/src/client/client_packet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@ impl Client {
_server: &mut Server,
client_information: SClientInformation,
) {
dbg!("got client settings");
self.config = Some(PlayerConfig {
locale: client_information.locale,
view_distance: client_information.view_distance,
Expand Down
23 changes: 10 additions & 13 deletions pumpkin/src/client/player_packet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ impl Client {

server.broadcast_packet(
self,
CUpdateEntityPos::new(
&CUpdateEntityPos::new(
entity_id.into(),
(x * 4096.0 - lastx * 4096.0) as i16,
(y * 4096.0 - lasty * 4096.0) as i16,
Expand Down Expand Up @@ -120,7 +120,7 @@ impl Client {

server.broadcast_packet(
self,
CUpdateEntityPosRot::new(
&CUpdateEntityPosRot::new(
entity_id.into(),
(x * 4096.0 - lastx * 4096.0) as i16,
(y * 4096.0 - lasty * 4096.0) as i16,
Expand All @@ -130,7 +130,7 @@ impl Client {
on_ground,
),
);
server.broadcast_packet(self, CHeadRot::new(entity_id.into(), head_yaw as u8));
server.broadcast_packet(self, &CHeadRot::new(entity_id.into(), head_yaw as u8));
}

pub fn handle_rotation(&mut self, server: &mut Server, rotation: SPlayerRotation) {
Expand All @@ -151,9 +151,9 @@ impl Client {

server.broadcast_packet(
self,
CUpdateEntityRot::new(entity_id.into(), yaw as u8, pitch as u8, on_ground),
&CUpdateEntityRot::new(entity_id.into(), yaw as u8, pitch as u8, on_ground),
);
server.broadcast_packet(self, CHeadRot::new(entity_id.into(), head_yaw as u8));
server.broadcast_packet(self, &CHeadRot::new(entity_id.into(), head_yaw as u8));
}

pub fn handle_chat_command(&mut self, _server: &mut Server, command: SChatCommand) {
Expand Down Expand Up @@ -191,14 +191,11 @@ impl Client {

pub fn handle_chat_message(&mut self, server: &mut Server, chat_message: SChatMessage) {
let message = chat_message.message;
server.broadcast_packet(
self,
COpenScreen::new(
VarInt(0),
VarInt(WindowType::CraftingTable as i32),
TextComponent::from("Test Crafter"),
),
);
self.send_packet(&COpenScreen::new(
VarInt(0),
VarInt(WindowType::CraftingTable as i32),
TextComponent::from("Test Crafter"),
));
// TODO: filter message & validation
let gameprofile = self.gameprofile.as_ref().unwrap();
dbg!("got message");
Expand Down
26 changes: 16 additions & 10 deletions pumpkin/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ use pumpkin_protocol::{
config::CPluginMessage,
play::{
CChunkDataUpdateLight, CGameEvent, CLogin, CPlayerAbilities, CPlayerInfoUpdate,
CRemoveEntities, CRemovePlayerInfo, CSpawnEntity, PlayerAction,
CRemoveEntities, CRemovePlayerInfo, CSetEntityMetadata, CSpawnEntity, Metadata,
PlayerAction,
},
},
uuid::UUID,
Expand Down Expand Up @@ -130,8 +131,11 @@ impl Server {
if client.is_player() {
let id = client.player.as_ref().unwrap().entity_id();
let uuid = client.gameprofile.as_ref().unwrap().id;
self.broadcast_packet(&mut client, CRemovePlayerInfo::new(1.into(), &[UUID(uuid)]));
self.broadcast_packet(&mut client, CRemoveEntities::new(&[id.into()]))
self.broadcast_packet_expect(
&mut client,
&CRemovePlayerInfo::new(1.into(), &[UUID(uuid)]),
);
self.broadcast_packet_expect(&mut client, &CRemoveEntities::new(&[id.into()]))
}
}

Expand Down Expand Up @@ -187,7 +191,7 @@ impl Server {
// also send his info to everyone else
self.broadcast_packet(
client,
CPlayerInfoUpdate::new(
&CPlayerInfoUpdate::new(
0x01 | 0x08,
&[pumpkin_protocol::client::play::Player {
uuid: gameprofile.id,
Expand Down Expand Up @@ -272,30 +276,32 @@ impl Server {
}
}
// entity meta data
/* if let Some(config) = &client.config {
if let Some(config) = &client.config {
self.broadcast_packet(
client,
CSetEntityMetadata::new(entity_id.into(), vec![Metadata::new(18, VarInt(0), 0)]),
&CSetEntityMetadata::new(
entity_id.into(),
Metadata::new(17, VarInt(0), config.skin_parts),
),
)
}
*/

// Server::spawn_test_chunk(client);
}

/// Sends a Packet to all Players
pub fn broadcast_packet<P>(&mut self, from: &mut Client, packet: P)
pub fn broadcast_packet<P>(&mut self, from: &mut Client, packet: &P)
where
P: ClientPacket,
{
// we can't borrow twice at same time
from.send_packet(&packet);
from.send_packet(packet);
for (_, client) in self.current_clients.iter().filter(|c| c.0 != &from.token) {
// Check if client is a player
let mut client = client.borrow_mut();
if client.is_player() {
// we need to clone, Because we send a new packet to every client
client.send_packet(&packet);
client.send_packet(packet);
}
}
}
Expand Down

0 comments on commit 50051d9

Please sign in to comment.