From 6df397b77a525e9a7d5b3eac83d89091ddd084ff Mon Sep 17 00:00:00 2001 From: William Date: Sat, 11 Mar 2023 20:29:10 +0000 Subject: [PATCH] Periodic updates: Also update header/footer, fix extra delay --- .../velocitab/hook/LuckPermsHook.java | 15 ++++++---- .../velocitab/tab/PlayerTabList.java | 30 ++++++++++--------- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/main/java/net/william278/velocitab/hook/LuckPermsHook.java b/src/main/java/net/william278/velocitab/hook/LuckPermsHook.java index 14cb1dc..0428875 100644 --- a/src/main/java/net/william278/velocitab/hook/LuckPermsHook.java +++ b/src/main/java/net/william278/velocitab/hook/LuckPermsHook.java @@ -15,6 +15,7 @@ import org.jetbrains.annotations.Nullable; import java.util.OptionalInt; import java.util.UUID; +import java.util.concurrent.TimeUnit; public class LuckPermsHook extends Hook { @@ -47,11 +48,15 @@ public class LuckPermsHook extends Hook { public void onLuckPermsGroupUpdate(@NotNull UserDataRecalculateEvent event) { plugin.getServer().getPlayer(event.getUser().getUniqueId()) - .ifPresent(player -> plugin.getTabList().onUpdate(new TabPlayer( - player, - getRoleFromMetadata(event.getData().getMetaData()), - getHighestWeight() - ))); + .ifPresent(player -> plugin.getServer().getScheduler() + .buildTask(plugin, () -> plugin.getTabList() + .onUpdate(new TabPlayer( + player, + getRoleFromMetadata(event.getData().getMetaData()), + getHighestWeight() + ))) + .delay(500, TimeUnit.MILLISECONDS) + .schedule()); } private OptionalInt getWeight(@Nullable String groupName) { diff --git a/src/main/java/net/william278/velocitab/tab/PlayerTabList.java b/src/main/java/net/william278/velocitab/tab/PlayerTabList.java index 6edf236..92ce0ba 100644 --- a/src/main/java/net/william278/velocitab/tab/PlayerTabList.java +++ b/src/main/java/net/william278/velocitab/tab/PlayerTabList.java @@ -34,7 +34,7 @@ public class PlayerTabList { // If the update time is set to 0 do not schedule the updater if (plugin.getSettings().getUpdateRate() > 0) { - updateTimer(plugin.getSettings().getUpdateRate()); + this.updatePeriodically(plugin.getSettings().getUpdateRate()); } } @@ -142,16 +142,13 @@ public class PlayerTabList { } public void onUpdate(@NotNull TabPlayer tabPlayer) { - plugin.getServer().getScheduler() - .buildTask(plugin, () -> players.forEach(player -> tabPlayer.getDisplayName(plugin).thenAccept(displayName -> { - player.getPlayer().getTabList().getEntries().stream() - .filter(e -> e.getProfile().getId().equals(tabPlayer.getPlayer().getUniqueId())).findFirst() - .ifPresent(entry -> entry.setDisplayName(displayName)); - plugin.getScoreboardManager().updateRoles(player.getPlayer(), - tabPlayer.getTeamName(), tabPlayer.getPlayer().getUsername()); - }))) - .delay(500, TimeUnit.MILLISECONDS) - .schedule(); + players.forEach(player -> tabPlayer.getDisplayName(plugin).thenAccept(displayName -> { + player.getPlayer().getTabList().getEntries().stream() + .filter(e -> e.getProfile().getId().equals(tabPlayer.getPlayer().getUniqueId())).findFirst() + .ifPresent(entry -> entry.setDisplayName(displayName)); + plugin.getScoreboardManager().updateRoles(player.getPlayer(), + tabPlayer.getTeamName(), tabPlayer.getPlayer().getUsername()); + })); } public CompletableFuture getHeader(@NotNull TabPlayer player) { @@ -168,12 +165,17 @@ public class PlayerTabList { } - private void updateTimer(int updateRate) { + // Update the tab list periodically + private void updatePeriodically(int updateRate) { plugin.getServer().getScheduler() .buildTask(plugin, () -> { - if (!players.isEmpty()) { - players.forEach(this::onUpdate); + if (players.isEmpty()) { + return; } + players.forEach(player -> { + this.onUpdate(player); + player.sendHeaderAndFooter(this); + }); }) .repeat(updateRate, TimeUnit.MILLISECONDS) .schedule();