aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0581-Add-missing-team-sidebar-display-slots.patch
diff options
context:
space:
mode:
authorBjarne Koll <[email protected]>2024-09-19 16:36:07 +0200
committerGitHub <[email protected]>2024-09-19 16:36:07 +0200
commitc5a10665b8b80af650500b9263036f778f06d500 (patch)
treefedc133f0dbc101067951e1fccd9d577c312fdb8 /patches/server/0581-Add-missing-team-sidebar-display-slots.patch
parent5c829557332f21b34bc81e6ad1a73e511faef8f6 (diff)
downloadPaper-c5a10665b8b80af650500b9263036f778f06d500.tar.gz
Paper-c5a10665b8b80af650500b9263036f778f06d500.zip
Remove wall-time / unused skip tick protection (#11412)
Spigot still maintains some partial implementation of "tick skipping", a practice in which the MinecraftServer.currentTick field is updated not by an increment of one per actual tick, but instead set to System.currentTimeMillis() / 50. This behaviour means that the tracked tick may "skip" a tick value in case a previous tick took more than the expected 50ms. To compensate for this in important paths, spigot/craftbukkit implements "wall-time". Instead of incrementing/decrementing ticks on block entities/entities by one for each call to their tick() method, they instead increment/decrement important values, like an ItemEntity's age or pickupDelay, by the difference of `currentTick - lastTick`, where `lastTick` is the value of `currentTick` during the last tick() call. These "fixes" however do not play nicely with minecraft's simulation distance as entities/block entities implementing the above behaviour would "catch up" their values when moving from a non-ticking chunk to a ticking one as their `lastTick` value remains stuck on the last tick in a ticking chunk and hence lead to a large "catch up" once ticked again. Paper completely removes the "tick skipping" behaviour (See patch "Further-improve-server-tick-loop"), making the above precautions completely unnecessary, which also rids paper of the previous described incompatibility with non-ticking chunks.
Diffstat (limited to 'patches/server/0581-Add-missing-team-sidebar-display-slots.patch')
-rw-r--r--patches/server/0581-Add-missing-team-sidebar-display-slots.patch112
1 files changed, 112 insertions, 0 deletions
diff --git a/patches/server/0581-Add-missing-team-sidebar-display-slots.patch b/patches/server/0581-Add-missing-team-sidebar-display-slots.patch
new file mode 100644
index 0000000000..3b0dfacf08
--- /dev/null
+++ b/patches/server/0581-Add-missing-team-sidebar-display-slots.patch
@@ -0,0 +1,112 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+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/legacy/FieldRename.java b/src/main/java/org/bukkit/craftbukkit/legacy/FieldRename.java
+index ef80e6b4dff557daaab1b9fde4d8d40171017e6c..271aad69af4db015970aad842a7bb34dcb6bfd0e 100644
+--- a/src/main/java/org/bukkit/craftbukkit/legacy/FieldRename.java
++++ b/src/main/java/org/bukkit/craftbukkit/legacy/FieldRename.java
+@@ -35,6 +35,7 @@ public class FieldRename {
+ }
+
+ return switch (owner) {
++ case "org/bukkit/scoreboard/DisplaySlot" -> FieldRename.convertDisplaySlot(from); // Paper - DisplaySlot
+ case "org/bukkit/block/banner/PatternType" -> FieldRename.convertPatternTypeName(apiVersion, from);
+ case "org/bukkit/enchantments/Enchantment" -> FieldRename.convertEnchantmentName(apiVersion, from);
+ case "org/bukkit/block/Biome" -> FieldRename.convertBiomeName(apiVersion, from);
+@@ -60,6 +61,16 @@ public class FieldRename {
+ //}
+ // Paper end
+
++ // Paper start - DisplaySlot
++ @DoNotReroute
++ public static String convertDisplaySlot(final String from) {
++ if (from.startsWith("SIDEBAR_") && !from.startsWith("SIDEBAR_TEAM_")) {
++ return from.replace("SIDEBAR_", "SIDEBAR_TEAM_");
++ }
++ return from;
++ }
++ // Paper end - DisplaySlot
++
+ // PatternType
+ private static final FieldRenameData PATTERN_TYPE_DATA = FieldRenameData.Builder.newBuilder()
+ .forVersionsBefore(ApiVersion.FIELD_NAME_PARITY)
+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/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));
++ }
++ }
++}