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()
player, .buildTask(plugin, () -> plugin.getTabList()
getRoleFromMetadata(event.getData().getMetaData()), .onUpdate(new TabPlayer(
getHighestWeight() player,
))); getRoleFromMetadata(event.getData().getMetaData()),
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();