2
2
3
3
import me .clip .placeholderapi .PlaceholderAPI ;
4
4
import net .cherrycraft .cherrycore .CherryCore ;
5
+ import net .cherrycraft .cherrycore .chatsystem .utils .RankColors ;
5
6
import net .kyori .adventure .text .minimessage .MiniMessage ;
6
7
import net .kyori .adventure .text .serializer .legacy .LegacyComponentSerializer ;
8
+ import net .luckperms .api .LuckPerms ;
9
+ import net .luckperms .api .LuckPermsProvider ;
7
10
import org .bukkit .Bukkit ;
8
- import org .bukkit .entity .ArmorStand ;
9
11
import org .bukkit .entity .Player ;
10
12
import org .bukkit .event .EventHandler ;
11
13
import org .bukkit .event .Listener ;
12
14
import org .bukkit .event .player .PlayerJoinEvent ;
13
15
import org .bukkit .scoreboard .Team ;
14
16
15
- import java .util .HashMap ;
16
- import java .util .Map ;
17
- import java .util .UUID ;
17
+ import java .util .Comparator ;
18
+ import java .util .List ;
19
+ import java .util .stream . Collectors ;
18
20
19
21
public class Tablist implements Listener {
20
22
21
23
static MiniMessage miniMessage = MiniMessage .builder ().build ();
22
24
static LegacyComponentSerializer serializer = LegacyComponentSerializer .legacySection ();
23
-
24
- private final Map <UUID , ArmorStand > armorStands = new HashMap <>();
25
+ private final LuckPerms luckPerms = LuckPermsProvider .get ();
25
26
26
27
@ EventHandler
27
28
public void onPlayerJoin (PlayerJoinEvent event ) {
@@ -32,23 +33,48 @@ public void onPlayerJoin(PlayerJoinEvent event) {
32
33
player .setPlayerListHeader (header );
33
34
player .setPlayerListFooter (footer );
34
35
35
- // Get or create a team for the player
36
- org .bukkit .scoreboard .Scoreboard scoreboard = Bukkit .getScoreboardManager ().getMainScoreboard ();
37
- Team team = scoreboard .getTeam (player .getName ());
38
- if (team == null ) {
39
- team = scoreboard .registerNewTeam (player .getName ());
40
- }
36
+ // Schedule a repeating task that updates the tablist every second
37
+ Bukkit .getScheduler ().runTaskTimerAsynchronously (CherryCore .getInstance (), () -> {
38
+ // Get a list of all online players
39
+ List <Player > players = Bukkit .getOnlinePlayers ().stream ().collect (Collectors .toList ());
40
+
41
+ // Sort the players based on their ranks
42
+ players .sort (Comparator .comparingInt (player1 -> {
43
+ String primaryGroup = luckPerms .getUserManager ().getUser (player1 .getUniqueId ()).getPrimaryGroup ();
44
+ RankColors rankColor = RankColors .valueOf (primaryGroup .toUpperCase ());
45
+ return rankColor .getPriority ();
46
+ }));
41
47
42
- // Add the player to the team
43
- team .addEntry (player .getName ());
48
+ // Update the tablist
49
+ for (int i = 0 ; i < players .size (); i ++) {
50
+ Player p = players .get (i );
51
+ org .bukkit .scoreboard .Scoreboard scoreboard = Bukkit .getScoreboardManager ().getMainScoreboard ();
52
+ String primaryGroup = luckPerms .getUserManager ().getUser (p .getUniqueId ()).getPrimaryGroup ();
53
+ Team team = scoreboard .getTeam (primaryGroup );
54
+ if (team == null ) {
55
+ team = scoreboard .registerNewTeam (primaryGroup );
56
+ }
44
57
45
- // Schedule a repeating task that updates the team's prefix and suffix every 5 seconds
46
- Team finalTeam = team ;
47
- Bukkit .getScheduler ().runTaskTimerAsynchronously (CherryCore .getInstance (), () -> {
48
- String prefix = PlaceholderAPI .setPlaceholders (player , "%luckperms_prefix% " );
49
- String suffix = PlaceholderAPI .setPlaceholders (player , " %luckperms_suffix%" );
50
- finalTeam .setPrefix (prefix );
51
- finalTeam .setSuffix (suffix );
52
- }, 0L , 100L ); // 100 ticks = 5 seconds
58
+ // Remove the player from their current team, if any
59
+ for (Team existingTeam : scoreboard .getTeams ()) {
60
+ if (existingTeam .hasEntry (p .getName ())) {
61
+ existingTeam .removeEntry (p .getName ());
62
+ }
63
+ }
64
+
65
+ // Add the player to the team
66
+ team .addEntry (p .getName ());
67
+
68
+ // Update the team's prefix and suffix
69
+ String prefix = PlaceholderAPI .setPlaceholders (p , "%luckperms_prefix% " );
70
+ String suffix = PlaceholderAPI .setPlaceholders (p , " %luckperms_suffix%" );
71
+ team .setPrefix (prefix );
72
+ team .setSuffix (suffix );
73
+
74
+ // Update the team's display name
75
+ RankColors rankColor = RankColors .valueOf (primaryGroup .toUpperCase ());
76
+ team .setDisplayName (rankColor .getColor ());
77
+ }
78
+ }, 0L , 20L ); // 20 ticks = 1 second
53
79
}
54
- }
80
+ }
0 commit comments