@@ -8,8 +8,9 @@ use ferrumc_net::packets::incoming::login_acknowledged::LoginAcknowledgedEvent;
8
8
use ferrumc_net:: packets:: incoming:: login_start:: LoginStartEvent ;
9
9
use ferrumc_net:: packets:: incoming:: server_bound_known_packs:: ServerBoundKnownPacksEvent ;
10
10
use ferrumc_net:: packets:: outgoing:: client_bound_known_packs:: ClientBoundKnownPacksPacket ;
11
+ use ferrumc_net:: packets:: outgoing:: finish_configuration:: FinishConfigurationPacket ;
11
12
use ferrumc_net:: packets:: outgoing:: game_event:: GameEventPacket ;
12
- use ferrumc_net:: packets:: outgoing:: keep_alive:: { KeepAlive , KeepAlivePacket } ;
13
+ use ferrumc_net:: packets:: outgoing:: keep_alive:: OutgoingKeepAlivePacket ;
13
14
use ferrumc_net:: packets:: outgoing:: login_play:: LoginPlayPacket ;
14
15
use ferrumc_net:: packets:: outgoing:: login_success:: LoginSuccessPacket ;
15
16
use ferrumc_net:: packets:: outgoing:: registry_data:: get_registry_packets;
@@ -18,7 +19,6 @@ use ferrumc_net::packets::outgoing::synchronize_player_position::SynchronizePlay
18
19
use ferrumc_net:: GlobalState ;
19
20
use ferrumc_net_codec:: encode:: NetEncodeOpts ;
20
21
use tracing:: { debug, trace} ;
21
- use ferrumc_net:: packets:: outgoing:: finish_configuration:: FinishConfigurationPacket ;
22
22
23
23
#[ event_handler]
24
24
async fn handle_login_start (
@@ -31,19 +31,23 @@ async fn handle_login_start(
31
31
let username = login_start_event. login_start_packet . username . as_str ( ) ;
32
32
debug ! ( "Received login start from user with username {}" , username) ;
33
33
34
-
35
34
// Add the player identity component to the ECS for the entity.
36
35
state. universe . add_component :: < PlayerIdentity > (
37
36
login_start_event. conn_id ,
38
37
PlayerIdentity :: new ( username. to_string ( ) , uuid) ,
39
38
) ?;
40
-
39
+
41
40
//Send a Login Success Response to further the login sequence
42
41
let mut writer = state
43
42
. universe
44
43
. get_mut :: < StreamWriter > ( login_start_event. conn_id ) ?;
45
44
46
- writer. send_packet ( & LoginSuccessPacket :: new ( uuid, username) , & NetEncodeOpts :: WithLength ) . await ?;
45
+ writer
46
+ . send_packet (
47
+ & LoginSuccessPacket :: new ( uuid, username) ,
48
+ & NetEncodeOpts :: WithLength ,
49
+ )
50
+ . await ?;
47
51
48
52
Ok ( login_start_event)
49
53
}
@@ -62,15 +66,16 @@ async fn handle_login_acknowledged(
62
66
63
67
* connection_state = ConnectionState :: Configuration ;
64
68
65
-
66
69
// Send packets packet
67
70
let client_bound_known_packs = ClientBoundKnownPacksPacket :: new ( ) ;
68
71
69
72
let mut writer = state
70
73
. universe
71
74
. get_mut :: < StreamWriter > ( login_acknowledged_event. conn_id ) ?;
72
75
73
- writer. send_packet ( & client_bound_known_packs, & NetEncodeOpts :: WithLength ) . await ?;
76
+ writer
77
+ . send_packet ( & client_bound_known_packs, & NetEncodeOpts :: WithLength )
78
+ . await ?;
74
79
75
80
Ok ( login_acknowledged_event)
76
81
}
@@ -87,10 +92,17 @@ async fn handle_server_bound_known_packs(
87
92
. get_mut :: < StreamWriter > ( server_bound_known_packs_event. conn_id ) ?;
88
93
89
94
let registry_packets = get_registry_packets ( ) ;
90
- writer. send_packet ( & registry_packets, & NetEncodeOpts :: None ) . await ?;
91
-
92
- writer. send_packet ( & FinishConfigurationPacket :: new ( ) , & NetEncodeOpts :: WithLength ) . await ?;
93
-
95
+ writer
96
+ . send_packet ( & registry_packets, & NetEncodeOpts :: None )
97
+ . await ?;
98
+
99
+ writer
100
+ . send_packet (
101
+ & FinishConfigurationPacket :: new ( ) ,
102
+ & NetEncodeOpts :: WithLength ,
103
+ )
104
+ . await ?;
105
+
94
106
Ok ( server_bound_known_packs_event)
95
107
}
96
108
@@ -103,34 +115,51 @@ async fn handle_ack_finish_configuration(
103
115
104
116
let conn_id = ack_finish_configuration_event. conn_id ;
105
117
106
- let mut conn_state = state
107
- . universe
108
- . get_mut :: < ConnectionState > ( conn_id) ?;
118
+ let mut conn_state = state. universe . get_mut :: < ConnectionState > ( conn_id) ?;
109
119
110
120
* conn_state = ConnectionState :: Play ;
111
121
112
- let mut writer = state
113
- . universe
114
- . get_mut :: < StreamWriter > ( conn_id) ?;
115
-
116
- writer. send_packet ( & LoginPlayPacket :: new ( conn_id) , & NetEncodeOpts :: WithLength ) . await ?;
117
- writer. send_packet ( & SetDefaultSpawnPositionPacket :: default ( ) , & NetEncodeOpts :: WithLength ) . await ?;
118
- writer. send_packet ( & SynchronizePlayerPositionPacket :: default ( ) , & NetEncodeOpts :: WithLength ) . await ?;
119
- writer. send_packet ( & GameEventPacket :: start_waiting_for_level_chunks ( ) , & NetEncodeOpts :: WithLength ) . await ?;
122
+ let mut writer = state. universe . get_mut :: < StreamWriter > ( conn_id) ?;
123
+
124
+ writer
125
+ . send_packet ( & LoginPlayPacket :: new ( conn_id) , & NetEncodeOpts :: WithLength )
126
+ . await ?;
127
+ writer
128
+ . send_packet (
129
+ & SetDefaultSpawnPositionPacket :: default ( ) ,
130
+ & NetEncodeOpts :: WithLength ,
131
+ )
132
+ . await ?;
133
+ writer
134
+ . send_packet (
135
+ & SynchronizePlayerPositionPacket :: default ( ) ,
136
+ & NetEncodeOpts :: WithLength ,
137
+ )
138
+ . await ?;
139
+ writer
140
+ . send_packet (
141
+ & GameEventPacket :: start_waiting_for_level_chunks ( ) ,
142
+ & NetEncodeOpts :: WithLength ,
143
+ )
144
+ . await ?;
120
145
121
146
send_keep_alive ( conn_id, state, & mut writer) . await ?;
122
147
123
-
124
148
Ok ( ack_finish_configuration_event)
125
149
}
126
- async fn send_keep_alive ( conn_id : usize , state : GlobalState , writer : & mut ComponentRefMut < ' _ , StreamWriter > ) -> Result < ( ) , NetError > {
127
- let keep_alive_packet = KeepAlivePacket :: default ( ) ;
128
- writer. send_packet ( & keep_alive_packet, & NetEncodeOpts :: WithLength ) . await ?;
129
-
130
- let id = keep_alive_packet. id ;
131
-
132
- state. universe . add_component :: < KeepAlive > ( conn_id, id) ?;
133
-
150
+ async fn send_keep_alive (
151
+ conn_id : usize ,
152
+ state : GlobalState ,
153
+ writer : & mut ComponentRefMut < ' _ , StreamWriter > ,
154
+ ) -> Result < ( ) , NetError > {
155
+ let keep_alive_packet = OutgoingKeepAlivePacket :: default ( ) ;
156
+ writer
157
+ . send_packet ( & keep_alive_packet, & NetEncodeOpts :: WithLength )
158
+ . await ?;
159
+
160
+ state
161
+ . universe
162
+ . add_component :: < OutgoingKeepAlivePacket > ( conn_id, keep_alive_packet) ?;
134
163
135
164
Ok ( ( ) )
136
- }
165
+ }
0 commit comments