Skip to content
This repository has been archived by the owner on Jan 20, 2024. It is now read-only.

Commit

Permalink
Tab: add support group weight for sorting
Browse files Browse the repository at this point in the history
  • Loading branch information
TheFaser committed Aug 26, 2023
1 parent f7bc365 commit 9981654
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 13 deletions.
21 changes: 21 additions & 0 deletions src/main/java/net/flectone/integrations/luckperms/FLuckPerms.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,25 @@

import net.flectone.Main;
import net.flectone.integrations.HookInterface;
import net.flectone.integrations.vault.FVault;
import net.flectone.managers.FPlayerManager;
import net.flectone.managers.HookManager;
import net.flectone.misc.entity.FPlayer;
import net.luckperms.api.LuckPerms;
import net.luckperms.api.event.EventBus;
import net.luckperms.api.event.node.NodeAddEvent;
import net.luckperms.api.event.node.NodeMutateEvent;
import net.luckperms.api.model.group.Group;
import net.luckperms.api.model.user.User;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.jetbrains.annotations.NotNull;

public class FLuckPerms implements HookInterface {

private static LuckPerms provider;

private void onUserPromote(@NotNull NodeMutateEvent event) {
if (event.getTarget() instanceof User) {
FPlayer fPlayer = FPlayerManager.getPlayer(((User) event.getTarget()).getUniqueId());
Expand All @@ -39,10 +45,25 @@ public void hook() {

if (serviceProvider == null) return;

provider = serviceProvider.getProvider();
HookManager.enabledLuckPerms = true;

EventBus eventBus = serviceProvider.getProvider().getEventBus();

eventBus.subscribe(Main.getInstance(), NodeAddEvent.class, this::onUserPromote);

Main.info("\uD83D\uDD12 LuckPerms detected and hooked");
}

public static LuckPerms getProvider() {
return provider;
}

public static int getPlayerGroupWeight(Player player) {
String vaultGroup = FVault.getProvider().getPrimaryGroup(player);
Group group = FLuckPerms.getProvider().getGroupManager().getGroup(vaultGroup);
if (group == null) return 0;

return group.getWeight().orElse(0);
}
}
4 changes: 2 additions & 2 deletions src/main/java/net/flectone/managers/FPlayerManager.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package net.flectone.managers;

import net.flectone.Main;
import net.flectone.misc.entity.FEntity;
import net.flectone.misc.entity.FPlayer;
import net.flectone.misc.entity.info.ModInfo;
import org.bukkit.BanEntry;
Expand Down Expand Up @@ -81,7 +80,7 @@ public static void loadBanList() {
}

public static void clearPlayers() {
onlineFPlayers.values().forEach(FEntity::removePlayerFromTeam);
onlineFPlayers.values().forEach(FPlayer::removeTeam);

onlineFPlayers.clear();
}
Expand Down Expand Up @@ -134,6 +133,7 @@ public static FPlayer getPlayer(@NotNull UUID uuid) {


public static void removePlayer(@NotNull UUID uuid) {
onlineFPlayers.get(uuid).removeTeam();
onlineFPlayers.remove(uuid);
}

Expand Down
1 change: 1 addition & 0 deletions src/main/java/net/flectone/managers/HookManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public class HookManager {
public static boolean enabledPlaceholderAPI = false;
public static boolean enabledPlasmoVoice = false;
public static boolean enabledVault = false;
public static boolean enabledLuckPerms = false;

public static void hookPlugins() {
if (isEnabled("DiscordSRV")) new FDiscordSRV().hook();
Expand Down
12 changes: 3 additions & 9 deletions src/main/java/net/flectone/misc/entity/FEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,23 +44,17 @@ public static void addToTeam(@NotNull Entity entity, @NotNull String color) {

public static void removeFromTeam(@NotNull Entity entity, @NotNull String color) {
if (entity instanceof Player player) {
Team team = FPlayerManager.getScoreBoard().getTeam(player.getName());
if (team == null) return;
FPlayer fPlayer = FPlayerManager.getPlayer(player);
if (fPlayer == null) return;

team.setColor(ChatColor.WHITE);
fPlayer.setTeamColor("WHITE");
return;
}

Team team = noCollisionTeamMap.get(color);
team.removeEntry(entity.getUniqueId().toString());
}

public static void removePlayerFromTeam(@NotNull FPlayer fPlayer) {
Team team = FPlayerManager.getScoreBoard().getTeam(fPlayer.getRealName());
if (team == null) return;
team.removeEntry(fPlayer.getRealName());
}

public static void removeBugEntities(@NotNull Player player) {
player.getWorld().getNearbyEntities(player.getLocation(), 20, 20, 20, Entity::isGlowing).forEach(entity -> {
if (entity instanceof MagmaCube
Expand Down
18 changes: 16 additions & 2 deletions src/main/java/net/flectone/misc/entity/FPlayer.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package net.flectone.misc.entity;

import net.flectone.Main;
import net.flectone.integrations.luckperms.FLuckPerms;
import net.flectone.integrations.supervanish.FSuperVanish;
import net.flectone.integrations.vault.FVault;
import net.flectone.managers.FPlayerManager;
Expand Down Expand Up @@ -319,8 +320,17 @@ public void setTeam(@NotNull Team team) {

@NotNull
public Team getPlayerTeam() {
Team bukkitTeam = FPlayerManager.getScoreBoard().getTeam(this.name);
Team team = bukkitTeam != null ? bukkitTeam : FPlayerManager.getScoreBoard().registerNewTeam(this.name);

int rank = 0;

if (HookManager.enabledVault && HookManager.enabledLuckPerms) {
rank = FLuckPerms.getPlayerGroupWeight(player);
}

String sortName = ObjectUtil.generateSortString(rank, player.getName());

Team bukkitTeam = FPlayerManager.getScoreBoard().getTeam(sortName);
Team team = bukkitTeam != null ? bukkitTeam : FPlayerManager.getScoreBoard().registerNewTeam(sortName);

if (!team.hasEntry(this.name)) team.addEntry(this.name);

Expand All @@ -336,6 +346,10 @@ public void setTeamColor(@NotNull String teamColor) {
this.team.setColor(ChatColor.valueOf(teamColor));
}

public void removeTeam() {
this.team.unregister();
}

@Nullable
public Player getLastWriter() {
return this.lastWriter;
Expand Down
7 changes: 7 additions & 0 deletions src/main/java/net/flectone/utils/ObjectUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -166,4 +166,11 @@ public static ArrayList<String> splitLine(@NotNull String line, @NotNull ArrayLi

return split;
}

@NotNull
public static String generateSortString(int rank, String playerName) {
String paddedRank = String.format("%010d", Integer.MAX_VALUE - rank);
String paddedName = String.format("%-16s", playerName);
return paddedRank + paddedName;
}
}

0 comments on commit 9981654

Please sign in to comment.