Removed code that synced through database instead of directly

This commit is contained in:
Teriuihi 2021-09-12 20:39:48 +02:00
parent 420d044153
commit 3d950f5fee
6 changed files with 12 additions and 188 deletions

View File

@ -7,7 +7,6 @@ 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.minecraft.listeners.LuckpermsEvents; 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.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;
@ -76,7 +75,6 @@ public class DiscordLink {
} }
public void loadEvents() { public void loadEvents() {
server.getEventManager().register(this, new PlayerJoin());
server.getEventManager().register(this, new PlayerLeave()); server.getEventManager().register(this, new PlayerLeave());
new LuckpermsEvents().listener(); new LuckpermsEvents().listener();
} }

View File

@ -1,9 +1,7 @@
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.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;
@ -11,7 +9,6 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
import java.util.Objects;
import java.util.UUID; import java.util.UUID;
public class Database { 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) { public void syncPlayer(DiscordLinkPlayer player) {
try { try {
String playerNickname = getNick(player.getUuid()); 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) public boolean playerIsLinked(Player player) { //TODO maybe this can be using the discord api instead? (or a cache idk)
try { try {
PreparedStatement statement = DatabaseConnection.getConnection() PreparedStatement statement = DatabaseConnection.getConnection()
@ -136,55 +101,16 @@ public class Database {
return false; return false;
} }
public void removeLinkedAccount(Player player) { public void removeLinkedAccount(DiscordLinkPlayer 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();
}
try { try {
PreparedStatement statement = DatabaseConnection.getConnection() PreparedStatement statement = DatabaseConnection.getConnection()
.prepareStatement("DELETE FROM linked_accounts WHERE player_uuid = ?"); .prepareStatement("DELETE FROM linked_accounts WHERE player_uuid = ?");
statement.setString(1, player.getUniqueId().toString()); statement.setString(1, player.getUuid().toString());
statement.execute(); statement.execute();
statement = DatabaseConnection.getConnection() statement = DatabaseConnection.getConnection()
.prepareStatement("DELETE FROM name_type WHERE discord_id = ?"); .prepareStatement("DELETE FROM name_type WHERE discord_id = ?");
statement.setString(1, discordId); statement.setLong(1, player.getUserId());
statement.execute(); statement.execute();
statement.close(); 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) { public String uuidFromName(String playerName) {
try { try {
PreparedStatement statement = DatabaseConnection.getConnection() PreparedStatement statement = DatabaseConnection.getConnection()
@ -308,14 +206,4 @@ public class Database {
} }
return null; 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();
}
} }

View File

@ -43,18 +43,19 @@ public class Link implements SubCommand {
return; return;
} }
linkAccounts(player); startLinkAccounts(player);
} }
private void linkAccounts(Player player) { private void startLinkAccounts(Player player) {
Database database = DiscordLink.getPlugin().getDatabase(); Database database = DiscordLink.getPlugin().getDatabase();
if (database.playerIsLinked(player)) { if (database.playerIsLinked(player)) {
player.sendMessage(miniMessage.parse(Config.ALREADY_LINKED_ACCOUNTS)); player.sendMessage(miniMessage.parse(Config.ALREADY_LINKED_ACCOUNTS));
return; return;
} }
if (database.isInCache(player)) { if (DiscordLink.getPlugin().getCache().getCode(player.getUniqueId()) != null) {
player.sendMessage(miniMessage.parse(Config.ALREADY_GOT_CODE)); player.sendMessage(miniMessage.parse(Config.ALREADY_GOT_CODE));
return;
} }
String authCode = Utilities.getAuthKey(); String authCode = Utilities.getAuthKey();
@ -62,7 +63,6 @@ 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.getUniqueId()), Utilities.isDonor(player.getUniqueId()));
} }
@Override @Override

View File

@ -4,6 +4,7 @@ import com.alttd.proxydiscordlink.DiscordLink;
import com.alttd.proxydiscordlink.minecraft.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.objects.DiscordLinkPlayer;
import com.velocitypowered.api.command.CommandSource; import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.Player;
import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.MiniMessage;
@ -54,7 +55,9 @@ public class Unlink implements SubCommand {
return; 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)); player.sendMessage(miniMessage.parse(Config.UNLINKED_ACCOUNTS));
} }

View File

@ -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);
// });
// }
}
}
}

View File

@ -1,23 +1,15 @@
package com.alttd.proxydiscordlink.minecraft.listeners; package com.alttd.proxydiscordlink.minecraft.listeners;
import com.alttd.proxydiscordlink.database.Database;
import com.alttd.proxydiscordlink.DiscordLink; import com.alttd.proxydiscordlink.DiscordLink;
import com.velocitypowered.api.event.PostOrder; import com.velocitypowered.api.event.PostOrder;
import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.event.connection.DisconnectEvent; import com.velocitypowered.api.event.connection.DisconnectEvent;
import com.velocitypowered.api.proxy.Player;
public class PlayerLeave { public class PlayerLeave {
@Subscribe(order = PostOrder.LATE) @Subscribe(order = PostOrder.LATE)
public void playerDisconnect(DisconnectEvent event) { public void playerDisconnect(DisconnectEvent event) {
Player player = event.getPlayer(); DiscordLink.getPlugin().getCache().removeCachedPlayer(event.getPlayer().getUniqueId());
Database database = DiscordLink.getPlugin().getDatabase();
if (database.isInCache(player)) //TODO async?
database.removePlayerFromCache(player);
DiscordLink.getPlugin().getCache().removeCachedPlayer(player.getUniqueId());
} }
} }