Periodic updates: Also update header/footer, fix extra delay

This commit is contained in:
William 2023-03-11 20:29:10 +00:00
parent b431ee2165
commit 6df397b77a
No known key found for this signature in database
2 changed files with 26 additions and 19 deletions

View File

@ -15,6 +15,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.OptionalInt; import java.util.OptionalInt;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.TimeUnit;
public class LuckPermsHook extends Hook { public class LuckPermsHook extends Hook {
@ -47,11 +48,15 @@ public class LuckPermsHook extends Hook {
public void onLuckPermsGroupUpdate(@NotNull UserDataRecalculateEvent event) { public void onLuckPermsGroupUpdate(@NotNull UserDataRecalculateEvent event) {
plugin.getServer().getPlayer(event.getUser().getUniqueId()) plugin.getServer().getPlayer(event.getUser().getUniqueId())
.ifPresent(player -> plugin.getTabList().onUpdate(new TabPlayer( .ifPresent(player -> plugin.getServer().getScheduler()
.buildTask(plugin, () -> plugin.getTabList()
.onUpdate(new TabPlayer(
player, player,
getRoleFromMetadata(event.getData().getMetaData()), getRoleFromMetadata(event.getData().getMetaData()),
getHighestWeight() getHighestWeight()
))); )))
.delay(500, TimeUnit.MILLISECONDS)
.schedule());
} }
private OptionalInt getWeight(@Nullable String groupName) { private OptionalInt getWeight(@Nullable String groupName) {

View File

@ -34,7 +34,7 @@ public class PlayerTabList {
// If the update time is set to 0 do not schedule the updater // If the update time is set to 0 do not schedule the updater
if (plugin.getSettings().getUpdateRate() > 0) { 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) { public void onUpdate(@NotNull TabPlayer tabPlayer) {
plugin.getServer().getScheduler() players.forEach(player -> tabPlayer.getDisplayName(plugin).thenAccept(displayName -> {
.buildTask(plugin, () -> players.forEach(player -> tabPlayer.getDisplayName(plugin).thenAccept(displayName -> {
player.getPlayer().getTabList().getEntries().stream() player.getPlayer().getTabList().getEntries().stream()
.filter(e -> e.getProfile().getId().equals(tabPlayer.getPlayer().getUniqueId())).findFirst() .filter(e -> e.getProfile().getId().equals(tabPlayer.getPlayer().getUniqueId())).findFirst()
.ifPresent(entry -> entry.setDisplayName(displayName)); .ifPresent(entry -> entry.setDisplayName(displayName));
plugin.getScoreboardManager().updateRoles(player.getPlayer(), plugin.getScoreboardManager().updateRoles(player.getPlayer(),
tabPlayer.getTeamName(), tabPlayer.getPlayer().getUsername()); tabPlayer.getTeamName(), tabPlayer.getPlayer().getUsername());
}))) }));
.delay(500, TimeUnit.MILLISECONDS)
.schedule();
} }
public CompletableFuture<Component> getHeader(@NotNull TabPlayer player) { public CompletableFuture<Component> 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() plugin.getServer().getScheduler()
.buildTask(plugin, () -> { .buildTask(plugin, () -> {
if (!players.isEmpty()) { if (players.isEmpty()) {
players.forEach(this::onUpdate); return;
} }
players.forEach(player -> {
this.onUpdate(player);
player.sendHeaderAndFooter(this);
});
}) })
.repeat(updateRate, TimeUnit.MILLISECONDS) .repeat(updateRate, TimeUnit.MILLISECONDS)
.schedule(); .schedule();