89d51d5f29
Because this exploit has been widely known for years and has not been fixed by Mojang, we decided that it was worth allowing people to toggle it on/off due to how easy it is to make it configurable. It should be noted that this decision does not promise all future exploits will be configurable.
104 Zeilen
5.5 KiB
Diff
104 Zeilen
5.5 KiB
Diff
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(Lnet/minecraft/world/scores/DisplaySlot;)Lorg/bukkit/scoreboard/DisplaySlot;
|
|
public org.bukkit.craftbukkit.scoreboard.CraftScoreboardTranslations fromBukkitSlot(Lorg/bukkit/scoreboard/DisplaySlot;)Lnet/minecraft/world/scores/DisplaySlot;
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java
|
|
index 73c5ffff70605b32188a9bb5fb6c0ee04cb66efe..711d227f5ee6d63356a94a0567968da48e9f284c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java
|
|
@@ -7,35 +7,22 @@ import org.bukkit.scoreboard.RenderType;
|
|
|
|
public final class CraftScoreboardTranslations {
|
|
static final int MAX_DISPLAY_SLOT = 19;
|
|
+ @Deprecated // Paper
|
|
static final ImmutableBiMap<DisplaySlot, String> SLOTS = ImmutableBiMap.<DisplaySlot, String>builder()
|
|
.put(DisplaySlot.BELOW_NAME, "below_name")
|
|
.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(net.minecraft.world.scores.DisplaySlot minecraft) {
|
|
+ if (true) return DisplaySlot.NAMES.value(minecraft.getSerializedName()); // Paper
|
|
return CraftScoreboardTranslations.SLOTS.inverse().get(minecraft.getSerializedName());
|
|
}
|
|
|
|
public static net.minecraft.world.scores.DisplaySlot fromBukkitSlot(DisplaySlot slot) {
|
|
+ if (true) return net.minecraft.world.scores.DisplaySlot.CODEC.byName(slot.getId()); // Paper
|
|
return net.minecraft.world.scores.DisplaySlot.CODEC.byName(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 31714ce05b1023b82e96b36ba52254b4e3e948f2..a06352499b9f2c6fb84e585459077b4aa1886d6f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java
|
|
@@ -217,6 +217,15 @@ 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")) {
|
|
switch (name) {
|
|
case "NETHER":
|
|
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..69c9678f8218c240be1044eeabe1c6bef7747b1e
|
|
--- /dev/null
|
|
+++ b/src/test/java/io/papermc/paper/scoreboard/DisplaySlotTest.java
|
|
@@ -0,0 +1,24 @@
|
|
+package io.papermc.paper.scoreboard;
|
|
+
|
|
+import org.bukkit.craftbukkit.scoreboard.CraftScoreboardTranslations;
|
|
+import org.bukkit.scoreboard.DisplaySlot;
|
|
+import org.junit.jupiter.api.Test;
|
|
+
|
|
+import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
+
|
|
+public class DisplaySlotTest {
|
|
+
|
|
+ @Test
|
|
+ public void testBukkitToMinecraftDisplaySlots() {
|
|
+ for (DisplaySlot bukkitSlot : DisplaySlot.values()) {
|
|
+ assertNotNull(CraftScoreboardTranslations.fromBukkitSlot(bukkitSlot));
|
|
+ }
|
|
+ }
|
|
+
|
|
+ @Test
|
|
+ public void testMinecraftToBukkitDisplaySlots() {
|
|
+ for (net.minecraft.world.scores.DisplaySlot nmsSlot : net.minecraft.world.scores.DisplaySlot.values()) {
|
|
+ assertNotNull(CraftScoreboardTranslations.toBukkitSlot(nmsSlot));
|
|
+ }
|
|
+ }
|
|
+}
|