Skip to content

Commit 262c9ef

Browse files
committed
Handle skin color
1 parent caeba75 commit 262c9ef

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

server/src/main/java/org/cloudburstmc/server/CloudServer.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
import org.iq80.leveldb.DB;
7373
import org.iq80.leveldb.Options;
7474

75+
import java.awt.*;
7576
import java.io.*;
7677
import java.net.InetAddress;
7778
import java.net.InetSocketAddress;
@@ -82,6 +83,7 @@
8283
import java.nio.file.Files;
8384
import java.nio.file.Path;
8485
import java.util.*;
86+
import java.util.List;
8587
import java.util.concurrent.CompletableFuture;
8688
import java.util.concurrent.atomic.AtomicBoolean;
8789
import 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")) {

server/src/main/java/org/cloudburstmc/server/level/particle/FloatingTextParticle.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.cloudburstmc.protocol.bedrock.packet.*;
1313
import org.cloudburstmc.server.level.CloudLevel;
1414

15+
import java.awt.*;
1516
import java.util.ArrayList;
1617
import java.util.EnumMap;
1718
import java.util.UUID;
@@ -33,8 +34,8 @@ public class FloatingTextParticle extends Particle {
3334
.skinData(SKIN_DATA).build();
3435
}
3536

36-
protected UUID uuid = UUID.randomUUID();
3737
protected final CloudLevel level;
38+
protected UUID uuid = UUID.randomUUID();
3839
protected long entityId = -1;
3940
protected boolean invisible = false;
4041
protected EntityDataMap dataMap = new EntityDataMap();
@@ -135,6 +136,7 @@ public BedrockPacket[] encode() {
135136
entry.setSkin(EMPTY_SKIN);
136137
entry.setXuid("");
137138
entry.setPlatformChatId("");
139+
entry.setColor(Color.WHITE);
138140
PlayerListPacket playerAdd = new PlayerListPacket();
139141
playerAdd.getEntries().add(entry);
140142
playerAdd.setAction(PlayerListPacket.Action.ADD);

0 commit comments

Comments
 (0)