7272import org .iq80 .leveldb .DB ;
7373import org .iq80 .leveldb .Options ;
7474
75+ import java .awt .*;
7576import java .io .*;
7677import java .net .InetAddress ;
7778import java .net .InetSocketAddress ;
8283import java .nio .file .Files ;
8384import java .nio .file .Path ;
8485import java .util .*;
86+ import java .util .List ;
8587import java .util .concurrent .CompletableFuture ;
8688import java .util .concurrent .atomic .AtomicBoolean ;
8789import java .util .regex .Matcher ;
@@ -829,6 +831,7 @@ public void updatePlayerListData(UUID uuid, long entityId, String name, Serializ
829831 entry .setSkin (skin );
830832 entry .setXuid (xboxUserId );
831833 entry .setPlatformChatId ("" );
834+ entry .setColor (parseSkinColor (skin .getSkinColor ()));
832835 packet .getEntries ().add (entry );
833836 CloudServer .broadcastPacket (players , packet );
834837 }
@@ -866,6 +869,7 @@ public void sendFullPlayerListData(CloudPlayer player) {
866869 entry .setSkin (p .getSerializedSkin ());
867870 entry .setXuid (p .getXuid ());
868871 entry .setPlatformChatId ("" );
872+ entry .setColor (parseSkinColor (p .getSerializedSkin ().getSkinColor ()));
869873 return entry ;
870874 }).collect (Collectors .toList ()));
871875
@@ -876,6 +880,16 @@ public void sendRecipeList(Player player) {
876880 this .craftingManager .sendRecipesTo ((CloudPlayer ) player );
877881 }
878882
883+ private static Color parseSkinColor (String skinColor ) {
884+ if (skinColor != null && skinColor .startsWith ("#" ) && skinColor .length () == 7 ) {
885+ try {
886+ return Color .decode (skinColor );
887+ } catch (NumberFormatException ignored ) {
888+ }
889+ }
890+ return Color .WHITE ;
891+ }
892+
879893 private void checkTickUpdates (int currentTick , long tickTime ) {
880894 for (Player p : new ArrayList <>(this .players .values ())) {
881895 /*if (!p.loggedIn && (tickTime - p.creationTime) >= 10000 && p.kick(PlayerKickEvent.Reason.LOGIN_TIMEOUT, "Login timeout")) {
0 commit comments