diff --git a/src/main/java/com/alttd/proxydiscordlink/DiscordLink.java b/src/main/java/com/alttd/proxydiscordlink/DiscordLink.java index 24f159a..4488886 100644 --- a/src/main/java/com/alttd/proxydiscordlink/DiscordLink.java +++ b/src/main/java/com/alttd/proxydiscordlink/DiscordLink.java @@ -7,7 +7,6 @@ import com.alttd.proxydiscordlink.config.Config; import com.alttd.proxydiscordlink.database.Database; import com.alttd.proxydiscordlink.database.DatabaseConnection; import com.alttd.proxydiscordlink.minecraft.listeners.LuckpermsEvents; -import com.alttd.proxydiscordlink.minecraft.listeners.PlayerJoin; import com.alttd.proxydiscordlink.minecraft.listeners.PlayerLeave; import com.alttd.proxydiscordlink.util.ALogger; import com.alttd.proxydiscordlink.util.Cache; @@ -76,7 +75,6 @@ public class DiscordLink { } public void loadEvents() { - server.getEventManager().register(this, new PlayerJoin()); server.getEventManager().register(this, new PlayerLeave()); new LuckpermsEvents().listener(); } diff --git a/src/main/java/com/alttd/proxydiscordlink/database/Database.java b/src/main/java/com/alttd/proxydiscordlink/database/Database.java index 4b2a066..d8640ed 100644 --- a/src/main/java/com/alttd/proxydiscordlink/database/Database.java +++ b/src/main/java/com/alttd/proxydiscordlink/database/Database.java @@ -1,9 +1,7 @@ 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.Cache; import com.alttd.proxydiscordlink.util.Utilities; import com.velocitypowered.api.proxy.Player; @@ -11,7 +9,6 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; -import java.util.Objects; import java.util.UUID; public class Database { @@ -60,25 +57,6 @@ public class Database { } } - public void storeDataInCache(Player player, String code, String rank, boolean isDonor) { - String sql = "INSERT INTO cache (player_uuid, player_name, player_nickname, player_rank, player_isdonor, code) VALUES (?, ?, ?, ?, ?, ?)"; - - try { - PreparedStatement statement = DatabaseConnection.getConnection().prepareStatement(sql); - - statement.setString(1, player.getUniqueId().toString()); - statement.setString(2, player.getUsername()); - statement.setString(3, getNick(player.getUniqueId())); - statement.setString(4, rank); - statement.setBoolean(5, isDonor); - statement.setString(6, code); - statement.execute(); - } catch (SQLException exception) { - exception.printStackTrace(); - } - - } - public void syncPlayer(DiscordLinkPlayer player) { try { String playerNickname = getNick(player.getUuid()); @@ -106,19 +84,6 @@ public class Database { } } - public boolean isInCache(Player player) { //TODO maybe this can be a map instead - try { - ResultSet resultSet = getStringResult("SELECT * FROM cache WHERE player_uuid = ?", player.getUniqueId().toString()); - if (resultSet.next()) { - return true; - } - } catch (SQLException exception) { - exception.printStackTrace(); - } - - return false; - } - public boolean playerIsLinked(Player player) { //TODO maybe this can be using the discord api instead? (or a cache idk) try { PreparedStatement statement = DatabaseConnection.getConnection() @@ -136,55 +101,16 @@ public class Database { return false; } - public void removeLinkedAccount(Player player) { - String discordId = "0"; - - try { - PreparedStatement statementSelect = DatabaseConnection.getConnection() - .prepareStatement("SELECT * FROM linked_accounts WHERE player_uuid = '" + player.getUniqueId().toString() + "'"); - ResultSet resultSet = statementSelect.executeQuery(); - - if (!resultSet.next()) { - ALogger.error("Unable to remove linked account for: " + player.getUsername() + " : " + player.getUniqueId()); - return; - } - - PreparedStatement statementInsert = DatabaseConnection.getConnection() - .prepareStatement("INSERT INTO `updates` (`player_uuid`, `player_name`, `player_nickname`, `player_rank`, " + - "`player_isdonor`, `player_isnitro`, `discord_username`, `discord_id`, " + - "`discord_update`, `minecraft_update`) " + - "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE player_uuid = ?"); - - discordId = resultSet.getString("discord_id"); - - statementInsert.setString(1, resultSet.getString("player_uuid")); - statementInsert.setString(2, resultSet.getString("player_name")); - statementInsert.setString(3, resultSet.getString("player_nickname")); - statementInsert.setString(4, resultSet.getString("player_rank")); - statementInsert.setInt(5, resultSet.getInt("player_isdonor")); - statementInsert.setInt(6, resultSet.getInt("player_isnitro")); - statementInsert.setString(7, resultSet.getString("discord_username")); - statementInsert.setString(8, discordId); - statementInsert.setInt(9, 0); - statementInsert.setInt(10, 2); - statementInsert.setString(11, resultSet.getString("player_uuid")); - - statementInsert.execute(); - statementInsert.close(); - - } catch (SQLException exception) { - exception.printStackTrace(); - } - + public void removeLinkedAccount(DiscordLinkPlayer player) { try { PreparedStatement statement = DatabaseConnection.getConnection() .prepareStatement("DELETE FROM linked_accounts WHERE player_uuid = ?"); - statement.setString(1, player.getUniqueId().toString()); + statement.setString(1, player.getUuid().toString()); statement.execute(); statement = DatabaseConnection.getConnection() .prepareStatement("DELETE FROM name_type WHERE discord_id = ?"); - statement.setString(1, discordId); + statement.setLong(1, player.getUserId()); statement.execute(); statement.close(); @@ -194,34 +120,6 @@ public class Database { } - public void removePlayerFromCache(Player player) { - try { - PreparedStatement statement = DatabaseConnection.getConnection() - .prepareStatement("DELETE FROM cache WHERE player_uuid = '" + player.getUniqueId().toString() + "'"); - - statement.executeUpdate(); - statement.close(); - } catch (SQLException exception) { - exception.printStackTrace(); - } - } - - public boolean hasDiscordNitro(Player player) { - try { - PreparedStatement statement = DatabaseConnection.getConnection() - .prepareStatement("SELECT * FROM linked_accounts WHERE player_uuid = '" + player.getUniqueId().toString() + "'"); - ResultSet resultSet = statement.executeQuery(); - - if (resultSet.next()) { - return resultSet.getInt("player_isnitro") == 1; - } - } catch (SQLException exception) { - exception.printStackTrace(); - } - - return false; - } - public String uuidFromName(String playerName) { try { PreparedStatement statement = DatabaseConnection.getConnection() @@ -308,14 +206,4 @@ public class Database { } return null; } - - private ResultSet getStringResult(String query, String... parameters) throws SQLException { - PreparedStatement statement = DatabaseConnection.getConnection().prepareStatement(query); - - for (int i = 1; i < parameters.length + 1; ++i) { - statement.setString(i, parameters[i - 1]); - } - - return statement.executeQuery(); - } } diff --git a/src/main/java/com/alttd/proxydiscordlink/minecraft/commands/subcommands/Link.java b/src/main/java/com/alttd/proxydiscordlink/minecraft/commands/subcommands/Link.java index 6abf7f4..ffd4fb4 100644 --- a/src/main/java/com/alttd/proxydiscordlink/minecraft/commands/subcommands/Link.java +++ b/src/main/java/com/alttd/proxydiscordlink/minecraft/commands/subcommands/Link.java @@ -43,18 +43,19 @@ public class Link implements SubCommand { return; } - linkAccounts(player); + startLinkAccounts(player); } - private void linkAccounts(Player player) { + private void startLinkAccounts(Player player) { Database database = DiscordLink.getPlugin().getDatabase(); if (database.playerIsLinked(player)) { player.sendMessage(miniMessage.parse(Config.ALREADY_LINKED_ACCOUNTS)); return; } - if (database.isInCache(player)) { + if (DiscordLink.getPlugin().getCache().getCode(player.getUniqueId()) != null) { player.sendMessage(miniMessage.parse(Config.ALREADY_GOT_CODE)); + return; } String authCode = Utilities.getAuthKey(); @@ -62,7 +63,6 @@ public class Link implements SubCommand { player.sendMessage(miniMessage.parse(Config.GIVE_CODE, Template.of("code", authCode))); DiscordLink.getPlugin().getCache() .cacheCode(player.getUniqueId(), authCode); - database.storeDataInCache(player, authCode, Utilities.getRankName(player.getUniqueId()), Utilities.isDonor(player.getUniqueId())); } @Override diff --git a/src/main/java/com/alttd/proxydiscordlink/minecraft/commands/subcommands/Unlink.java b/src/main/java/com/alttd/proxydiscordlink/minecraft/commands/subcommands/Unlink.java index 47ebafb..6dfb473 100644 --- a/src/main/java/com/alttd/proxydiscordlink/minecraft/commands/subcommands/Unlink.java +++ b/src/main/java/com/alttd/proxydiscordlink/minecraft/commands/subcommands/Unlink.java @@ -4,6 +4,7 @@ import com.alttd.proxydiscordlink.DiscordLink; import com.alttd.proxydiscordlink.minecraft.commands.SubCommand; import com.alttd.proxydiscordlink.config.Config; import com.alttd.proxydiscordlink.database.Database; +import com.alttd.proxydiscordlink.objects.DiscordLinkPlayer; import com.velocitypowered.api.command.CommandSource; import com.velocitypowered.api.proxy.Player; import net.kyori.adventure.text.minimessage.MiniMessage; @@ -54,7 +55,9 @@ public class Unlink implements SubCommand { return; } - database.removeLinkedAccount(player); + database.removeLinkedAccount(DiscordLinkPlayer.getDiscordLinkPlayer(player.getUniqueId())); + //TODO remove all discord synced roles from minecraft + //TODO remove all minecraft synced roles from discord player.sendMessage(miniMessage.parse(Config.UNLINKED_ACCOUNTS)); } diff --git a/src/main/java/com/alttd/proxydiscordlink/minecraft/listeners/PlayerJoin.java b/src/main/java/com/alttd/proxydiscordlink/minecraft/listeners/PlayerJoin.java deleted file mode 100644 index 8c50c34..0000000 --- a/src/main/java/com/alttd/proxydiscordlink/minecraft/listeners/PlayerJoin.java +++ /dev/null @@ -1,57 +0,0 @@ -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); -// }); -// } - } - } -} diff --git a/src/main/java/com/alttd/proxydiscordlink/minecraft/listeners/PlayerLeave.java b/src/main/java/com/alttd/proxydiscordlink/minecraft/listeners/PlayerLeave.java index 45d8004..08b9182 100644 --- a/src/main/java/com/alttd/proxydiscordlink/minecraft/listeners/PlayerLeave.java +++ b/src/main/java/com/alttd/proxydiscordlink/minecraft/listeners/PlayerLeave.java @@ -1,23 +1,15 @@ package com.alttd.proxydiscordlink.minecraft.listeners; -import com.alttd.proxydiscordlink.database.Database; import com.alttd.proxydiscordlink.DiscordLink; import com.velocitypowered.api.event.PostOrder; import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.connection.DisconnectEvent; -import com.velocitypowered.api.proxy.Player; public class PlayerLeave { @Subscribe(order = PostOrder.LATE) public void playerDisconnect(DisconnectEvent event) { - Player player = event.getPlayer(); - - Database database = DiscordLink.getPlugin().getDatabase(); - if (database.isInCache(player)) //TODO async? - database.removePlayerFromCache(player); - - DiscordLink.getPlugin().getCache().removeCachedPlayer(player.getUniqueId()); + DiscordLink.getPlugin().getCache().removeCachedPlayer(event.getPlayer().getUniqueId()); } }