11use crate :: constants:: EntityVariant ;
2- use crate :: entity:: entity:: EntityBase ;
2+ use crate :: entity:: entity:: MinecraftEntity ;
33use crate :: entity:: entity_metadata:: { EntityMetadata , PlayerMetadata } ;
44use crate :: network:: binary:: var_int:: VarInt ;
55use crate :: network:: packets:: packet_buffer:: PacketBuffer ;
66use crate :: network:: protocol:: play:: clientbound:: { DestroyEntites , EntityRotate , EntityTeleport , EntityYawRotate , PlayerData , PlayerListItem , SpawnMob , SpawnPlayer } ;
77use crate :: { GameProfile , GameProfileProperty , Player , WorldExtension } ;
8+ use bevy_ecs:: component:: Mutable ;
9+ use bevy_ecs:: prelude:: Component ;
810use fstr:: FString ;
911use std:: collections:: HashMap ;
1012use uuid:: Uuid ;
1113
12- pub trait EntityAppearance < W : WorldExtension > {
13- fn initialize ( & self , entity : & mut EntityBase < W > ) ;
14+ pub trait EntityAppearance < W : WorldExtension + ' static > : Component < Mutability = Mutable > + Sized {
1415
15- fn destroy ( & self , entity : & mut EntityBase < W > , packet : & mut DestroyEntites ) ;
16+ fn enter_player_view ( & self , entity : & MinecraftEntity < W > , player : & mut Player < W :: Player > ) ;
1617
17- fn enter_player_view ( & self , entity : & mut EntityBase < W > , player : & mut Player < W :: Player > ) ;
18+ fn leave_player_view ( & self , entity : & MinecraftEntity < W > , player : & mut Player < W :: Player > ) ;
1819
19- fn leave_player_view ( & self , entity : & mut EntityBase < W > , player : & mut Player < W :: Player > ) ;
20+ fn update_position ( & self , entity : & MinecraftEntity < W > , packet_buffer : & mut PacketBuffer ) ;
2021
21- fn update_position ( & self , entity : & mut EntityBase < W > , chunk_buffer : & mut PacketBuffer ) ;
22-
23- fn update_rotation ( & self , entity : & mut EntityBase < W > , chunk_buffer : & mut PacketBuffer ) ;
22+ fn destroy ( & self , entity : & MinecraftEntity < W > , packet : & mut DestroyEntites ) ;
2423}
2524
25+ #[ derive( Component ) ]
2626pub struct MobAppearance {
2727 pub variant : EntityVariant ,
2828 pub metadata : EntityMetadata ,
2929}
3030
31- impl < W : WorldExtension > EntityAppearance < W > for MobAppearance {
32- fn initialize ( & self , _: & mut EntityBase < W > ) { }
33-
34- fn destroy ( & self , entity_base : & mut EntityBase < W > , packet : & mut DestroyEntites ) {
35- packet. entities . push ( VarInt ( entity_base. id ) )
36- }
37-
38- fn enter_player_view ( & self , entity : & mut EntityBase < W > , player : & mut Player < W :: Player > ) {
31+ impl < W : WorldExtension + ' static > EntityAppearance < W > for MobAppearance {
32+ fn enter_player_view ( & self , entity : & MinecraftEntity < W > , player : & mut Player < W :: Player > ) {
3933 player. write_packet ( & SpawnMob {
4034 entity_id : entity. id ,
4135 entity_variant : self . variant ,
@@ -53,41 +47,25 @@ impl<W: WorldExtension> EntityAppearance<W> for MobAppearance {
5347 player. write_packet ( & EntityYawRotate {
5448 entity_id : entity. id ,
5549 yaw : entity. yaw ,
56- } )
50+ } ) ;
5751 }
5852
59- fn leave_player_view ( & self , entity : & mut EntityBase < W > , player : & mut Player < W :: Player > ) {
53+ fn leave_player_view ( & self , entity : & MinecraftEntity < W > , player : & mut Player < W :: Player > ) {
6054 player. write_packet ( & DestroyEntites {
6155 entities : vec ! [ VarInt ( entity. id) ] ,
6256 } )
6357 }
6458
65- fn update_position ( & self , entity : & mut EntityBase < W > , packet_buffer : & mut PacketBuffer ) {
66- packet_buffer. write_packet ( & EntityTeleport {
67- entity_id : entity. id ,
68- pos_x : entity. position . x ,
69- pos_y : entity. position . y ,
70- pos_z : entity. position . z ,
71- yaw : entity. yaw ,
72- pitch : entity. pitch ,
73- on_ground : false ,
74- } )
59+ fn update_position ( & self , entity : & MinecraftEntity < W > , packet_buffer : & mut PacketBuffer ) {
60+ update_position ( entity, packet_buffer)
7561 }
7662
77- fn update_rotation ( & self , entity : & mut EntityBase < W > , packet_buffer : & mut PacketBuffer ) {
78- packet_buffer. write_packet ( & EntityRotate {
79- entity_id : entity. id ,
80- yaw : entity. yaw ,
81- pitch : entity. pitch ,
82- on_ground : false ,
83- } ) ;
84- packet_buffer. write_packet ( & EntityYawRotate {
85- entity_id : entity. id ,
86- yaw : entity. yaw ,
87- } ) ;
63+ fn destroy ( & self , entity : & MinecraftEntity < W > , packet : & mut DestroyEntites ) {
64+ packet. entities . push ( VarInt ( entity. id ) )
8865 }
8966}
9067
68+ #[ derive( Component ) ]
9169pub struct PlayerAppearance {
9270 name : & ' static str ,
9371 metadata : PlayerMetadata ,
@@ -97,7 +75,6 @@ pub struct PlayerAppearance {
9775}
9876
9977impl PlayerAppearance {
100-
10178 pub fn new (
10279 name : & ' static str ,
10380 metadata : PlayerMetadata ,
@@ -114,14 +91,8 @@ impl PlayerAppearance {
11491 }
11592}
11693
117- impl < W : WorldExtension > EntityAppearance < W > for PlayerAppearance {
118- fn initialize ( & self , _: & mut EntityBase < W > ) { }
119-
120- fn destroy ( & self , entity : & mut EntityBase < W > , packet : & mut DestroyEntites ) {
121- packet. entities . push ( VarInt ( entity. id ) )
122- }
123-
124- fn enter_player_view ( & self , entity : & mut EntityBase < W > , player : & mut Player < W :: Player > ) {
94+ impl < W : WorldExtension + ' static > EntityAppearance < W > for PlayerAppearance {
95+ fn enter_player_view ( & self , entity : & MinecraftEntity < W > , player : & mut Player < W :: Player > ) {
12596 player. write_packet ( & PlayerListItem {
12697 action : VarInt ( 0 ) ,
12798 players : & [ PlayerData {
@@ -157,39 +128,38 @@ impl<W: WorldExtension> EntityAppearance<W> for PlayerAppearance {
157128 } ) ;
158129 player. write_packet ( & EntityYawRotate {
159130 entity_id : entity. id ,
160- yaw : entity. yaw ,
131+ yaw : entity. yaw
161132 } ) ;
162133 player. add_delayed_profile_remove ( self . uuid ) ;
163134 }
164135
165- fn leave_player_view ( & self , entity : & mut EntityBase < W > , player : & mut Player < W :: Player > ) {
136+ fn leave_player_view ( & self , entity : & MinecraftEntity < W > , player : & mut Player < W :: Player > ) {
166137 player. write_packet ( & DestroyEntites {
167138 entities : vec ! [ VarInt ( entity. id) ] ,
168139 } )
169140 }
170141
171- fn update_position ( & self , entity : & mut EntityBase < W > , packet_buffer : & mut PacketBuffer ) {
172- packet_buffer. write_packet ( & EntityTeleport {
173- entity_id : entity. id ,
174- pos_x : entity. position . x ,
175- pos_y : entity. position . y ,
176- pos_z : entity. position . z ,
177- yaw : entity. yaw ,
178- pitch : entity. pitch ,
179- on_ground : false ,
180- } )
142+ fn update_position ( & self , entity : & MinecraftEntity < W > , packet_buffer : & mut PacketBuffer ) {
143+ update_position ( entity, packet_buffer)
181144 }
182145
183- fn update_rotation ( & self , entity : & mut EntityBase < W > , packet_buffer : & mut PacketBuffer ) {
184- packet_buffer. write_packet ( & EntityRotate {
185- entity_id : entity. id ,
186- yaw : entity. yaw ,
187- pitch : entity. pitch ,
188- on_ground : false ,
189- } ) ;
190- packet_buffer. write_packet ( & EntityYawRotate {
191- entity_id : entity. id ,
192- yaw : entity. yaw ,
193- } ) ;
146+ fn destroy ( & self , entity : & MinecraftEntity < W > , packet : & mut DestroyEntites ) {
147+ packet. entities . push ( VarInt ( entity. id ) )
194148 }
195149}
150+
151+ fn update_position < W : WorldExtension > ( entity : & MinecraftEntity < W > , buffer : & mut PacketBuffer ) {
152+ buffer. write_packet ( & EntityTeleport {
153+ entity_id : entity. id ,
154+ pos_x : entity. position . x ,
155+ pos_y : entity. position . y ,
156+ pos_z : entity. position . z ,
157+ yaw : entity. yaw ,
158+ pitch : entity. pitch ,
159+ on_ground : false ,
160+ } ) ;
161+ buffer. write_packet ( & EntityYawRotate {
162+ entity_id : entity. id ,
163+ yaw : entity. yaw ,
164+ } ) ;
165+ }
0 commit comments