From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Zach Brown <zach.brown@destroystokyo.com>
Date: Wed, 6 Apr 2016 01:04:23 -0500
Subject: [PATCH] Option to use vanilla per-world scoreboard coloring on names

This change is basically a bandaid to fix CB's complete and utter lack
of support for vanilla scoreboard name modifications.

In the future, finding a way to merge the vanilla expectations in with
bukkit's concept of a display name would be preferable. There was a PR
for this on CB at one point but I can't find it. We may need to do this
ourselves at some point in the future.

diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
index 47f5f8055ed45914309ca9a295ac48b89f192320..b1d1a3c1f84e0d2153de257183687502c8f393d1 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@@ -252,4 +252,9 @@ public class PaperWorldConfig {
         grassUpdateRate = Math.max(0, getInt("grass-spread-tick-rate", grassUpdateRate));
         log("Grass Spread Tick Rate: " + grassUpdateRate);
     }
+
+    public boolean useVanillaScoreboardColoring;
+    private void useVanillaScoreboardColoring() {
+        useVanillaScoreboardColoring = getBoolean("use-vanilla-world-scoreboard-name-coloring", false);
+    }
 }
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index 505189c82b7544d4fbb3922153e9db1503375b0e..669d9a41d6a6b4226ba4bee7084f8cfe804e0b1a 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -1648,7 +1648,16 @@ public class PlayerConnection implements PacketListenerPlayIn {
                     return;
                 }
 
-                s = String.format(event.getFormat(), event.getPlayer().getDisplayName(), event.getMessage());
+                // Paper Start - (Meh) Support for vanilla world scoreboard name coloring
+                String displayName = event.getPlayer().getDisplayName();
+                if (this.player.getWorld().paperConfig.useVanillaScoreboardColoring) {
+                    IChatBaseComponent nameFromTeam = ScoreboardTeam.a(this.player.getScoreboardTeam(), ((CraftPlayer) player).getHandle().getDisplayName());
+                    // Explicitly add a RESET here, vanilla uses components for this now...
+                    displayName = CraftChatMessage.fromComponent(nameFromTeam, EnumChatFormat.WHITE) + org.bukkit.ChatColor.RESET;
+                }
+
+                s = String.format(event.getFormat(), displayName, event.getMessage());
+                // Paper end
                 minecraftServer.console.sendMessage(s);
                 if (((LazyPlayerSet) event.getRecipients()).isLazy()) {
                     for (Object recipient : minecraftServer.getPlayerList().players) {
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
index 9691d84f2c3bef7218ecca57248dafcbba00be83..9212501b8b1cdf8102a752deda1cf38257fbd358 100644
--- a/src/main/java/net/minecraft/server/PlayerList.java
+++ b/src/main/java/net/minecraft/server/PlayerList.java
@@ -165,7 +165,7 @@ public abstract class PlayerList {
         }
         // CraftBukkit start
         chatmessage.a(EnumChatFormat.YELLOW);
-        String joinMessage = CraftChatMessage.fromComponent(chatmessage);
+        String joinMessage = CraftChatMessage.fromComponent(chatmessage, EnumChatFormat.WHITE);
 
         playerconnection.a(entityplayer.locX(), entityplayer.locY(), entityplayer.locZ(), entityplayer.yaw, entityplayer.pitch);
         this.players.add(entityplayer);
