Initial commit for syncing roles
This commit is contained in:
parent
3f588b90b3
commit
1aa1563ec1
|
|
@ -56,7 +56,7 @@ tasks {
|
||||||
//exclude(dependency("net.kyori:.*:.*"))
|
//exclude(dependency("net.kyori:.*:.*"))
|
||||||
}
|
}
|
||||||
listOf(
|
listOf(
|
||||||
"net.kyori",
|
// "net.kyori",
|
||||||
"net.dv8tion.jda"
|
"net.dv8tion.jda"
|
||||||
).forEach { relocate(it, "${rootProject.group}.lib.$it") }
|
).forEach { relocate(it, "${rootProject.group}.lib.$it") }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,15 @@
|
||||||
package com.alttd.proxydiscordlink;
|
package com.alttd.proxydiscordlink;
|
||||||
|
|
||||||
import com.alttd.proxydiscordlink.bot.Bot;
|
import com.alttd.proxydiscordlink.bot.Bot;
|
||||||
import com.alttd.proxydiscordlink.commands.MinecraftCommand;
|
import com.alttd.proxydiscordlink.minecraft.commands.MinecraftCommand;
|
||||||
import com.alttd.proxydiscordlink.config.BotConfig;
|
import com.alttd.proxydiscordlink.config.BotConfig;
|
||||||
import com.alttd.proxydiscordlink.config.Config;
|
import com.alttd.proxydiscordlink.config.Config;
|
||||||
import com.alttd.proxydiscordlink.database.Database;
|
import com.alttd.proxydiscordlink.database.Database;
|
||||||
import com.alttd.proxydiscordlink.database.DatabaseConnection;
|
import com.alttd.proxydiscordlink.database.DatabaseConnection;
|
||||||
import com.alttd.proxydiscordlink.listeners.PlayerJoin;
|
import com.alttd.proxydiscordlink.minecraft.listeners.PlayerJoin;
|
||||||
import com.alttd.proxydiscordlink.listeners.PlayerLeave;
|
import com.alttd.proxydiscordlink.minecraft.listeners.PlayerLeave;
|
||||||
import com.alttd.proxydiscordlink.util.ALogger;
|
import com.alttd.proxydiscordlink.util.ALogger;
|
||||||
import com.alttd.proxydiscordlink.util.Cache;
|
import com.alttd.proxydiscordlink.util.Cache;
|
||||||
import com.alttd.proxydiscordlink.util.JarLoader;
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.velocitypowered.api.event.Subscribe;
|
import com.velocitypowered.api.event.Subscribe;
|
||||||
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
|
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
|
||||||
|
|
@ -81,15 +80,6 @@ public class DiscordLink {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadBot() {
|
public void loadBot() {
|
||||||
// String JDAVersion = "4.2.0";
|
|
||||||
// String JDABuild = "168";
|
|
||||||
// String JDAUrl = "https://github.com/DV8FromTheWorld/JDA/releases/download/v" + JDAVersion + "/JDA-" + JDAVersion + "_" + JDABuild + "-withDependencies.jar";
|
|
||||||
// String JDAFile = "jda-" + JDAVersion + "_" + JDABuild + ".jar";
|
|
||||||
// if (new JarLoader().loadJar(JDAUrl, new File(new File(getDataDirectory(), "libs"), JDAFile))) {
|
|
||||||
// ALogger.info("JDA successfully loaded");
|
|
||||||
// } else {
|
|
||||||
// ALogger.error("JDA could not be loaded!");
|
|
||||||
// }
|
|
||||||
bot = new Bot();
|
bot = new Bot();
|
||||||
bot.connect();
|
bot.connect();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,15 @@
|
||||||
package com.alttd.proxydiscordlink.bot;
|
package com.alttd.proxydiscordlink.bot;
|
||||||
|
|
||||||
|
import com.alttd.proxydiscordlink.bot.listeners.DiscordMessageListener;
|
||||||
|
import com.alttd.proxydiscordlink.bot.listeners.DiscordRoleListener;
|
||||||
import com.alttd.proxydiscordlink.config.BotConfig;
|
import com.alttd.proxydiscordlink.config.BotConfig;
|
||||||
import com.alttd.proxydiscordlink.util.ALogger;
|
import com.alttd.proxydiscordlink.util.ALogger;
|
||||||
import net.dv8tion.jda.api.EmbedBuilder;
|
import net.dv8tion.jda.api.EmbedBuilder;
|
||||||
import net.dv8tion.jda.api.JDA;
|
import net.dv8tion.jda.api.JDA;
|
||||||
import net.dv8tion.jda.api.JDABuilder;
|
import net.dv8tion.jda.api.JDABuilder;
|
||||||
import net.dv8tion.jda.api.entities.TextChannel;
|
import net.dv8tion.jda.api.entities.TextChannel;
|
||||||
|
import net.dv8tion.jda.api.requests.GatewayIntent;
|
||||||
|
import net.dv8tion.jda.api.utils.MemberCachePolicy;
|
||||||
|
|
||||||
import javax.security.auth.login.LoginException;
|
import javax.security.auth.login.LoginException;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
@ -16,9 +20,14 @@ public class Bot {
|
||||||
public void connect() {
|
public void connect() {
|
||||||
disconnect();
|
disconnect();
|
||||||
try {
|
try {
|
||||||
jda = JDABuilder.createDefault(BotConfig.BOT_TOKEN).build();
|
jda = JDABuilder
|
||||||
|
.createDefault(BotConfig.BOT_TOKEN)
|
||||||
|
.setMemberCachePolicy(MemberCachePolicy.ALL)
|
||||||
|
.enableIntents(GatewayIntent.GUILD_MEMBERS)
|
||||||
|
.build();
|
||||||
jda.setAutoReconnect(true);
|
jda.setAutoReconnect(true);
|
||||||
jda.addEventListener(new JDAListener());
|
jda.addEventListener(new DiscordMessageListener(),
|
||||||
|
new DiscordRoleListener());
|
||||||
DiscordCommand.loadCommands();
|
DiscordCommand.loadCommands();
|
||||||
} catch (LoginException e) {
|
} catch (LoginException e) {
|
||||||
jda = null;
|
jda = null;
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ public abstract class DiscordCommand {
|
||||||
|
|
||||||
public abstract void handleCommand(Message message, String sender, String command, String[] args);
|
public abstract void handleCommand(Message message, String sender, String command, String[] args);
|
||||||
|
|
||||||
protected static void loadCommands() {
|
public static void loadCommands() {
|
||||||
commands = new ArrayList<>();
|
commands = new ArrayList<>();
|
||||||
|
|
||||||
loadCommand(new DiscordStaffList(),
|
loadCommand(new DiscordStaffList(),
|
||||||
|
|
@ -31,7 +31,7 @@ public abstract class DiscordCommand {
|
||||||
Collections.addAll(commands, discordCommands);
|
Collections.addAll(commands, discordCommands);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static List<DiscordCommand> getCommands() {
|
public static List<DiscordCommand> getCommands() {
|
||||||
return commands;
|
return commands;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,20 @@
|
||||||
package com.alttd.proxydiscordlink.bot;
|
package com.alttd.proxydiscordlink.bot.listeners;
|
||||||
|
|
||||||
import com.alttd.proxydiscordlink.DiscordLink;
|
import com.alttd.proxydiscordlink.DiscordLink;
|
||||||
|
import com.alttd.proxydiscordlink.bot.Bot;
|
||||||
|
import com.alttd.proxydiscordlink.bot.DiscordCommand;
|
||||||
import com.alttd.proxydiscordlink.config.BotConfig;
|
import com.alttd.proxydiscordlink.config.BotConfig;
|
||||||
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class JDAListener extends ListenerAdapter {
|
public class DiscordMessageListener extends ListenerAdapter {
|
||||||
|
|
||||||
private DiscordLink plugin;
|
private DiscordLink plugin;
|
||||||
private final Bot bot;
|
private final Bot bot;
|
||||||
|
|
||||||
public JDAListener() {
|
public DiscordMessageListener() {
|
||||||
plugin = DiscordLink.getPlugin();
|
plugin = DiscordLink.getPlugin();
|
||||||
bot = plugin.getBot();
|
bot = plugin.getBot();
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,79 @@
|
||||||
|
package com.alttd.proxydiscordlink.bot.listeners;
|
||||||
|
|
||||||
|
import com.alttd.proxydiscordlink.DiscordLink;
|
||||||
|
import com.alttd.proxydiscordlink.bot.Bot;
|
||||||
|
import com.alttd.proxydiscordlink.bot.objects.DiscordRole;
|
||||||
|
import com.alttd.proxydiscordlink.objects.DiscordLinkPlayer;
|
||||||
|
import net.dv8tion.jda.api.events.guild.member.GuildMemberRoleAddEvent;
|
||||||
|
import net.dv8tion.jda.api.events.guild.member.GuildMemberRoleRemoveEvent;
|
||||||
|
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class DiscordRoleListener extends ListenerAdapter {
|
||||||
|
private DiscordLink plugin;
|
||||||
|
private final Bot bot;
|
||||||
|
private final MiniMessage miniMessage;
|
||||||
|
|
||||||
|
public DiscordRoleListener() {
|
||||||
|
plugin = DiscordLink.getPlugin();
|
||||||
|
bot = plugin.getBot();
|
||||||
|
miniMessage = MiniMessage.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the user needs to be updated based on the roles that got added
|
||||||
|
* TODO If the user isn't linked maybe ask them to link?
|
||||||
|
* Announces that the user got a role assigned if the role has an announcement for it.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onGuildMemberRoleAdd(@NotNull GuildMemberRoleAddEvent event) {
|
||||||
|
List<DiscordRole> added_roles = DiscordRole.getDiscordRoles().stream()
|
||||||
|
.filter(discordRole -> event.getRoles().stream()
|
||||||
|
.anyMatch(role -> role.getIdLong() == discordRole.getId()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
if (added_roles.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
DiscordLinkPlayer player = DiscordLinkPlayer.getDiscordLinkPlayer(event.getUser().getIdLong());
|
||||||
|
|
||||||
|
if (player == null) {
|
||||||
|
//TODO mayb ask the player to link to get their in game rank?
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.update(added_roles, true);
|
||||||
|
added_roles.forEach(discordRole -> {
|
||||||
|
if (!discordRole.getAnnouncement().isEmpty()) {
|
||||||
|
Component component = miniMessage.parse(
|
||||||
|
discordRole.getAnnouncement(),
|
||||||
|
Template.of("player", player.getUsername()));
|
||||||
|
|
||||||
|
DiscordLink.getPlugin().getProxy().getAllPlayers()
|
||||||
|
.forEach(onlinePlayer -> onlinePlayer.sendMessage(component));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the user needs to be updated based on the roles that got removed
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onGuildMemberRoleRemove(@NotNull GuildMemberRoleRemoveEvent event) {
|
||||||
|
List<DiscordRole> removed_roles = DiscordRole.getDiscordRoles().stream()
|
||||||
|
.filter(discordRole -> event.getRoles().stream()
|
||||||
|
.anyMatch(role -> role.getIdLong() == discordRole.getId()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
if (removed_roles.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
DiscordLink.getPlugin().getDatabase().getPlayer(event.getUser().getIdLong())
|
||||||
|
.update(removed_roles, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,64 @@
|
||||||
|
package com.alttd.proxydiscordlink.bot.objects;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class DiscordRole {
|
||||||
|
|
||||||
|
private final long id;
|
||||||
|
private final String luckpermsName;
|
||||||
|
private final String displayName;
|
||||||
|
private final boolean updateToMinecraft;
|
||||||
|
private final String announcement;
|
||||||
|
|
||||||
|
public DiscordRole(long id, String luckpermsName, String displayName, boolean updateToMinecraft, String announcement) {
|
||||||
|
this.id = id;
|
||||||
|
this.luckpermsName = luckpermsName;
|
||||||
|
this.displayName = displayName;
|
||||||
|
this.updateToMinecraft = updateToMinecraft;
|
||||||
|
this.announcement = announcement;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDisplayName() {
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLuckpermsName() {
|
||||||
|
return luckpermsName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isUpdateToMinecraft() {
|
||||||
|
return updateToMinecraft;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAnnouncement() {
|
||||||
|
return announcement;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Static stuff
|
||||||
|
|
||||||
|
private static final List<DiscordRole> discordRoles = new ArrayList<>();
|
||||||
|
|
||||||
|
public static List<DiscordRole> getDiscordRoles() {
|
||||||
|
return Collections.unmodifiableList(discordRoles);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addDiscordRole(DiscordRole discordRole) {
|
||||||
|
if (!discordRoles.contains(discordRole))
|
||||||
|
discordRoles.add(discordRole);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removeDiscordRole(DiscordRole discordRole) {
|
||||||
|
discordRoles.remove(discordRole);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void cleanDiscordRoles() {
|
||||||
|
discordRoles.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
package com.alttd.proxydiscordlink.config;
|
package com.alttd.proxydiscordlink.config;
|
||||||
|
|
||||||
|
import com.alttd.proxydiscordlink.bot.objects.DiscordRole;
|
||||||
|
import com.alttd.proxydiscordlink.util.ALogger;
|
||||||
import com.google.common.base.Throwables;
|
import com.google.common.base.Throwables;
|
||||||
import com.google.common.reflect.TypeToken;
|
import com.google.common.reflect.TypeToken;
|
||||||
import ninja.leaping.configurate.ConfigurationNode;
|
import ninja.leaping.configurate.ConfigurationNode;
|
||||||
|
|
@ -164,8 +166,8 @@ public class BotConfig {
|
||||||
|
|
||||||
public static String BOT_TOKEN = "unconfigured";
|
public static String BOT_TOKEN = "unconfigured";
|
||||||
public static String COMMAND_CHANNEL = "unconfigured";
|
public static String COMMAND_CHANNEL = "unconfigured";
|
||||||
private static void settings()
|
|
||||||
{
|
private static void settings() {
|
||||||
BOT_TOKEN = getString("settings.token", BOT_TOKEN);
|
BOT_TOKEN = getString("settings.token", BOT_TOKEN);
|
||||||
COMMAND_CHANNEL = getString("settings.command_channel", COMMAND_CHANNEL);
|
COMMAND_CHANNEL = getString("settings.command_channel", COMMAND_CHANNEL);
|
||||||
}
|
}
|
||||||
|
|
@ -173,9 +175,37 @@ public class BotConfig {
|
||||||
public static String SL_MINIMUMRANK = "trainee";
|
public static String SL_MINIMUMRANK = "trainee";
|
||||||
public static String SL_HOVERMESSAGE = "Click here to message %player% on %servername%.";
|
public static String SL_HOVERMESSAGE = "Click here to message %player% on %servername%.";
|
||||||
public static String SL_CLICKCOMMAND = "/msg %player%";
|
public static String SL_CLICKCOMMAND = "/msg %player%";
|
||||||
|
|
||||||
private static void stafflist() {
|
private static void stafflist() {
|
||||||
SL_MINIMUMRANK = getString("commands.staff-list.minimum-rank", SL_MINIMUMRANK);
|
SL_MINIMUMRANK = getString("commands.staff-list.minimum-rank", SL_MINIMUMRANK);
|
||||||
SL_HOVERMESSAGE = getString("commands.staff-list.hover-message", SL_HOVERMESSAGE);
|
SL_HOVERMESSAGE = getString("commands.staff-list.hover-message", SL_HOVERMESSAGE);
|
||||||
SL_CLICKCOMMAND = getString("commands.staff-list.click-command", SL_CLICKCOMMAND);
|
SL_CLICKCOMMAND = getString("commands.staff-list.click-command", SL_CLICKCOMMAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void roles() {
|
||||||
|
DiscordRole.cleanDiscordRoles();
|
||||||
|
ConfigurationNode node = getNode("sync-roles");
|
||||||
|
if (node.getChildrenMap().isEmpty())
|
||||||
|
ALogger.warn("No roles found in BotConfig, add them to use sync-roles feature:\n" +
|
||||||
|
"sync-roles:\n\t" +
|
||||||
|
"example_rank:\n\t\t" +
|
||||||
|
"role-id: 0\n\t\t" +
|
||||||
|
"luckperms-name: example\n\t\t" +
|
||||||
|
"display-name: Example Rank\n\t\t" +
|
||||||
|
"update-to-minecraft: true\n\t\t" +
|
||||||
|
"announcement: <player> got example rank!");
|
||||||
|
node.getChildrenMap().forEach((key, value) -> {
|
||||||
|
long id = value.getNode("role-id").getLong(-1);
|
||||||
|
String luckpermsName = value.getNode("luckperms-name").getString("example");
|
||||||
|
String display_name = value.getNode("display-name").getString("Example");
|
||||||
|
boolean updateToMinecraft = value.getNode("update-to-minecraft").getBoolean(false);
|
||||||
|
String announcement = value.getNode("announcement").getString("<player> got example rank!");
|
||||||
|
|
||||||
|
if (id == -1)
|
||||||
|
ALogger.error("Invalid id in BotConfig for roles.");
|
||||||
|
else
|
||||||
|
DiscordRole.addDiscordRole(new DiscordRole(id, luckpermsName, display_name, updateToMinecraft, announcement));
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
package com.alttd.proxydiscordlink.database;
|
package com.alttd.proxydiscordlink.database;
|
||||||
|
|
||||||
|
import com.alttd.proxydiscordlink.DiscordLink;
|
||||||
|
import com.alttd.proxydiscordlink.objects.DiscordLinkPlayer;
|
||||||
import com.alttd.proxydiscordlink.util.ALogger;
|
import com.alttd.proxydiscordlink.util.ALogger;
|
||||||
|
import com.alttd.proxydiscordlink.util.Cache;
|
||||||
import com.alttd.proxydiscordlink.util.Utilities;
|
import com.alttd.proxydiscordlink.util.Utilities;
|
||||||
import com.velocitypowered.api.proxy.Player;
|
import com.velocitypowered.api.proxy.Player;
|
||||||
|
|
||||||
|
|
@ -76,58 +79,25 @@ public class Database {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void syncPlayerData(Player player) {
|
public void syncPlayer(DiscordLinkPlayer player) {
|
||||||
|
|
||||||
ResultSet resultSet = getPlayerData(player.getUniqueId());
|
|
||||||
try {
|
|
||||||
if (!resultSet.next()) return;
|
|
||||||
|
|
||||||
String discordNickname = resultSet.getString("player_nickname");
|
|
||||||
String playerNickname = getNick(player.getUniqueId());
|
|
||||||
|
|
||||||
boolean correctName = resultSet.getString("player_name").equals(player.getUsername());
|
|
||||||
boolean correctNick = Objects.equals(discordNickname, playerNickname);
|
|
||||||
boolean correctRankName = resultSet.getString("player_rank").equals(Utilities.getRankName(player));
|
|
||||||
boolean correctRank = resultSet.getBoolean("player_isdonor") == (Utilities.isDonor(player));
|
|
||||||
|
|
||||||
if (correctName && correctNick && correctRankName && correctRank) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
syncPlayer(resultSet, player, playerNickname);
|
|
||||||
} catch (SQLException exception) {
|
|
||||||
exception.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ResultSet getPlayerData(UUID uuid) {
|
|
||||||
try {
|
|
||||||
return getStringResult("SELECT * FROM linked_accounts WHERE player_uuid = ?", uuid.toString());
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void syncPlayer(ResultSet resultSet, Player player, String playerNickname) {
|
|
||||||
try {
|
try {
|
||||||
|
String playerNickname = getNick(player.getUuid());
|
||||||
String sql = "INSERT INTO updates " +
|
String sql = "INSERT INTO updates " +
|
||||||
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, 0, 1) " +
|
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, 0, 1) " +
|
||||||
"ON DUPLICATE KEY UPDATE player_uuid = ?";
|
"ON DUPLICATE KEY UPDATE player_uuid = ?";
|
||||||
|
|
||||||
PreparedStatement statement = DatabaseConnection.getConnection().prepareStatement(sql);
|
PreparedStatement statement = DatabaseConnection.getConnection().prepareStatement(sql);
|
||||||
|
|
||||||
int donor = Utilities.isDonor(player) ? 1 : 0;
|
String uuid = player.getUuid().toString();
|
||||||
String uuid = player.getUniqueId().toString();
|
|
||||||
|
|
||||||
statement.setString(1, player.getUniqueId().toString());
|
statement.setString(1, player.getUuid().toString());
|
||||||
statement.setString(2, player.getUsername());
|
statement.setString(2, player.getUsername());
|
||||||
statement.setString(3, playerNickname);
|
statement.setString(3, playerNickname);
|
||||||
statement.setString(4, Utilities.getRankName(player));
|
statement.setString(4, Utilities.getRankName(player.getUuid()));
|
||||||
statement.setInt(5, donor);
|
statement.setInt(5, player.isDonor() ? 1 : 0);
|
||||||
statement.setInt(6, resultSet.getInt("player_isnitro"));
|
statement.setInt(6, player.isNitro() ? 1 : 0);
|
||||||
statement.setString(7, resultSet.getString("discord_username"));
|
statement.setString(7, player.getDiscordUsername());
|
||||||
statement.setString(8, resultSet.getString("discord_id"));
|
statement.setLong(8, player.getUserId());
|
||||||
statement.setString(9, uuid);
|
statement.setString(9, uuid);
|
||||||
|
|
||||||
statement.execute();
|
statement.execute();
|
||||||
|
|
@ -285,6 +255,60 @@ public class Database {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should only be used internally
|
||||||
|
* @param user_id gets the player with this user id
|
||||||
|
* @return null or the requested DiscordLinkPlayer
|
||||||
|
*/
|
||||||
|
public DiscordLinkPlayer getPlayer(long user_id) {
|
||||||
|
DiscordLinkPlayer discordLinkPlayer = DiscordLinkPlayer.getDiscordLinkPlayer(user_id);
|
||||||
|
|
||||||
|
if (discordLinkPlayer != null)
|
||||||
|
return discordLinkPlayer;
|
||||||
|
try {
|
||||||
|
PreparedStatement statement = DatabaseConnection.getConnection()
|
||||||
|
.prepareStatement("SELECT * FROM linked_accounts WHERE discord_id = ?");
|
||||||
|
|
||||||
|
statement.setLong(1, user_id);
|
||||||
|
return getPlayer(statement.executeQuery());
|
||||||
|
} catch (SQLException exception) {
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should only be used internally
|
||||||
|
* @param uuid gets the player with this uuid
|
||||||
|
* @return null or the requested DiscordLinkPlayer
|
||||||
|
*/
|
||||||
|
public DiscordLinkPlayer getPlayer(UUID uuid) {
|
||||||
|
try {
|
||||||
|
PreparedStatement statement = DatabaseConnection.getConnection()
|
||||||
|
.prepareStatement("SELECT * FROM linked_accounts WHERE player_uuid = ?");
|
||||||
|
|
||||||
|
statement.setString(1, uuid.toString());
|
||||||
|
return getPlayer(statement.executeQuery());
|
||||||
|
} catch (SQLException exception) {
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private DiscordLinkPlayer getPlayer(ResultSet resultSet) throws SQLException {
|
||||||
|
if (resultSet.next()) {
|
||||||
|
return new DiscordLinkPlayer(
|
||||||
|
resultSet.getLong("discord_id"),
|
||||||
|
UUID.fromString(resultSet.getString("player_uuid")),
|
||||||
|
resultSet.getString("player_name"),
|
||||||
|
resultSet.getString("discord_username"),
|
||||||
|
resultSet.getInt("player_isdonor") == 1,
|
||||||
|
resultSet.getInt("player_isnitro") == 1
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private ResultSet getStringResult(String query, String... parameters) throws SQLException {
|
private ResultSet getStringResult(String query, String... parameters) throws SQLException {
|
||||||
PreparedStatement statement = DatabaseConnection.getConnection().prepareStatement(query);
|
PreparedStatement statement = DatabaseConnection.getConnection().prepareStatement(query);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,52 +0,0 @@
|
||||||
package com.alttd.proxydiscordlink.listeners;
|
|
||||||
|
|
||||||
import com.alttd.proxydiscordlink.database.Database;
|
|
||||||
import com.alttd.proxydiscordlink.DiscordLink;
|
|
||||||
import com.alttd.proxydiscordlink.util.ALogger;
|
|
||||||
import com.alttd.proxydiscordlink.util.Utilities;
|
|
||||||
import com.velocitypowered.api.event.PostOrder;
|
|
||||||
import com.velocitypowered.api.event.Subscribe;
|
|
||||||
import com.velocitypowered.api.event.connection.LoginEvent;
|
|
||||||
import com.velocitypowered.api.proxy.Player;
|
|
||||||
import net.luckperms.api.LuckPerms;
|
|
||||||
import net.luckperms.api.model.group.Group;
|
|
||||||
import net.luckperms.api.model.user.User;
|
|
||||||
import net.luckperms.api.node.Node;
|
|
||||||
import net.luckperms.api.node.types.InheritanceNode;
|
|
||||||
|
|
||||||
public class PlayerJoin {
|
|
||||||
|
|
||||||
@Subscribe(order = PostOrder.LATE)
|
|
||||||
public void playerLogin(LoginEvent event) {
|
|
||||||
Player player = event.getPlayer();
|
|
||||||
Database database = DiscordLink.getPlugin().getDatabase();
|
|
||||||
|
|
||||||
if (database.playerIsLinked(player)) {
|
|
||||||
database.syncPlayerData(player);
|
|
||||||
|
|
||||||
boolean isNitro = database.hasDiscordNitro(player);
|
|
||||||
boolean hasNitro = Utilities.hasMinecraftNitro(player);
|
|
||||||
|
|
||||||
LuckPerms luckPermsAPI = Utilities.getLuckPerms();
|
|
||||||
Group discord = luckPermsAPI.getGroupManager().getGroup("discord");
|
|
||||||
|
|
||||||
if (discord == null) {
|
|
||||||
ALogger.error("Unable to find discord group in DiscordLink");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isNitro && !hasNitro) {
|
|
||||||
luckPermsAPI.getUserManager().modifyUser(player.getUniqueId(), (User user) -> {
|
|
||||||
Node node = InheritanceNode.builder(discord).build();
|
|
||||||
user.data().add(node);
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (!isNitro && hasNitro) {
|
|
||||||
luckPermsAPI.getUserManager().modifyUser(player.getUniqueId(), (User user) -> {
|
|
||||||
Node node = InheritanceNode.builder(discord).build();
|
|
||||||
user.data().remove(node);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
package com.alttd.proxydiscordlink.commands;
|
package com.alttd.proxydiscordlink.minecraft.commands;
|
||||||
|
|
||||||
import com.alttd.proxydiscordlink.commands.subcommands.CheckLinked;
|
import com.alttd.proxydiscordlink.minecraft.commands.subcommands.CheckLinked;
|
||||||
import com.alttd.proxydiscordlink.commands.subcommands.Link;
|
import com.alttd.proxydiscordlink.minecraft.commands.subcommands.Link;
|
||||||
import com.alttd.proxydiscordlink.commands.subcommands.Reload;
|
import com.alttd.proxydiscordlink.minecraft.commands.subcommands.Reload;
|
||||||
import com.alttd.proxydiscordlink.commands.subcommands.Unlink;
|
import com.alttd.proxydiscordlink.minecraft.commands.subcommands.Unlink;
|
||||||
import com.alttd.proxydiscordlink.config.Config;
|
import com.alttd.proxydiscordlink.config.Config;
|
||||||
import com.mojang.brigadier.arguments.StringArgumentType;
|
import com.mojang.brigadier.arguments.StringArgumentType;
|
||||||
import com.velocitypowered.api.command.CommandSource;
|
import com.velocitypowered.api.command.CommandSource;
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package com.alttd.proxydiscordlink.commands;
|
package com.alttd.proxydiscordlink.minecraft.commands;
|
||||||
|
|
||||||
import com.velocitypowered.api.command.CommandSource;
|
import com.velocitypowered.api.command.CommandSource;
|
||||||
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package com.alttd.proxydiscordlink.commands.subcommands;
|
package com.alttd.proxydiscordlink.minecraft.commands.subcommands;
|
||||||
|
|
||||||
import com.alttd.proxydiscordlink.DiscordLink;
|
import com.alttd.proxydiscordlink.DiscordLink;
|
||||||
import com.alttd.proxydiscordlink.commands.SubCommand;
|
import com.alttd.proxydiscordlink.minecraft.commands.SubCommand;
|
||||||
import com.alttd.proxydiscordlink.config.Config;
|
import com.alttd.proxydiscordlink.config.Config;
|
||||||
import com.velocitypowered.api.command.CommandSource;
|
import com.velocitypowered.api.command.CommandSource;
|
||||||
import com.velocitypowered.api.proxy.Player;
|
import com.velocitypowered.api.proxy.Player;
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package com.alttd.proxydiscordlink.commands.subcommands;
|
package com.alttd.proxydiscordlink.minecraft.commands.subcommands;
|
||||||
|
|
||||||
import com.alttd.proxydiscordlink.DiscordLink;
|
import com.alttd.proxydiscordlink.DiscordLink;
|
||||||
import com.alttd.proxydiscordlink.commands.SubCommand;
|
import com.alttd.proxydiscordlink.minecraft.commands.SubCommand;
|
||||||
import com.alttd.proxydiscordlink.config.Config;
|
import com.alttd.proxydiscordlink.config.Config;
|
||||||
import com.alttd.proxydiscordlink.database.Database;
|
import com.alttd.proxydiscordlink.database.Database;
|
||||||
import com.alttd.proxydiscordlink.util.Utilities;
|
import com.alttd.proxydiscordlink.util.Utilities;
|
||||||
|
|
@ -62,7 +62,7 @@ public class Link implements SubCommand {
|
||||||
player.sendMessage(miniMessage.parse(Config.GIVE_CODE, Template.of("code", authCode)));
|
player.sendMessage(miniMessage.parse(Config.GIVE_CODE, Template.of("code", authCode)));
|
||||||
DiscordLink.getPlugin().getCache()
|
DiscordLink.getPlugin().getCache()
|
||||||
.cacheCode(player.getUniqueId(), authCode);
|
.cacheCode(player.getUniqueId(), authCode);
|
||||||
database.storeDataInCache(player, authCode, Utilities.getRankName(player), Utilities.isDonor(player));
|
database.storeDataInCache(player, authCode, Utilities.getRankName(player.getUniqueId()), Utilities.isDonor(player.getUniqueId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package com.alttd.proxydiscordlink.commands.subcommands;
|
package com.alttd.proxydiscordlink.minecraft.commands.subcommands;
|
||||||
|
|
||||||
import com.alttd.proxydiscordlink.DiscordLink;
|
import com.alttd.proxydiscordlink.DiscordLink;
|
||||||
import com.alttd.proxydiscordlink.commands.SubCommand;
|
import com.alttd.proxydiscordlink.minecraft.commands.SubCommand;
|
||||||
import com.alttd.proxydiscordlink.config.Config;
|
import com.alttd.proxydiscordlink.config.Config;
|
||||||
import com.velocitypowered.api.command.CommandSource;
|
import com.velocitypowered.api.command.CommandSource;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
package com.alttd.proxydiscordlink.minecraft.commands.subcommands;
|
||||||
|
|
||||||
|
import com.alttd.proxydiscordlink.minecraft.commands.SubCommand;
|
||||||
|
import com.velocitypowered.api.command.CommandSource;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Sync implements SubCommand { //TODO implement
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPermission() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(String[] args, CommandSource source) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> suggest(String[] args) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getHelpMessage() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package com.alttd.proxydiscordlink.commands.subcommands;
|
package com.alttd.proxydiscordlink.minecraft.commands.subcommands;
|
||||||
|
|
||||||
import com.alttd.proxydiscordlink.DiscordLink;
|
import com.alttd.proxydiscordlink.DiscordLink;
|
||||||
import com.alttd.proxydiscordlink.commands.SubCommand;
|
import com.alttd.proxydiscordlink.minecraft.commands.SubCommand;
|
||||||
import com.alttd.proxydiscordlink.config.Config;
|
import com.alttd.proxydiscordlink.config.Config;
|
||||||
import com.alttd.proxydiscordlink.database.Database;
|
import com.alttd.proxydiscordlink.database.Database;
|
||||||
import com.velocitypowered.api.command.CommandSource;
|
import com.velocitypowered.api.command.CommandSource;
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
package com.alttd.proxydiscordlink.minecraft.listeners;
|
||||||
|
|
||||||
|
import com.alttd.proxydiscordlink.database.Database;
|
||||||
|
import com.alttd.proxydiscordlink.DiscordLink;
|
||||||
|
import com.alttd.proxydiscordlink.objects.DiscordLinkPlayer;
|
||||||
|
import com.alttd.proxydiscordlink.util.ALogger;
|
||||||
|
import com.alttd.proxydiscordlink.util.Utilities;
|
||||||
|
import com.velocitypowered.api.event.PostOrder;
|
||||||
|
import com.velocitypowered.api.event.Subscribe;
|
||||||
|
import com.velocitypowered.api.event.connection.LoginEvent;
|
||||||
|
import com.velocitypowered.api.proxy.Player;
|
||||||
|
import net.luckperms.api.LuckPerms;
|
||||||
|
import net.luckperms.api.model.group.Group;
|
||||||
|
import net.luckperms.api.model.user.User;
|
||||||
|
import net.luckperms.api.node.Node;
|
||||||
|
import net.luckperms.api.node.types.InheritanceNode;
|
||||||
|
|
||||||
|
public class PlayerJoin {
|
||||||
|
|
||||||
|
@Subscribe(order = PostOrder.LATE)
|
||||||
|
public void playerLogin(LoginEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
Database database = DiscordLink.getPlugin().getDatabase();
|
||||||
|
|
||||||
|
if (database.playerIsLinked(player) && DiscordLinkPlayer.getDiscordLinkPlayer(event.getPlayer().getUniqueId()) == null) {
|
||||||
|
//TODO remove islinked?
|
||||||
|
|
||||||
|
|
||||||
|
//TODO I don't think all the below is needed anymore?
|
||||||
|
// database.syncPlayerData(player);
|
||||||
|
//
|
||||||
|
// boolean isNitro = database.hasDiscordNitro(player);
|
||||||
|
// boolean hasNitro = Utilities.hasMinecraftNitro(player);
|
||||||
|
//
|
||||||
|
// LuckPerms luckPermsAPI = Utilities.getLuckPerms();
|
||||||
|
// Group discord = luckPermsAPI.getGroupManager().getGroup("discord");
|
||||||
|
//
|
||||||
|
// if (discord == null) {
|
||||||
|
// ALogger.error("Unable to find discord group in DiscordLink");
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (isNitro && !hasNitro) {
|
||||||
|
// luckPermsAPI.getUserManager().modifyUser(player.getUniqueId(), (User user) -> {
|
||||||
|
// Node node = InheritanceNode.builder(discord).build();
|
||||||
|
// user.data().add(node);
|
||||||
|
// });
|
||||||
|
//
|
||||||
|
// } else if (!isNitro && hasNitro) {
|
||||||
|
// luckPermsAPI.getUserManager().modifyUser(player.getUniqueId(), (User user) -> {
|
||||||
|
// Node node = InheritanceNode.builder(discord).build();
|
||||||
|
// user.data().remove(node);
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package com.alttd.proxydiscordlink.listeners;
|
package com.alttd.proxydiscordlink.minecraft.listeners;
|
||||||
|
|
||||||
import com.alttd.proxydiscordlink.database.Database;
|
import com.alttd.proxydiscordlink.database.Database;
|
||||||
import com.alttd.proxydiscordlink.DiscordLink;
|
import com.alttd.proxydiscordlink.DiscordLink;
|
||||||
|
|
@ -0,0 +1,111 @@
|
||||||
|
package com.alttd.proxydiscordlink.objects;
|
||||||
|
|
||||||
|
import com.alttd.proxydiscordlink.DiscordLink;
|
||||||
|
import com.alttd.proxydiscordlink.bot.objects.DiscordRole;
|
||||||
|
import com.alttd.proxydiscordlink.database.Database;
|
||||||
|
import com.alttd.proxydiscordlink.util.ALogger;
|
||||||
|
import com.alttd.proxydiscordlink.util.Utilities;
|
||||||
|
import net.luckperms.api.model.user.User;
|
||||||
|
import net.luckperms.api.node.NodeBuilder;
|
||||||
|
import net.luckperms.api.node.types.PermissionNode;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class DiscordLinkPlayer {
|
||||||
|
private final long userId;
|
||||||
|
private final UUID uuid;
|
||||||
|
private final String username;
|
||||||
|
private final String discordUsername;
|
||||||
|
private boolean isDonor;
|
||||||
|
private boolean isNitro;
|
||||||
|
|
||||||
|
public DiscordLinkPlayer(long userId, UUID uuid, String username, String discordUsername, boolean isDonor, boolean isNitro) {
|
||||||
|
this.userId = userId;
|
||||||
|
this.uuid = uuid;
|
||||||
|
this.username = username;
|
||||||
|
this.isDonor = isDonor;
|
||||||
|
this.isNitro = isNitro;
|
||||||
|
this.discordUsername = discordUsername;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getUserId() {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UUID getUuid() {
|
||||||
|
return uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUsername() {
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDonor() {
|
||||||
|
return isDonor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isNitro() {
|
||||||
|
return isNitro;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDiscordUsername() {
|
||||||
|
return discordUsername;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update(List<DiscordRole> roles, boolean added) {
|
||||||
|
User user = Utilities.getLuckPerms().getUserManager().getUser(getUuid());
|
||||||
|
if (user == null)
|
||||||
|
{
|
||||||
|
ALogger.error("Tried updating a user luckperms couldn't find: " + getUuid());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (DiscordRole role : roles) {
|
||||||
|
if (role.getDisplayName().equalsIgnoreCase("nitro"))
|
||||||
|
isNitro = added; //FIXME this should be a list instead of a bool (separate table for roles they have)
|
||||||
|
if (List.of("viceroy", "count", "duke", "archduke").contains(role.getDisplayName().toLowerCase()))
|
||||||
|
isDonor = added; //FIXME this should be a list instead of a bool (separate table for roles they have)
|
||||||
|
if (!role.isUpdateToMinecraft())
|
||||||
|
continue;
|
||||||
|
PermissionNode group = PermissionNode.builder("group." + role.getLuckpermsName()).build();
|
||||||
|
if (!user.getNodes().contains(group))
|
||||||
|
if (added)
|
||||||
|
user.getNodes().add(group);
|
||||||
|
else
|
||||||
|
user.getNodes().remove(group);
|
||||||
|
}
|
||||||
|
DiscordLink.getPlugin().getDatabase().syncPlayer(this);
|
||||||
|
//TODO implement
|
||||||
|
}
|
||||||
|
|
||||||
|
//Static stuff
|
||||||
|
|
||||||
|
private static final List<DiscordLinkPlayer> discordLinkPlayers = new ArrayList<>();
|
||||||
|
|
||||||
|
public static List<DiscordLinkPlayer> getDiscordLinkPlayers() {
|
||||||
|
return Collections.unmodifiableList(discordLinkPlayers);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addDiscordLinkPlayer(DiscordLinkPlayer discordLinkPlayer) {
|
||||||
|
if (!discordLinkPlayers.contains(discordLinkPlayer))
|
||||||
|
discordLinkPlayers.add(discordLinkPlayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removeDiscordLinkPlayer(DiscordLinkPlayer discordLinkPlayer) {
|
||||||
|
discordLinkPlayers.remove(discordLinkPlayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DiscordLinkPlayer getDiscordLinkPlayer(long userId) {
|
||||||
|
return discordLinkPlayers.stream()
|
||||||
|
.filter(discordLinkPlayer -> discordLinkPlayer.getUserId() == userId)
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DiscordLinkPlayer getDiscordLinkPlayer(UUID uuid) {
|
||||||
|
return discordLinkPlayers.stream()
|
||||||
|
.filter(o1 -> o1.getUuid().equals(uuid))
|
||||||
|
.findFirst()
|
||||||
|
.orElseGet(() -> DiscordLink.getPlugin().getDatabase().getPlayer(uuid));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -13,6 +13,7 @@ import net.luckperms.api.node.types.InheritanceNode;
|
||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class Utilities {
|
public class Utilities {
|
||||||
|
|
@ -26,8 +27,8 @@ public class Utilities {
|
||||||
return luckPerms;
|
return luckPerms;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isDonor(Player player) {
|
public static boolean isDonor(UUID uuid) {
|
||||||
User user = getLuckPerms().getUserManager().getUser(player.getUniqueId());
|
User user = getLuckPerms().getUserManager().getUser(uuid);
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
ALogger.error("Unable to find user in isDonor!");
|
ALogger.error("Unable to find user in isDonor!");
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -83,8 +84,8 @@ public class Utilities {
|
||||||
return salt.toString();
|
return salt.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getRankName(Player player) {
|
public static String getRankName(UUID uuid) {
|
||||||
return getLuckPerms().getUserManager().getUser(player.getUniqueId()).getPrimaryGroup();
|
return getLuckPerms().getUserManager().getUser(uuid).getPrimaryGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String capitalize(String str) {
|
public static String capitalize(String str) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user