From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Fri, 1 Oct 2021 08:04:39 -0700
Subject: [PATCH] Add missing team sidebar display slots

== AT ==
public org.bukkit.craftbukkit.scoreboard.CraftScoreboardTranslations
public org.bukkit.craftbukkit.scoreboard.CraftScoreboardTranslations toBukkitSlot(I)Lorg/bukkit/scoreboard/DisplaySlot;
public org.bukkit.craftbukkit.scoreboard.CraftScoreboardTranslations fromBukkitSlot(Lorg/bukkit/scoreboard/DisplaySlot;)I

diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java
index e2d3fe9af7d3bd82bee519b20e141cd58f68bbd6..944a4fee237730c0d89567aaa6ddf268467aa0e0 100644
--- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java
+++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java
@@ -7,36 +7,23 @@ import org.bukkit.scoreboard.DisplaySlot;
 import org.bukkit.scoreboard.RenderType;
 
 public final class CraftScoreboardTranslations {
-    static final int MAX_DISPLAY_SLOT = 19;
+    static final int MAX_DISPLAY_SLOT = Scoreboard.getDisplaySlotNames().length; // Paper
+    @Deprecated // Paper
     static final ImmutableBiMap<DisplaySlot, String> SLOTS = ImmutableBiMap.<DisplaySlot, String>builder()
             .put(DisplaySlot.BELOW_NAME, "belowName")
             .put(DisplaySlot.PLAYER_LIST, "list")
             .put(DisplaySlot.SIDEBAR, "sidebar")
-            .put(DisplaySlot.SIDEBAR_BLACK, "sidebar.team.black")
-            .put(DisplaySlot.SIDEBAR_DARK_BLUE, "sidebar.team.dark_blue")
-            .put(DisplaySlot.SIDEBAR_DARK_GREEN, "sidebar.team.dark_green")
-            .put(DisplaySlot.SIDEBAR_DARK_AQUA, "sidebar.team.dark_aqua")
-            .put(DisplaySlot.SIDEBAR_DARK_RED, "sidebar.team.dark_red")
-            .put(DisplaySlot.SIDEBAR_DARK_PURPLE, "sidebar.team.dark_purple")
-            .put(DisplaySlot.SIDEBAR_GOLD, "sidebar.team.gold")
-            .put(DisplaySlot.SIDEBAR_GRAY, "sidebar.team.gray")
-            .put(DisplaySlot.SIDEBAR_DARK_GRAY, "sidebar.team.dark_gray")
-            .put(DisplaySlot.SIDEBAR_BLUE, "sidebar.team.blue")
-            .put(DisplaySlot.SIDEBAR_GREEN, "sidebar.team.green")
-            .put(DisplaySlot.SIDEBAR_AQUA, "sidebar.team.aqua")
-            .put(DisplaySlot.SIDEBAR_RED, "sidebar.team.red")
-            .put(DisplaySlot.SIDEBAR_LIGHT_PURPLE, "sidebar.team.light_purple")
-            .put(DisplaySlot.SIDEBAR_YELLOW, "sidebar.team.yellow")
-            .put(DisplaySlot.SIDEBAR_WHITE, "sidebar.team.white")
             .buildOrThrow();
 
     private CraftScoreboardTranslations() {}
 
     public static DisplaySlot toBukkitSlot(int i) {
+        if (true) return org.bukkit.scoreboard.DisplaySlot.NAMES.value(Scoreboard.getDisplaySlotName(i)); // Paper
         return CraftScoreboardTranslations.SLOTS.inverse().get(Scoreboard.getDisplaySlotName(i));
     }
 
     public static int fromBukkitSlot(DisplaySlot slot) {
+        if (true) return Scoreboard.getDisplaySlotByName(slot.getId()); // Paper
         return Scoreboard.getDisplaySlotByName(CraftScoreboardTranslations.SLOTS.get(slot));
     }
 
diff --git a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java
index 2c537a80951ddf98d3135ca19a34a238484c2d88..cf73d333ae625ea1bdc32d5f79daf408937bb13b 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java
@@ -251,6 +251,14 @@ public class Commodore
                             desc = getOriginalOrRewrite( desc );
                         }
                         // Paper end
+                        // Paper start - DisplaySlot
+                        if (owner.equals("org/bukkit/scoreboard/DisplaySlot")) {
+                            if (name.startsWith("SIDEBAR_") && !name.startsWith("SIDEBAR_TEAM_")) {
+                                super.visitFieldInsn(opcode, owner, name.replace("SIDEBAR_", "SIDEBAR_TEAM_"), desc);
+                                return;
+                            }
+                        }
+                        // Paper end - DisplaySlot
 
                         if ( owner.equals( "org/bukkit/block/Biome" ) )
                         {
diff --git a/src/test/java/io/papermc/paper/scoreboard/DisplaySlotTest.java b/src/test/java/io/papermc/paper/scoreboard/DisplaySlotTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..bb41a2f2c0a5e3b4cb3fe1b584e0ceb7a7116afb
--- /dev/null
+++ b/src/test/java/io/papermc/paper/scoreboard/DisplaySlotTest.java
@@ -0,0 +1,26 @@
+package io.papermc.paper.scoreboard;
+
+import net.minecraft.world.scores.Scoreboard;
+import org.bukkit.craftbukkit.scoreboard.CraftScoreboardTranslations;
+import org.bukkit.scoreboard.DisplaySlot;
+import org.junit.Test;
+
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+
+public class DisplaySlotTest {
+
+    @Test
+    public void testBukkitToMinecraftDisplaySlots() {
+        for (DisplaySlot value : DisplaySlot.values()) {
+            assertNotEquals(-1, CraftScoreboardTranslations.fromBukkitSlot(value));
+        }
+    }
+
+    @Test
+    public void testMinecraftToBukkitDisplaySlots() {
+        for (String name : Scoreboard.getDisplaySlotNames()) {
+            assertNotNull(CraftScoreboardTranslations.toBukkitSlot(Scoreboard.getDisplaySlotByName(name)));
+        }
+    }
+}
