Make the list command work with the permission system

This commit is contained in:
Telesphoreo 2023-03-08 14:23:10 -06:00
parent 00b6473e4d
commit 41b0076f8f
5 changed files with 91 additions and 63 deletions

View File

@ -21,14 +21,9 @@ import dev.plex.storage.player.MongoPlayerData;
import dev.plex.storage.player.SQLPlayerData; import dev.plex.storage.player.SQLPlayerData;
import dev.plex.storage.punishment.SQLNotes; import dev.plex.storage.punishment.SQLNotes;
import dev.plex.storage.punishment.SQLPunishment; import dev.plex.storage.punishment.SQLPunishment;
import dev.plex.util.BuildInfo; import dev.plex.util.*;
import dev.plex.util.BungeeUtil;
import dev.plex.util.PlexLog;
import dev.plex.util.PlexUtils;
import dev.plex.util.UpdateChecker;
import dev.plex.util.redis.MessageUtil; import dev.plex.util.redis.MessageUtil;
import dev.plex.world.CustomWorld; import dev.plex.world.CustomWorld;
import java.io.File;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import net.milkbowl.vault.chat.Chat; import net.milkbowl.vault.chat.Chat;
@ -38,6 +33,8 @@ import org.bukkit.Bukkit;
import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
@Getter @Getter
@Setter @Setter
public class Plex extends JavaPlugin public class Plex extends JavaPlugin
@ -76,7 +73,6 @@ public class Plex extends JavaPlugin
private Permission permissions; private Permission permissions;
private Chat chat; private Chat chat;
public static Plex get() public static Plex get()
{ {
return plugin; return plugin;

View File

@ -4,9 +4,8 @@ import com.google.common.collect.Lists;
import dev.plex.command.PlexCommand; import dev.plex.command.PlexCommand;
import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandParameters;
import dev.plex.command.annotation.CommandPermissions; import dev.plex.command.annotation.CommandPermissions;
import dev.plex.command.annotation.System; import dev.plex.hook.VaultHook;
import dev.plex.rank.enums.Rank; import dev.plex.rank.enums.Rank;
import java.util.List;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -15,9 +14,10 @@ import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@CommandParameters(name = "list", description = "Show a list of all online players", aliases = "lsit") import java.util.List;
@CommandParameters(name = "list", description = "Show a list of all online players", aliases = "lsit,who,playerlist,online")
@CommandPermissions(level = Rank.OP, permission = "plex.list") @CommandPermissions(level = Rank.OP, permission = "plex.list")
@System(value = "ranks")
public class ListCMD extends PlexCommand public class ListCMD extends PlexCommand
{ {
@Override @Override
@ -44,7 +44,14 @@ public class ListCMD extends PlexCommand
for (int i = 0; i < players.size(); i++) for (int i = 0; i < players.size(); i++)
{ {
Player player = players.get(i); Player player = players.get(i);
list = list.append(getPlexPlayer(player).getRankFromString().getPrefix()).append(Component.space()).append(Component.text(player.getName()).color(NamedTextColor.WHITE)); if (plugin.getSystem().equals("ranks"))
{
list = list.append(getPlexPlayer(player).getRankFromString().getPrefix()).append(Component.space()).append(Component.text(player.getName()).color(NamedTextColor.WHITE));
}
else
{
list = list.append(VaultHook.getPrefix(getPlexPlayer(player))).append(Component.space()).append(Component.text(player.getName()).color(NamedTextColor.WHITE));
}
if (i != players.size() - 1) if (i != players.size() - 1)
{ {
list = list.append(Component.text(",")).append(Component.space()); list = list.append(Component.text(",")).append(Component.space());

View File

@ -1,8 +1,13 @@
package dev.plex.hook; package dev.plex.hook;
import dev.plex.Plex;
import dev.plex.player.PlexPlayer;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import net.milkbowl.vault.chat.Chat; import net.milkbowl.vault.chat.Chat;
import net.milkbowl.vault.permission.Permission; import net.milkbowl.vault.permission.Permission;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.RegisteredServiceProvider;
public class VaultHook public class VaultHook
@ -46,6 +51,22 @@ public class VaultHook
return PERMISSIONS; return PERMISSIONS;
} }
public static Component getPrefix(PlexPlayer plexPlayer)
{
if (VaultHook.getChat() == null || VaultHook.getPermission() == null)
{
return null;
}
if (Plex.get().getRankManager().getConfigPrefixes(plexPlayer) != null)
{
return Plex.get().getRankManager().getConfigPrefixes(plexPlayer);
}
Player bukkitPlayer = Bukkit.getPlayer(plexPlayer.getUuid());
String group = VaultHook.getPermission().getPrimaryGroup(bukkitPlayer);
String vaultPrefix = VaultHook.getChat().getGroupPrefix(bukkitPlayer.getWorld(), group);
return LegacyComponentSerializer.legacyAmpersand().deserialize(vaultPrefix);
}
public static Permission getPermission() public static Permission getPermission()
{ {
return PERMISSIONS; return PERMISSIONS;

View File

@ -8,8 +8,6 @@ import dev.plex.util.minimessage.SafeMiniMessage;
import dev.plex.util.redis.MessageUtil; import dev.plex.util.redis.MessageUtil;
import io.papermc.paper.chat.ChatRenderer; import io.papermc.paper.chat.ChatRenderer;
import io.papermc.paper.event.player.AsyncChatEvent; import io.papermc.paper.event.player.AsyncChatEvent;
import java.util.UUID;
import java.util.function.Supplier;
import net.kyori.adventure.audience.Audience; import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.TextReplacementConfig;
@ -19,6 +17,9 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.UUID;
import java.util.function.Supplier;
@Toggleable("chat.enabled") @Toggleable("chat.enabled")
public class ChatListener extends PlexListener public class ChatListener extends PlexListener
{ {
@ -37,7 +38,8 @@ public class ChatListener extends PlexListener
public void onChat(AsyncChatEvent event) public void onChat(AsyncChatEvent event)
{ {
PlexPlayer plexPlayer = plugin.getPlayerCache().getPlexPlayerMap().get(event.getPlayer().getUniqueId()); PlexPlayer plexPlayer = plugin.getPlayerCache().getPlexPlayerMap().get(event.getPlayer().getUniqueId());
if (plexPlayer.isStaffChat()) { if (plexPlayer.isStaffChat())
{
MessageUtil.sendStaffChat(event.getPlayer(), event.message(), PlexUtils.adminChat(event.getPlayer().getName(), SafeMiniMessage.mmSerialize(event.message())).toArray(UUID[]::new)); MessageUtil.sendStaffChat(event.getPlayer(), event.message(), PlexUtils.adminChat(event.getPlayer().getName(), SafeMiniMessage.mmSerialize(event.message())).toArray(UUID[]::new));
plugin.getServer().getConsoleSender().sendMessage(PlexUtils.messageComponent("adminChatFormat", event.getPlayer().getName(), SafeMiniMessage.mmSerialize(event.message())).replaceText(URL_REPLACEMENT_CONFIG)); plugin.getServer().getConsoleSender().sendMessage(PlexUtils.messageComponent("adminChatFormat", event.getPlayer().getName(), SafeMiniMessage.mmSerialize(event.message())).replaceText(URL_REPLACEMENT_CONFIG));
event.setCancelled(true); event.setCancelled(true);

View File

@ -1,28 +1,28 @@
package dev.plex.rank; package dev.plex.rank;
import dev.plex.Plex; import dev.plex.Plex;
import dev.plex.PlexBase;
import dev.plex.hook.VaultHook; import dev.plex.hook.VaultHook;
import dev.plex.player.PlexPlayer; import dev.plex.player.PlexPlayer;
import dev.plex.rank.enums.Rank; import dev.plex.rank.enums.Rank;
import dev.plex.rank.enums.Title; import dev.plex.rank.enums.Title;
import dev.plex.util.PlexUtils; import dev.plex.util.PlexUtils;
import dev.plex.util.minimessage.SafeMiniMessage; import dev.plex.util.minimessage.SafeMiniMessage;
import lombok.SneakyThrows;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.Bukkit;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.SneakyThrows;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;
public class RankManager public class RankManager
{ {
@ -96,92 +96,94 @@ public class RankManager
} }
} }
public Component getPrefix(PlexPlayer player) public Component getConfigPrefixes(PlexPlayer plexPlayer)
{ {
if (player.getPrefix() != null && !player.getPrefix().isEmpty()) if (Plex.get().config.contains("titles.owners") && Plex.get().config.getStringList("titles.owners").contains(plexPlayer.getName()))
{
return SafeMiniMessage.mmDeserializeWithoutEvents(player.getPrefix());
}
if (Plex.get().config.contains("titles.owners") && Plex.get().config.getStringList("titles.owners").contains(player.getName()))
{ {
return Title.OWNER.getPrefix(); return Title.OWNER.getPrefix();
} }
if (PlexUtils.DEVELOPERS.contains(player.getUuid().toString())) // don't remove or we will front door ur mother if (PlexUtils.DEVELOPERS.contains(plexPlayer.getUuid().toString())) // don't remove or we will front door ur mother
{ {
return Title.DEV.getPrefix(); return Title.DEV.getPrefix();
} }
if (Plex.get().config.contains("titles.masterbuilders") && Plex.get().config.getStringList("titles.masterbuilders").contains(player.getName())) if (Plex.get().config.contains("titles.masterbuilders") && Plex.get().config.getStringList("titles.masterbuilders").contains(plexPlayer.getName()))
{ {
return Title.MASTER_BUILDER.getPrefix(); return Title.MASTER_BUILDER.getPrefix();
} }
if (Plex.get().getSystem().equalsIgnoreCase("ranks") && isAdmin(player)) if (Plex.get().getSystem().equalsIgnoreCase("ranks") && isAdmin(plexPlayer))
{ {
return player.getRankFromString().getPrefix(); return plexPlayer.getRankFromString().getPrefix();
}
if (Bukkit.getServer().getPluginManager().isPluginEnabled("Vault") && Plex.get().getSystem().equalsIgnoreCase("permissions"))
{
if (VaultHook.getChat() == null || VaultHook.getPermission() == null)
{
return null;
}
Player bukkitPlayer = Bukkit.getPlayer(player.getUuid());
String group = VaultHook.getPermission().getPrimaryGroup(bukkitPlayer);
String vaultPrefix = VaultHook.getChat().getGroupPrefix(bukkitPlayer.getWorld(), group);
return LegacyComponentSerializer.legacyAmpersand().deserialize(vaultPrefix);
} }
return null; return null;
} }
public String getLoginMessage(PlexPlayer player) public Component getPrefix(PlexPlayer plexPlayer)
{
if (plexPlayer.getPrefix() != null && !plexPlayer.getPrefix().isEmpty())
{
return SafeMiniMessage.mmDeserializeWithoutEvents(plexPlayer.getPrefix());
}
if (getConfigPrefixes(plexPlayer) != null)
{
getConfigPrefixes(plexPlayer);
}
if (Bukkit.getServer().getPluginManager().isPluginEnabled("Vault") && Plex.get().getSystem().equalsIgnoreCase("permissions"))
{
return VaultHook.getPrefix(plexPlayer);
}
return null;
}
public String getLoginMessage(PlexPlayer plexPlayer)
{ {
String prepend; String prepend;
// We don't want to prepend the "<player> is" if the login message is custom // We don't want to prepend the "<player> is" if the login message is custom
if (!player.getLoginMessage().isEmpty()) if (!plexPlayer.getLoginMessage().isEmpty())
{ {
return player.getLoginMessage() return plexPlayer.getLoginMessage()
.replace("%player%", player.getName()) .replace("%player%", plexPlayer.getName())
.replace("%rank%", player.getRank()); .replace("%rank%", plexPlayer.getRank());
} }
else else
{ {
prepend = MiniMessage.miniMessage().serialize(Component.text(player.getName() + " is ").color(NamedTextColor.AQUA)); prepend = MiniMessage.miniMessage().serialize(Component.text(plexPlayer.getName() + " is ").color(NamedTextColor.AQUA));
} }
if (Plex.get().config.contains("titles.owners") && Plex.get().config.getStringList("titles.owners").contains(player.getName())) if (Plex.get().config.contains("titles.owners") && Plex.get().config.getStringList("titles.owners").contains(plexPlayer.getName()))
{ {
return prepend + Title.OWNER.getLoginMessage(); return prepend + Title.OWNER.getLoginMessage();
} }
if (PlexUtils.DEVELOPERS.contains(player.getUuid().toString())) // don't remove or we will front door ur mother if (PlexUtils.DEVELOPERS.contains(plexPlayer.getUuid().toString())) // don't remove or we will front door ur mother
{ {
return prepend + Title.DEV.getLoginMessage(); return prepend + Title.DEV.getLoginMessage();
} }
if (Plex.get().config.contains("titles.masterbuilders") && Plex.get().config.getStringList("titles.masterbuilders").contains(player.getName())) if (Plex.get().config.contains("titles.masterbuilders") && Plex.get().config.getStringList("titles.masterbuilders").contains(plexPlayer.getName()))
{ {
return prepend + Title.MASTER_BUILDER.getLoginMessage(); return prepend + Title.MASTER_BUILDER.getLoginMessage();
} }
if (Plex.get().getSystem().equalsIgnoreCase("ranks") && isAdmin(player)) if (Plex.get().getSystem().equalsIgnoreCase("ranks") && isAdmin(plexPlayer))
{ {
return prepend + player.getRankFromString().getLoginMessage(); return prepend + plexPlayer.getRankFromString().getLoginMessage();
} }
return ""; return "";
} }
public NamedTextColor getColor(PlexPlayer player) public NamedTextColor getColor(PlexPlayer plexPlayer)
{ {
if (Plex.get().config.contains("titles.owners") && Plex.get().config.getStringList("titles.owners").contains(player.getName())) if (Plex.get().config.contains("titles.owners") && Plex.get().config.getStringList("titles.owners").contains(plexPlayer.getName()))
{ {
return Title.OWNER.getColor(); return Title.OWNER.getColor();
} }
if (PlexUtils.DEVELOPERS.contains(player.getUuid().toString())) // don't remove or we will front door ur mother if (PlexUtils.DEVELOPERS.contains(plexPlayer.getUuid().toString())) // don't remove or we will front door ur mother
{ {
return Title.DEV.getColor(); return Title.DEV.getColor();
} }
if (Plex.get().config.contains("titles.masterbuilders") && Plex.get().config.getStringList("titles.masterbuilders").contains(player.getName())) if (Plex.get().config.contains("titles.masterbuilders") && Plex.get().config.getStringList("titles.masterbuilders").contains(plexPlayer.getName()))
{ {
return Title.MASTER_BUILDER.getColor(); return Title.MASTER_BUILDER.getColor();
} }
if (Plex.get().getSystem().equalsIgnoreCase("ranks") && isAdmin(player)) if (Plex.get().getSystem().equalsIgnoreCase("ranks") && isAdmin(plexPlayer))
{ {
return player.getRankFromString().getColor(); return plexPlayer.getRankFromString().getColor();
} }
return NamedTextColor.WHITE; return NamedTextColor.WHITE;
} }