diff --git a/build-data/paper.at b/build-data/paper.at index 700f8363bb..38986ed82d 100644 --- a/build-data/paper.at +++ b/build-data/paper.at @@ -236,3 +236,8 @@ public-f com.mojang.brigadier.tree.CommandNode requirement # Block Enderpearl Travel Exploit public net.minecraft.world.entity.projectile.Projectile cachedOwner public net.minecraft.world.entity.projectile.Projectile ownerUUID + +# Add missing display slots +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/patches/api/Add-missing-team-sidebar-display-slots.patch b/patches/api/Add-missing-team-sidebar-display-slots.patch new file mode 100644 index 0000000000..96014a3e2d --- /dev/null +++ b/patches/api/Add-missing-team-sidebar-display-slots.patch @@ -0,0 +1,69 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic <jake.m.potrebic@gmail.com> +Date: Fri, 1 Oct 2021 08:04:43 -0700 +Subject: [PATCH] Add missing team sidebar display slots + + +diff --git a/src/main/java/org/bukkit/scoreboard/DisplaySlot.java b/src/main/java/org/bukkit/scoreboard/DisplaySlot.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/scoreboard/DisplaySlot.java ++++ b/src/main/java/org/bukkit/scoreboard/DisplaySlot.java +@@ -0,0 +0,0 @@ + package org.bukkit.scoreboard; + ++import net.kyori.adventure.text.format.NamedTextColor; // Paper + /** + * Locations for displaying objectives to the player + */ + public enum DisplaySlot { +- BELOW_NAME, +- PLAYER_LIST, +- SIDEBAR; ++ // Paper start ++ BELOW_NAME("belowName"), ++ PLAYER_LIST("list"), ++ SIDEBAR("sidebar"), ++ SIDEBAR_TEAM_BLACK(NamedTextColor.BLACK), ++ SIDEBAR_TEAM_DARK_BLUE(NamedTextColor.DARK_BLUE), ++ SIDEBAR_TEAM_DARK_GREEN(NamedTextColor.DARK_GREEN), ++ SIDEBAR_TEAM_DARK_AQUA(NamedTextColor.DARK_AQUA), ++ SIDEBAR_TEAM_DARK_RED(NamedTextColor.DARK_RED), ++ SIDEBAR_TEAM_DARK_PURPLE(NamedTextColor.DARK_PURPLE), ++ SIDEBAR_TEAM_GOLD(NamedTextColor.GOLD), ++ SIDEBAR_TEAM_GRAY(NamedTextColor.GRAY), ++ SIDEBAR_TEAM_DARK_GRAY(NamedTextColor.DARK_GRAY), ++ SIDEBAR_TEAM_BLUE(NamedTextColor.BLUE), ++ SIDEBAR_TEAM_GREEN(NamedTextColor.GREEN), ++ SIDEBAR_TEAM_AQUA(NamedTextColor.AQUA), ++ SIDEBAR_TEAM_RED(NamedTextColor.RED), ++ SIDEBAR_TEAM_LIGHT_PURPLE(NamedTextColor.LIGHT_PURPLE), ++ SIDEBAR_TEAM_YELLOW(NamedTextColor.YELLOW), ++ SIDEBAR_TEAM_WHITE(NamedTextColor.WHITE); ++ ++ public static final net.kyori.adventure.util.Index<String, DisplaySlot> NAMES = net.kyori.adventure.util.Index.create(DisplaySlot.class, DisplaySlot::getId); ++ ++ private final String id; ++ ++ DisplaySlot(@org.jetbrains.annotations.NotNull String id) { ++ this.id = id; ++ } ++ ++ DisplaySlot(@org.jetbrains.annotations.NotNull NamedTextColor color) { ++ this.id = "sidebar.team." + color; ++ } ++ ++ /** ++ * Get the string id of this display slot. ++ * ++ * @return the string id ++ */ ++ public @org.jetbrains.annotations.NotNull String getId() { ++ return id; ++ } ++ ++ @Override ++ public String toString() { ++ return this.id; ++ } ++ // Paper end + } diff --git a/patches/server/Add-missing-team-sidebar-display-slots.patch b/patches/server/Add-missing-team-sidebar-display-slots.patch new file mode 100644 index 0000000000..987ee70f99 --- /dev/null +++ b/patches/server/Add-missing-team-sidebar-display-slots.patch @@ -0,0 +1,65 @@ +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 + + +diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java ++++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java +@@ -0,0 +0,0 @@ import org.bukkit.scoreboard.DisplaySlot; + import org.bukkit.scoreboard.RenderType; + + public final class CraftScoreboardTranslations { +- static final int MAX_DISPLAY_SLOT = 3; ++ static final int MAX_DISPLAY_SLOT = Scoreboard.getDisplaySlotNames().length; // Paper ++ @Deprecated // Paper + static ImmutableBiMap<DisplaySlot, String> SLOTS = ImmutableBiMap.of( + DisplaySlot.BELOW_NAME, "belowName", + DisplaySlot.PLAYER_LIST, "list", +@@ -0,0 +0,0 @@ public final class CraftScoreboardTranslations { + 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/test/java/io/papermc/paper/scoreboard/DisplaySlotTest.java b/src/test/java/io/papermc/paper/scoreboard/DisplaySlotTest.java +new file mode 100644 +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 +--- /dev/null ++++ b/src/test/java/io/papermc/paper/scoreboard/DisplaySlotTest.java +@@ -0,0 +0,0 @@ ++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))); ++ } ++ } ++}