@@ -10,6 +10,7 @@ use valence::inventory::HeldItem;
10
10
use valence:: prelude:: * ;
11
11
use valence_client:: interact_block:: InteractBlockEvent ;
12
12
use valence_client:: message:: SendMessage ;
13
+ use valence_client:: status:: RequestRespawnEvent ;
13
14
use valence_entity:: cow:: CowEntityBundle ;
14
15
use valence_entity:: entity:: Flags ;
15
16
use valence_entity:: living:: Health ;
@@ -50,6 +51,7 @@ pub fn main() {
50
51
// visualize_triggers,
51
52
update_clones,
52
53
teleport_oob_clients,
54
+ necromancy,
53
55
) ,
54
56
)
55
57
. run ( ) ;
@@ -881,3 +883,29 @@ fn teleport_oob_clients(mut clients: Query<(&mut Position, &Team), With<Client>>
881
883
}
882
884
}
883
885
}
886
+
887
+ /// Handles respawning dead players.
888
+ fn necromancy (
889
+ mut clients : Query < (
890
+ & mut VisibleChunkLayer ,
891
+ & mut RespawnPosition ,
892
+ & Team ,
893
+ & mut Health ,
894
+ ) > ,
895
+ mut events : EventReader < RequestRespawnEvent > ,
896
+ layers : Query < Entity , ( With < ChunkLayer > , With < EntityLayer > ) > ,
897
+ ) {
898
+ for event in events. iter ( ) {
899
+ if let Ok ( ( mut visible_chunk_layer, mut respawn_pos, team, mut health) ) =
900
+ clients. get_mut ( event. client )
901
+ {
902
+ respawn_pos. pos = BlockPos :: from_pos ( team. spawn_pos ( ) ) ;
903
+ health. 0 = 20.0 ;
904
+
905
+ let main_layer = layers. single ( ) ;
906
+
907
+ // this gets the client to get rid of the respawn screen
908
+ visible_chunk_layer. 0 = main_layer;
909
+ }
910
+ }
911
+ }
0 commit comments