1
1
use ferrumc_commands:: graph:: CommandsPacket ;
2
+ use ferrumc_config:: statics:: { get_global_config, get_whitelist} ;
2
3
use ferrumc_core:: identity:: player_identity:: PlayerIdentity ;
3
4
use ferrumc_core:: transform:: grounded:: OnGround ;
4
5
use ferrumc_core:: transform:: position:: Position ;
@@ -16,6 +17,7 @@ use ferrumc_net::packets::outgoing::client_bound_known_packs::ClientBoundKnownPa
16
17
use ferrumc_net:: packets:: outgoing:: finish_configuration:: FinishConfigurationPacket ;
17
18
use ferrumc_net:: packets:: outgoing:: game_event:: GameEventPacket ;
18
19
use ferrumc_net:: packets:: outgoing:: keep_alive:: OutgoingKeepAlivePacket ;
20
+ use ferrumc_net:: packets:: outgoing:: login_disconnect:: LoginDisconnectPacket ;
19
21
use ferrumc_net:: packets:: outgoing:: login_play:: LoginPlayPacket ;
20
22
use ferrumc_net:: packets:: outgoing:: login_success:: LoginSuccessPacket ;
21
23
use ferrumc_net:: packets:: outgoing:: registry_data:: get_registry_packets;
@@ -32,23 +34,37 @@ async fn handle_login_start(
32
34
login_start_event : LoginStartEvent ,
33
35
state : GlobalState ,
34
36
) -> Result < LoginStartEvent , NetError > {
35
- debug ! ( "Handling login start event" ) ;
36
-
37
37
let uuid = login_start_event. login_start_packet . uuid ;
38
38
let username = login_start_event. login_start_packet . username . as_str ( ) ;
39
- debug ! ( "Received login start from user with username {}" , username) ;
40
-
41
- // Add the player identity component to the ECS for the entity.
42
- state. universe . add_component :: < PlayerIdentity > (
43
- login_start_event. conn_id ,
44
- PlayerIdentity :: new ( username. to_string ( ) , uuid) ,
45
- ) ?;
39
+ let player_identity = PlayerIdentity :: new ( username. to_string ( ) , uuid) ;
40
+ debug ! ( "Handling login start event for user: {username}, uuid: {uuid}" ) ;
46
41
47
- //Send a Login Success Response to further the login sequence
48
42
let mut writer = state
49
43
. universe
50
44
. get_mut :: < StreamWriter > ( login_start_event. conn_id ) ?;
51
45
46
+ if get_global_config ( ) . whitelist {
47
+ let whitelist = get_whitelist ( ) ;
48
+
49
+ if whitelist. get ( & uuid) . is_none ( ) {
50
+ writer
51
+ . send_packet (
52
+ & LoginDisconnectPacket :: new (
53
+ "{\" translate\" :\" multiplayer.disconnect.not_whitelisted\" }" ,
54
+ ) ,
55
+ & NetEncodeOpts :: WithLength ,
56
+ )
57
+ . await ?;
58
+ return Ok ( login_start_event) ;
59
+ }
60
+ }
61
+
62
+ // Add the player identity component to the ECS for the entity.
63
+ state
64
+ . universe
65
+ . add_component :: < PlayerIdentity > ( login_start_event. conn_id , player_identity) ?;
66
+
67
+ //Send a Login Success Response to further the login sequence
52
68
writer
53
69
. send_packet (
54
70
& LoginSuccessPacket :: new ( uuid, username) ,
0 commit comments