@@ -29,16 +29,23 @@ public PacketManipulations() {
2929 PacketType .Play .Server .PLAYER_INFO_UPDATE ,
3030 this ::handlePlayerInfo ,
3131 PacketType .Play .Server .TEAMS ,
32- this ::handleScoreboardTeam ));
32+ this ::handleScoreboardTeams ));
3333 }
3434
3535 private void handlePlayerInfo (@ NonNull PacketSendEvent event ) {
3636 Player viewer = event .getPlayer ();
37- WrapperPlayServerPlayerInfoUpdate wrapper = new WrapperPlayServerPlayerInfoUpdate (event );
37+ var wrapper = new WrapperPlayServerPlayerInfoUpdate (event );
38+
39+ var actions = wrapper .getActions ();
40+ boolean hasAddPlayer = actions .contains (WrapperPlayServerPlayerInfoUpdate .Action .ADD_PLAYER );
41+ boolean hasUpdateDisplayName =
42+ actions .contains (WrapperPlayServerPlayerInfoUpdate .Action .UPDATE_DISPLAY_NAME );
43+
44+ if (!hasAddPlayer && !hasUpdateDisplayName ) return ;
3845
3946 boolean modified = false ;
40- List < WrapperPlayServerPlayerInfoUpdate . PlayerInfo > entries = wrapper .getEntries ();
41- for (WrapperPlayServerPlayerInfoUpdate . PlayerInfo entry : entries ) {
47+ var entries = wrapper .getEntries ();
48+ for (var entry : entries ) {
4249 Player player = Bukkit .getPlayer (entry .getProfileId ());
4350 if (player == null || player .equals (viewer )) continue ;
4451
@@ -47,42 +54,47 @@ private void handlePlayerInfo(@NonNull PacketSendEvent event) {
4754
4855 if (StringUtils .isBlank (playerName ) || StringUtils .isBlank (playerDisplayName )) continue ;
4956
50- UserProfile profile = entry .getGameProfile ();
51- profile .setName (playerName );
57+ if (hasAddPlayer ) {
58+ UserProfile profile = entry .getGameProfile ();
59+ profile .setName (playerName );
60+
61+ Skin skin = PLAYER_UTILS .getPlayerSkin (player , viewer );
62+ profile .getTextureProperties ().clear ();
63+ profile
64+ .getTextureProperties ()
65+ .add (new TextureProperty ("textures" , skin .getData (), skin .getSignature ()));
5266
53- Skin skin = PLAYER_UTILS .getPlayerSkin (player , viewer );
54- profile .getTextureProperties ().clear ();
55- profile
56- .getTextureProperties ()
57- .add (new TextureProperty ("textures" , skin .getData (), skin .getSignature ()));
67+ entry .setGameProfile (profile );
68+ }
5869
59- entry .setGameProfile (profile );
60- entry .setDisplayName (
61- LegacyComponentSerializer .legacySection ().deserialize (playerDisplayName ));
70+ if (hasUpdateDisplayName ) {
71+ entry .setDisplayName (
72+ LegacyComponentSerializer .legacySection ().deserialize (playerDisplayName ));
73+ }
6274
6375 modified = true ;
6476 }
6577
6678 if (modified ) event .markForReEncode (true );
6779 }
6880
69- private void handleScoreboardTeam (@ NonNull PacketSendEvent event ) {
81+ private void handleScoreboardTeams (@ NonNull PacketSendEvent event ) {
7082 Player viewer = event .getPlayer ();
71- WrapperPlayServerTeams wrapper = new WrapperPlayServerTeams (event );
83+ var wrapper = new WrapperPlayServerTeams (event );
7284
7385 List <String > players = new ArrayList <>(wrapper .getPlayers ());
7486 if (players .isEmpty ()) return ;
7587
7688 boolean modified = false ;
77- for (String name : players ) {
78- Player player = Bukkit .getPlayerExact (name );
89+ for (int i = 0 ; i < players . size (); i ++ ) {
90+ Player player = Bukkit .getPlayerExact (players . get ( i ) );
7991
8092 if (player == null || player .equals (viewer )) continue ;
8193
8294 String playerName = PLAYER_UTILS .getPlayerName (player , viewer );
83- if (StringUtils .isBlank (playerName ) || playerName .equals (name )) continue ;
95+ if (StringUtils .isBlank (playerName ) || playerName .equals (player . getName () )) continue ;
8496
85- players .set (players . indexOf ( name ) , playerName );
97+ players .set (i , playerName );
8698 modified = true ;
8799 }
88100
0 commit comments