diff --git a/.gitignore b/.gitignore index 0f3c7ae..4ab004f 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,4 @@ target/ # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* replay_pid* -SimplePMs.iml +*.iml diff --git a/common/pom.xml b/common/pom.xml new file mode 100644 index 0000000..9ca69c6 --- /dev/null +++ b/common/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + simplexity.simplepms + common + 2.4.2 + + + simplexity + SimplePMs + 2.4.2 + + + + ${project.parent.artifactId}-${project.artifactId}-${project.version} + + + + 21 + 21 + UTF-8 + + + + + com.zaxxer + HikariCP + 6.3.0 + + + org.jetbrains + annotations + 26.0.2 + compile + + + + \ No newline at end of file diff --git a/src/main/java/simplexity/simplepms/saving/Cache.java b/common/src/main/java/com/simplexity/simplepms/common/database/Cache.java similarity index 72% rename from src/main/java/simplexity/simplepms/saving/Cache.java rename to common/src/main/java/com/simplexity/simplepms/common/database/Cache.java index f686fd8..778cd13 100644 --- a/src/main/java/simplexity/simplepms/saving/Cache.java +++ b/common/src/main/java/com/simplexity/simplepms/common/database/Cache.java @@ -1,11 +1,9 @@ -package simplexity.simplepms.saving; +package com.simplexity.simplepms.common.database; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import simplexity.simplepms.SimplePMs; -import simplexity.simplepms.config.LocaleMessage; -import simplexity.simplepms.saving.objects.PlayerBlock; -import simplexity.simplepms.saving.objects.PlayerSettings; +import com.simplexity.simplepms.common.logic.LocaleKey; +import com.simplexity.simplepms.common.logic.PlatformBridge; +import com.simplexity.simplepms.common.database.objects.PlayerBlock; +import com.simplexity.simplepms.common.database.objects.PlayerSettings; import java.util.ArrayList; import java.util.HashMap; @@ -17,7 +15,7 @@ public class Cache { public static final HashMap> blockList = new HashMap<>(); public static final HashMap playerSettings = new HashMap<>(); - public static final HashSet spyingPlayers = new HashSet<>(); + public static final HashSet spyingPlayers = new HashSet<>(); public static List getBlockList(UUID uuid) { return blockList.get(uuid); @@ -27,20 +25,16 @@ public static PlayerSettings getPlayerSettings(UUID uuid) { return playerSettings.get(uuid); } + public static void populateCache(UUID uuid, boolean hasSpyPerms) { + List blocklist = SQLHandler.getInstance().getBlockedPlayers(uuid); + blockList.put(uuid, blocklist); + populateNullNames(uuid); - public static void populateCache(UUID uuid, Player player, boolean hasSpyPerms) { - Bukkit.getScheduler().runTaskAsynchronously(SimplePMs.getInstance(), () -> { - SqlHandler.getInstance().getBlockedPlayers(uuid).thenAccept(blocklist -> { - blockList.put(uuid, blocklist); - populateNullNames(uuid); - }); - SqlHandler.getInstance().getSettings(uuid).thenAccept(settings -> { - playerSettings.put(uuid, settings); - if (hasSpyPerms && settings.isSocialSpyEnabled()) { - spyingPlayers.add(player); - } - }); - }); + PlayerSettings settings = SQLHandler.getInstance().getSettings(uuid); + playerSettings.put(uuid, settings); + if (hasSpyPerms && settings.isSocialSpyEnabled()) { + spyingPlayers.add(uuid); + } } /** @@ -71,7 +65,7 @@ public static void updateSocialSpySettings(UUID uuid, boolean socialSpy) { PlayerSettings settings = playerSettings.get(uuid); settings.setSocialSpyEnabled(socialSpy); playerSettings.put(uuid, settings); - SqlHandler.getInstance().updateSettings(uuid, settings.isSocialSpyEnabled(), settings.areMessagesDisabled()); + SQLHandler.getInstance().updateSettings(uuid, settings.isSocialSpyEnabled(), settings.areMessagesDisabled()); } /** @@ -84,7 +78,7 @@ public static void updateMessageSettings(UUID uuid, boolean messageDisabled) { PlayerSettings settings = playerSettings.get(uuid); settings.setMessagesDisabled(messageDisabled); playerSettings.put(uuid, settings); - SqlHandler.getInstance().updateSettings(uuid, settings.isSocialSpyEnabled(), settings.areMessagesDisabled()); + SQLHandler.getInstance().updateSettings(uuid, settings.isSocialSpyEnabled(), settings.areMessagesDisabled()); } /** @@ -99,7 +93,7 @@ public static void addBlockedUser(UUID uuid, PlayerBlock playerBlock) { List blockedPlayers = blockList.get(uuid); blockedPlayers.add(playerBlock); blockList.put(uuid, blockedPlayers); - SqlHandler.getInstance().addBlockedPlayer(uuid, playerBlock.getBlockedPlayerUUID(), playerBlock.getBlockedPlayerName(), playerBlock.getBlockReason()); + SQLHandler.getInstance().addBlockedPlayer(uuid, playerBlock.getBlockedPlayerUUID(), playerBlock.getBlockedPlayerName(), playerBlock.getBlockReason()); } /** @@ -117,7 +111,7 @@ public static void removeBlockedUser(UUID uuid, UUID blockedPlayerUuid) { } } blockList.put(uuid, userBlockList); - SqlHandler.getInstance().removeBlockedPlayer(uuid, blockedPlayerUuid); + SQLHandler.getInstance().removeBlockedPlayer(uuid, blockedPlayerUuid); } private static void removeCachedDuplicates(UUID blockingUuid, UUID blockedUuid) { @@ -132,15 +126,15 @@ private static void populateNullNames(UUID uuidToCheck) { if (playerBlocks == null || playerBlocks.isEmpty()) return; for (PlayerBlock block : playerBlocks) { if (block.getBlockedPlayerName() == null || block.getBlockedPlayerName().isEmpty()) { - String newName = Bukkit.getOfflinePlayer(block.getBlockedPlayerUUID()).getName(); - if (newName == null) newName = LocaleMessage.ERROR_NAME_NOT_FOUND.getMessage(); + String newName = PlatformBridge.getPlatformAdapter().getPlayerName(block.getBlockedPlayerUUID()); + if (newName == null) newName = PlatformBridge.getPlatformAdapter().getLocaleString(LocaleKey.ERROR_NAME_NOT_FOUND); block.setBlockedPlayerName(newName); } } blockList.put(uuidToCheck, playerBlocks); } - public static Set getSpyingPlayers() { + public static Set getSpyingPlayers() { return spyingPlayers; } } diff --git a/common/src/main/java/com/simplexity/simplepms/common/database/SQLHandler.java b/common/src/main/java/com/simplexity/simplepms/common/database/SQLHandler.java new file mode 100644 index 0000000..13c0e7b --- /dev/null +++ b/common/src/main/java/com/simplexity/simplepms/common/database/SQLHandler.java @@ -0,0 +1,241 @@ +package com.simplexity.simplepms.common.database; + +import com.simplexity.simplepms.common.database.objects.PlayerBlock; +import com.simplexity.simplepms.common.database.objects.PlayerSettings; +import com.simplexity.simplepms.common.logger.Logger; +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class SQLHandler { + + private SQLHandler() { } + + private static SQLHandler instance; + private static boolean usingMySQL; + + public static SQLHandler getInstance() { + if (instance == null) { + instance = new SQLHandler(); + } + return instance; + } + + private static HikariDataSource dataSource; + private static final HikariConfig hikariConfig = new HikariConfig(); + + public void init() { + if (dataSource == null) { + // TODO: Logger error, need to call setupConfig first + return; + } + try (Connection connection = getConnection()) { + PreparedStatement blocklistInitStatement = connection.prepareStatement(""" + CREATE TABLE IF NOT EXISTS blocklist ( + player_uuid VARCHAR (36) NOT NULL, + blocked_player_uuid VARCHAR(36) NOT NULL, + blocked_player_name VARCHAR(256), + block_reason VARCHAR(256), + PRIMARY KEY (player_uuid, blocked_player_uuid) + );"""); + blocklistInitStatement.execute(); + PreparedStatement playerSettingsInitStatement = connection.prepareStatement(""" + CREATE TABLE IF NOT EXISTS settings ( + player_uuid VARCHAR (36) NOT NULL PRIMARY KEY, + socialspy_enabled BOOLEAN NOT NULL, + messages_disabled BOOLEAN NOT NULL + );"""); + playerSettingsInitStatement.execute(); + updateDatabaseColumns(); + } catch (SQLException e) { + Logger.getLogger().warn("Failed to connect to database: {}", e.getMessage(), e); + } + } + + public void reloadDatabase(String jdbcUrl, String username, String password) { + Logger.getLogger().info("Reconnecting to SimplePMs database..."); + shutdownConnection(); + setupConfig(jdbcUrl, username, password); + Logger.getLogger().info("Database reloaded successfully"); + } + + + public PlayerSettings getSettings(UUID playerUUID) { + String queryString = "SELECT socialspy_enabled, messages_disabled FROM settings WHERE player_uuid = ?;"; + PlayerSettings settings = null; + try (Connection connection = getConnection()) { + PreparedStatement statement = connection.prepareStatement(queryString); + statement.setString(1, String.valueOf(playerUUID)); + try (ResultSet resultSet = statement.executeQuery()) { + if (!resultSet.next()) { + settings = new PlayerSettings(playerUUID); + updateSettings(playerUUID, settings.isSocialSpyEnabled(), settings.areMessagesDisabled()); + } else { + boolean socialSpy = resultSet.getBoolean("socialspy_enabled"); + boolean messagesDisabled = resultSet.getBoolean("messages_disabled"); + settings = new PlayerSettings(playerUUID, socialSpy, messagesDisabled); + } + } + } catch (SQLException e) { + Logger.getLogger().warn("Failed to retrieve settings from database: {}", e.getMessage(), e); + } + return settings; + } + + public List getBlockedPlayers(UUID playerUUID) { + String queryString = "SELECT blocked_player_uuid, block_reason, blocked_player_name from blocklist WHERE player_uuid = ?;"; + List blockedPlayers = new ArrayList<>(); + try (Connection connection = getConnection()) { + PreparedStatement statement = connection.prepareStatement(queryString); + statement.setString(1, String.valueOf(playerUUID)); + try (ResultSet resultSet = statement.executeQuery()) { + while (resultSet.next()) { + UUID blockedPlayerUUID = UUID.fromString(resultSet.getString("blocked_player_uuid")); + String blockedPlayerName = resultSet.getString("blocked_player_name"); + String reason = resultSet.getString("block_reason"); + PlayerBlock block = new PlayerBlock(playerUUID, blockedPlayerName, blockedPlayerUUID, reason); + blockedPlayers.add(block); + } + } + } catch (SQLException e) { + Logger.getLogger().warn("Failed to get blocked players: {}", e.getMessage(), e); + } + return blockedPlayers; + } + + public void addBlockedPlayer(UUID playerUUID, UUID blockedPlayerUUID, String blockedPlayerName, String reason) { + String queryString = "REPLACE INTO blocklist (player_uuid, blocked_player_uuid, blocked_player_name, block_reason) VALUES (?, ?, ?, ?);"; + try (Connection connection = getConnection()) { + PreparedStatement statement = connection.prepareStatement(queryString); + statement.setString(1, String.valueOf(playerUUID)); + statement.setString(2, String.valueOf(blockedPlayerUUID)); + statement.setString(3, blockedPlayerName); + statement.setString(4, reason); + statement.executeUpdate(); + } catch (SQLException e) { + Logger.getLogger().warn("Failed to add blocked player: {}", e.getMessage(), e); + e.printStackTrace(); + } + } + + public void removeBlockedPlayer(UUID playerUUID, UUID blockedPlayerUUID) { + String queryString = "DELETE FROM blocklist WHERE player_uuid = ? and blocked_player_uuid = ?;"; + try (Connection connection = getConnection()) { + PreparedStatement statement = connection.prepareStatement(queryString); + statement.setString(1, String.valueOf(playerUUID)); + statement.setString(2, String.valueOf(blockedPlayerUUID)); + statement.executeUpdate(); + } catch (SQLException e) { + Logger.getLogger().warn("Failed to remove blocked player: {}", e.getMessage(), e); + } + } + + public void updateSettings(UUID playerUUID, boolean socialSpyEnabled, boolean messagesDisabled) { + String queryString = "REPLACE INTO settings (player_uuid, socialspy_enabled, messages_disabled) VALUES (?, ?, ?);"; + try (Connection connection = getConnection()) { + PreparedStatement statement = connection.prepareStatement(queryString); + statement.setString(1, String.valueOf(playerUUID)); + statement.setBoolean(2, socialSpyEnabled); + statement.setBoolean(3, messagesDisabled); + statement.executeUpdate(); + } catch (SQLException e) { + Logger.getLogger().warn("Failed to update settings to database: {}", e.getMessage(), e); + } + + } + + public void updateDatabaseColumns() { + String tableName = "blocklist"; + String columnName = "blocked_player_name"; + boolean columnExists; + try { + if (usingMySQL) { + columnExists = doesMysqlColumnExist(tableName, columnName); + } else { + columnExists = doesSqliteColumnExist(tableName, columnName); + } + if (!columnExists) { + addColumn(tableName, columnName, "VARCHAR(256)", ""); + } + } catch (Exception e) { + Logger.getLogger().warn("Unable to update database table: {} column: {}, error: {}", tableName, columnName, e.getMessage(), e); + } + } + + private Boolean doesSqliteColumnExist(String tableName, String columnName) { + String query = "PRAGMA table_info(" + tableName + ")"; + try (Connection connection = getConnection()) { + PreparedStatement statement = connection.prepareStatement(query); + ResultSet resultSet = statement.executeQuery(); + while (resultSet.next()) { + if (columnName.equalsIgnoreCase(resultSet.getString("name"))) { + return true; + } + } + } catch (SQLException e) { + Logger.getLogger().warn("Failed to to check for column {} in table {}: {}", columnName, tableName, e.getMessage(), e); + } + return false; + } + + private Boolean doesMysqlColumnExist(String tableName, String columnName) { + try (Connection connection = getConnection()) { + DatabaseMetaData metaData = connection.getMetaData(); + ResultSet resultSet = metaData.getColumns(null, null, tableName, columnName); + return resultSet.next(); + } catch (SQLException e) { + Logger.getLogger().warn("Failed to check for column {} in table {}: {}", columnName, tableName, e.getMessage(), e); + } + return false; + } + + // Possibly extremely cursed way to do this :cackle: + + public void addColumn(String tableName, String columnName, String dataType, String constraints) { + String query = String.format("ALTER TABLE %s ADD COLUMN %s %s %s;", tableName, columnName, dataType, constraints); + try (Connection connection = getConnection()) { + PreparedStatement statement = connection.prepareStatement(query); + statement.executeUpdate(); + Logger.getLogger().info("Added new column '{}' to table '{}'", columnName, tableName); + } catch (SQLException e) { + Logger.getLogger().warn("Failed to add new column {} to table {}: {}", columnName, tableName, e.getMessage(), e); + } + } + + private static void loadHikariDataSource() { + if (hikariConfig == null) return; // TODO: Logger for missing hikariConfig + dataSource = new HikariDataSource(hikariConfig); + } + + public void setupConfig(String jdbcUrl, String username, String password) { + if (!usingMySQL) { + hikariConfig.setJdbcUrl(jdbcUrl); + hikariConfig.setConnectionTestQuery("PRAGMA journal_mode = WAL;"); + loadHikariDataSource(); + return; + } + hikariConfig.setJdbcUrl(jdbcUrl); + hikariConfig.setUsername(username); + hikariConfig.setPassword(password); + loadHikariDataSource(); + } + + public static void setUsingMySQL(boolean usingMySQL) { + SQLHandler.usingMySQL = usingMySQL; + } + + public static Connection getConnection() throws SQLException { + return dataSource.getConnection(); + } + + public void shutdownConnection() { + if (dataSource == null || dataSource.isClosed()) return; + dataSource.close(); + dataSource = null; + Logger.getLogger().info("Closed existing database connection"); + } +} \ No newline at end of file diff --git a/src/main/java/simplexity/simplepms/saving/objects/PlayerBlock.java b/common/src/main/java/com/simplexity/simplepms/common/database/objects/PlayerBlock.java similarity index 95% rename from src/main/java/simplexity/simplepms/saving/objects/PlayerBlock.java rename to common/src/main/java/com/simplexity/simplepms/common/database/objects/PlayerBlock.java index c68cc50..b371628 100644 --- a/src/main/java/simplexity/simplepms/saving/objects/PlayerBlock.java +++ b/common/src/main/java/com/simplexity/simplepms/common/database/objects/PlayerBlock.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.saving.objects; +package com.simplexity.simplepms.common.database.objects; import java.util.UUID; diff --git a/src/main/java/simplexity/simplepms/saving/objects/PlayerSettings.java b/common/src/main/java/com/simplexity/simplepms/common/database/objects/PlayerSettings.java similarity index 95% rename from src/main/java/simplexity/simplepms/saving/objects/PlayerSettings.java rename to common/src/main/java/com/simplexity/simplepms/common/database/objects/PlayerSettings.java index 7edb289..b21568a 100644 --- a/src/main/java/simplexity/simplepms/saving/objects/PlayerSettings.java +++ b/common/src/main/java/com/simplexity/simplepms/common/database/objects/PlayerSettings.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.saving.objects; +package com.simplexity.simplepms.common.database.objects; import java.util.UUID; diff --git a/common/src/main/java/com/simplexity/simplepms/common/logger/Logger.java b/common/src/main/java/com/simplexity/simplepms/common/logger/Logger.java new file mode 100644 index 0000000..b35fac6 --- /dev/null +++ b/common/src/main/java/com/simplexity/simplepms/common/logger/Logger.java @@ -0,0 +1,18 @@ +package com.simplexity.simplepms.common.logger; + +import org.slf4j.LoggerFactory; + +public class Logger { + + private static org.slf4j.Logger logger; + + public static org.slf4j.Logger getLogger() { + if (logger == null) logger = LoggerFactory.getLogger("SimplePMs.common"); + return logger; + } + + public static void setLogger(org.slf4j.Logger logger) { + Logger.logger = logger; + } + +} diff --git a/common/src/main/java/com/simplexity/simplepms/common/logic/LocaleKey.java b/common/src/main/java/com/simplexity/simplepms/common/logic/LocaleKey.java new file mode 100644 index 0000000..3c02a16 --- /dev/null +++ b/common/src/main/java/com/simplexity/simplepms/common/logic/LocaleKey.java @@ -0,0 +1,7 @@ +package com.simplexity.simplepms.common.logic; + +public enum LocaleKey { + + ERROR_NAME_NOT_FOUND + +} diff --git a/common/src/main/java/com/simplexity/simplepms/common/logic/PlatformAdapter.java b/common/src/main/java/com/simplexity/simplepms/common/logic/PlatformAdapter.java new file mode 100644 index 0000000..4b397cd --- /dev/null +++ b/common/src/main/java/com/simplexity/simplepms/common/logic/PlatformAdapter.java @@ -0,0 +1,23 @@ +package com.simplexity.simplepms.common.logic; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.UUID; + +public interface PlatformAdapter { + + /** + * Retrieve the player name based on the player's UUID. + * @param playerUUID Player's UUID + * @return Player's name + */ + @Nullable String getPlayerName(@NotNull UUID playerUUID); + + /** + * Retrieve a locale String from a given {@link LocaleKey} + * @return String defined by the {@link LocaleKey}, null if not found. + */ + @Nullable String getLocaleString(@NotNull LocaleKey key); + +} diff --git a/common/src/main/java/com/simplexity/simplepms/common/logic/PlatformBridge.java b/common/src/main/java/com/simplexity/simplepms/common/logic/PlatformBridge.java new file mode 100644 index 0000000..540f9b6 --- /dev/null +++ b/common/src/main/java/com/simplexity/simplepms/common/logic/PlatformBridge.java @@ -0,0 +1,33 @@ +package com.simplexity.simplepms.common.logic; + +import org.jetbrains.annotations.NotNull; + +public class PlatformBridge { + + private static PlatformAdapter adapter; + + /** + * Sets the platform adapter. + *
+ * Any platform should implement their own version of {@link PlatformAdapter} + * and then call this method. + * @param adapter PlatformAdapter implemented by the platform. + */ + public static void setPlatformAdapter(@NotNull PlatformAdapter adapter) { + PlatformBridge.adapter = adapter; + } + + /** + * Retrieves the platform adapter for use in the common module. + *
+ * {@link #setPlatformAdapter(PlatformAdapter)} should be called + * in the enable step of whatever platform is being used. + * @return PlatformAdapter + * @throws IllegalStateException If the platform adapter was never set before calling any PlatformAdapter methods. + */ + public static @NotNull PlatformAdapter getPlatformAdapter() { + if (adapter == null) throw new IllegalStateException("PlatformAdapter was not initialized."); + return adapter; + } + +} diff --git a/fabric/pom.xml b/fabric/pom.xml new file mode 100644 index 0000000..737d5ce --- /dev/null +++ b/fabric/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + simplexity.simplepms + fabric + 2.4.2 + + + simplexity + SimplePMs + 2.4.2 + + + + ${project.parent.artifactId}-${project.artifactId}-${project.version} + + + + 21 + 21 + UTF-8 + + + + + simplexity.simplepms + common + ${project.parent.version} + + + + \ No newline at end of file diff --git a/paper/pom.xml b/paper/pom.xml new file mode 100644 index 0000000..d59f7dd --- /dev/null +++ b/paper/pom.xml @@ -0,0 +1,114 @@ + + + 4.0.0 + + simplexity.simplepms + paper + 2.4.2 + jar + SimplePMs + + Plugin focused on simple private messaging. + + 17 + UTF-8 + + + + simplexity + SimplePMs + 2.4.2 + + + + ${project.parent.artifactId}-${project.artifactId}-${project.version} + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 21 + 21 + --enable-preview + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + false + + + + mojang + + + + + + *:* + + META-INF/MANIFEST.MF + META-INF/versions/9/module-info.class + + + + + + + + + + + src/main/resources + true + + + + + + + placeholderapi + https://repo.extendedclip.com/content/repositories/placeholderapi/ + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + + + + simplexity.simplepms + common + ${project.parent.version} + + + io.papermc.paper + paper-api + 1.21.10-R0.1-SNAPSHOT + provided + + + me.clip + placeholderapi + 2.11.6 + provided + + + diff --git a/src/main/java/simplexity/simplepms/SimplePMs.java b/paper/src/main/java/simplexity/simplepms/paper/SimplePMs.java similarity index 75% rename from src/main/java/simplexity/simplepms/SimplePMs.java rename to paper/src/main/java/simplexity/simplepms/paper/SimplePMs.java index 0d89f7a..6a21d47 100644 --- a/src/main/java/simplexity/simplepms/SimplePMs.java +++ b/paper/src/main/java/simplexity/simplepms/paper/SimplePMs.java @@ -1,24 +1,27 @@ -package simplexity.simplepms; +package simplexity.simplepms.paper; +import com.simplexity.simplepms.common.logger.Logger; +import com.simplexity.simplepms.common.logic.PlatformBridge; import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; -import simplexity.simplepms.commands.Block; -import simplexity.simplepms.commands.Blocklist; -import simplexity.simplepms.commands.MessageToggle; -import simplexity.simplepms.commands.PrivateMessage; -import simplexity.simplepms.commands.Reload; -import simplexity.simplepms.commands.Reply; -import simplexity.simplepms.commands.SocialSpy; -import simplexity.simplepms.commands.Unblock; -import simplexity.simplepms.config.ConfigHandler; -import simplexity.simplepms.listeners.JoinListener; -import simplexity.simplepms.listeners.PreCommandListener; -import simplexity.simplepms.listeners.QuitListener; -import simplexity.simplepms.logic.Constants; -import simplexity.simplepms.saving.SqlHandler; +import simplexity.simplepms.paper.commands.Block; +import simplexity.simplepms.paper.commands.Blocklist; +import simplexity.simplepms.paper.commands.MessageToggle; +import simplexity.simplepms.paper.commands.PrivateMessage; +import simplexity.simplepms.paper.commands.Reload; +import simplexity.simplepms.paper.commands.Reply; +import simplexity.simplepms.paper.commands.SocialSpy; +import simplexity.simplepms.paper.commands.Unblock; +import simplexity.simplepms.paper.config.ConfigHandler; +import simplexity.simplepms.paper.listeners.JoinListener; +import simplexity.simplepms.paper.listeners.PreCommandListener; +import simplexity.simplepms.paper.listeners.QuitListener; +import simplexity.simplepms.paper.logic.Constants; +import simplexity.simplepms.paper.logic.PaperPlatformAdapter; +import simplexity.simplepms.paper.saving.DatabaseHandler; @SuppressWarnings("UnstableApiUsage") public final class SimplePMs extends JavaPlugin { @@ -28,7 +31,6 @@ public final class SimplePMs extends JavaPlugin { private static boolean papiEnabled = false; private static ConsoleCommandSender consoleSender; - @Override public void onEnable() { instance = this; @@ -37,10 +39,12 @@ public void onEnable() { papiEnabled = true; } loadConfigStuff(); - SqlHandler.getInstance().init(); + DatabaseHandler.getInstance().init(); registerListeners(); registerCommands(); registerPermissions(); + Logger.setLogger(this.getSLF4JLogger()); + PlatformBridge.setPlatformAdapter(new PaperPlatformAdapter()); } private void registerListeners() { @@ -90,7 +94,7 @@ private void registerPermissions() { @Override public void onDisable() { - SqlHandler.getInstance().shutdownConnection(); + DatabaseHandler.getInstance().shutdownConnection(); } public static MiniMessage getMiniMessage() { diff --git a/src/main/java/simplexity/simplepms/commands/Block.java b/paper/src/main/java/simplexity/simplepms/paper/commands/Block.java similarity index 89% rename from src/main/java/simplexity/simplepms/commands/Block.java rename to paper/src/main/java/simplexity/simplepms/paper/commands/Block.java index 6cd3c3a..f5f6279 100644 --- a/src/main/java/simplexity/simplepms/commands/Block.java +++ b/paper/src/main/java/simplexity/simplepms/paper/commands/Block.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.commands; +package simplexity.simplepms.paper.commands; import com.mojang.brigadier.Command; import com.mojang.brigadier.arguments.StringArgumentType; @@ -12,11 +12,11 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import simplexity.simplepms.commands.arguments.OfflinePlayerArgument; -import simplexity.simplepms.commands.util.Exceptions; -import simplexity.simplepms.config.LocaleMessage; -import simplexity.simplepms.logic.BlockHandler; -import simplexity.simplepms.logic.Constants; +import simplexity.simplepms.paper.commands.arguments.OfflinePlayerArgument; +import simplexity.simplepms.paper.commands.util.Exceptions; +import simplexity.simplepms.paper.config.LocaleMessage; +import simplexity.simplepms.paper.logic.BlockHandler; +import simplexity.simplepms.paper.logic.Constants; @SuppressWarnings("UnstableApiUsage") public class Block { diff --git a/src/main/java/simplexity/simplepms/commands/Blocklist.java b/paper/src/main/java/simplexity/simplepms/paper/commands/Blocklist.java similarity index 88% rename from src/main/java/simplexity/simplepms/commands/Blocklist.java rename to paper/src/main/java/simplexity/simplepms/paper/commands/Blocklist.java index de8f826..ebcb985 100644 --- a/src/main/java/simplexity/simplepms/commands/Blocklist.java +++ b/paper/src/main/java/simplexity/simplepms/paper/commands/Blocklist.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.commands; +package simplexity.simplepms.paper.commands; import com.mojang.brigadier.Command; import com.mojang.brigadier.tree.LiteralCommandNode; @@ -8,11 +8,11 @@ import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import org.bukkit.entity.Player; -import simplexity.simplepms.SimplePMs; -import simplexity.simplepms.config.LocaleMessage; -import simplexity.simplepms.logic.Constants; -import simplexity.simplepms.saving.Cache; -import simplexity.simplepms.saving.objects.PlayerBlock; +import simplexity.simplepms.paper.SimplePMs; +import simplexity.simplepms.paper.config.LocaleMessage; +import simplexity.simplepms.paper.logic.Constants; +import com.simplexity.simplepms.common.database.Cache; +import com.simplexity.simplepms.common.database.objects.PlayerBlock; import java.util.List; import java.util.UUID; diff --git a/src/main/java/simplexity/simplepms/commands/MessageToggle.java b/paper/src/main/java/simplexity/simplepms/paper/commands/MessageToggle.java similarity index 84% rename from src/main/java/simplexity/simplepms/commands/MessageToggle.java rename to paper/src/main/java/simplexity/simplepms/paper/commands/MessageToggle.java index 381d0d8..f7a38d3 100644 --- a/src/main/java/simplexity/simplepms/commands/MessageToggle.java +++ b/paper/src/main/java/simplexity/simplepms/paper/commands/MessageToggle.java @@ -1,14 +1,14 @@ -package simplexity.simplepms.commands; +package simplexity.simplepms.paper.commands; import com.mojang.brigadier.Command; import com.mojang.brigadier.tree.LiteralCommandNode; import io.papermc.paper.command.brigadier.CommandSourceStack; import io.papermc.paper.command.brigadier.Commands; import org.bukkit.entity.Player; -import simplexity.simplepms.config.LocaleMessage; -import simplexity.simplepms.logic.Constants; -import simplexity.simplepms.saving.Cache; -import simplexity.simplepms.saving.objects.PlayerSettings; +import simplexity.simplepms.paper.config.LocaleMessage; +import simplexity.simplepms.paper.logic.Constants; +import com.simplexity.simplepms.common.database.Cache; +import com.simplexity.simplepms.common.database.objects.PlayerSettings; import java.util.UUID; diff --git a/src/main/java/simplexity/simplepms/commands/PrivateMessage.java b/paper/src/main/java/simplexity/simplepms/paper/commands/PrivateMessage.java similarity index 88% rename from src/main/java/simplexity/simplepms/commands/PrivateMessage.java rename to paper/src/main/java/simplexity/simplepms/paper/commands/PrivateMessage.java index 977de2a..04c6208 100644 --- a/src/main/java/simplexity/simplepms/commands/PrivateMessage.java +++ b/paper/src/main/java/simplexity/simplepms/paper/commands/PrivateMessage.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.commands; +package simplexity.simplepms.paper.commands; import com.mojang.brigadier.Command; import com.mojang.brigadier.arguments.StringArgumentType; @@ -9,11 +9,11 @@ import io.papermc.paper.command.brigadier.CommandSourceStack; import io.papermc.paper.command.brigadier.Commands; import org.bukkit.command.CommandSender; -import simplexity.simplepms.commands.arguments.Target; -import simplexity.simplepms.commands.arguments.TargetArgument; -import simplexity.simplepms.commands.util.MessageChecks; -import simplexity.simplepms.logic.Constants; -import simplexity.simplepms.logic.PMHandler; +import simplexity.simplepms.paper.commands.arguments.Target; +import simplexity.simplepms.paper.commands.arguments.TargetArgument; +import simplexity.simplepms.paper.commands.util.MessageChecks; +import simplexity.simplepms.paper.logic.Constants; +import simplexity.simplepms.paper.logic.PMHandler; @SuppressWarnings("UnstableApiUsage") public class PrivateMessage { diff --git a/src/main/java/simplexity/simplepms/commands/Reload.java b/paper/src/main/java/simplexity/simplepms/paper/commands/Reload.java similarity index 72% rename from src/main/java/simplexity/simplepms/commands/Reload.java rename to paper/src/main/java/simplexity/simplepms/paper/commands/Reload.java index 9cc8677..23e9201 100644 --- a/src/main/java/simplexity/simplepms/commands/Reload.java +++ b/paper/src/main/java/simplexity/simplepms/paper/commands/Reload.java @@ -1,14 +1,14 @@ -package simplexity.simplepms.commands; +package simplexity.simplepms.paper.commands; import com.mojang.brigadier.Command; import com.mojang.brigadier.tree.LiteralCommandNode; import io.papermc.paper.command.brigadier.CommandSourceStack; import io.papermc.paper.command.brigadier.Commands; import org.bukkit.command.CommandSender; -import simplexity.simplepms.config.ConfigHandler; -import simplexity.simplepms.config.LocaleMessage; -import simplexity.simplepms.logic.Constants; -import simplexity.simplepms.saving.SqlHandler; +import simplexity.simplepms.paper.config.ConfigHandler; +import simplexity.simplepms.paper.config.LocaleMessage; +import simplexity.simplepms.paper.logic.Constants; +import simplexity.simplepms.paper.saving.DatabaseHandler; @SuppressWarnings("UnstableApiUsage") public class Reload { @@ -19,7 +19,7 @@ public static LiteralCommandNode createCommand() { .executes(ctx -> { CommandSender sender = ctx.getSource().getSender(); ConfigHandler.getInstance().loadConfigValues(); - SqlHandler.getInstance().reloadDatabase(); + DatabaseHandler.getInstance().reloadDatabase(); sender.sendRichMessage(LocaleMessage.RELOADED.getMessage()); return Command.SINGLE_SUCCESS; }).build(); diff --git a/src/main/java/simplexity/simplepms/commands/Reply.java b/paper/src/main/java/simplexity/simplepms/paper/commands/Reply.java similarity index 87% rename from src/main/java/simplexity/simplepms/commands/Reply.java rename to paper/src/main/java/simplexity/simplepms/paper/commands/Reply.java index 4b386d2..8da6936 100644 --- a/src/main/java/simplexity/simplepms/commands/Reply.java +++ b/paper/src/main/java/simplexity/simplepms/paper/commands/Reply.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.commands; +package simplexity.simplepms.paper.commands; import com.mojang.brigadier.Command; import com.mojang.brigadier.arguments.StringArgumentType; @@ -9,10 +9,10 @@ import io.papermc.paper.command.brigadier.CommandSourceStack; import io.papermc.paper.command.brigadier.Commands; import org.bukkit.command.CommandSender; -import simplexity.simplepms.commands.util.Exceptions; -import simplexity.simplepms.commands.util.MessageChecks; -import simplexity.simplepms.logic.Constants; -import simplexity.simplepms.logic.PMHandler; +import simplexity.simplepms.paper.commands.util.Exceptions; +import simplexity.simplepms.paper.commands.util.MessageChecks; +import simplexity.simplepms.paper.logic.Constants; +import simplexity.simplepms.paper.logic.PMHandler; @SuppressWarnings("UnstableApiUsage") public class Reply { diff --git a/src/main/java/simplexity/simplepms/commands/SocialSpy.java b/paper/src/main/java/simplexity/simplepms/paper/commands/SocialSpy.java similarity index 81% rename from src/main/java/simplexity/simplepms/commands/SocialSpy.java rename to paper/src/main/java/simplexity/simplepms/paper/commands/SocialSpy.java index 8e805a7..3c12922 100644 --- a/src/main/java/simplexity/simplepms/commands/SocialSpy.java +++ b/paper/src/main/java/simplexity/simplepms/paper/commands/SocialSpy.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.commands; +package simplexity.simplepms.paper.commands; import com.mojang.brigadier.Command; import com.mojang.brigadier.context.CommandContext; @@ -6,10 +6,10 @@ import io.papermc.paper.command.brigadier.CommandSourceStack; import io.papermc.paper.command.brigadier.Commands; import org.bukkit.entity.Player; -import simplexity.simplepms.config.LocaleMessage; -import simplexity.simplepms.logic.Constants; -import simplexity.simplepms.saving.Cache; -import simplexity.simplepms.saving.objects.PlayerSettings; +import simplexity.simplepms.paper.config.LocaleMessage; +import simplexity.simplepms.paper.logic.Constants; +import com.simplexity.simplepms.common.database.Cache; +import com.simplexity.simplepms.common.database.objects.PlayerSettings; import java.util.UUID; @@ -40,12 +40,12 @@ private static int execute(CommandContext ctx) { if (settings == null || settings.isSocialSpyEnabled()) { Cache.updateSocialSpySettings(uuid, false); player.sendRichMessage(LocaleMessage.SOCIAL_SPY_DISABLED.getMessage()); - Cache.getSpyingPlayers().remove(player); + Cache.getSpyingPlayers().remove(player.getUniqueId()); return Command.SINGLE_SUCCESS; } Cache.updateSocialSpySettings(uuid, true); player.sendRichMessage(LocaleMessage.SOCIAL_SPY_ENABLED.getMessage()); - Cache.getSpyingPlayers().add(player); + Cache.getSpyingPlayers().add(player.getUniqueId()); return Command.SINGLE_SUCCESS; } diff --git a/src/main/java/simplexity/simplepms/commands/Unblock.java b/paper/src/main/java/simplexity/simplepms/paper/commands/Unblock.java similarity index 89% rename from src/main/java/simplexity/simplepms/commands/Unblock.java rename to paper/src/main/java/simplexity/simplepms/paper/commands/Unblock.java index 783c7a5..11f1609 100644 --- a/src/main/java/simplexity/simplepms/commands/Unblock.java +++ b/paper/src/main/java/simplexity/simplepms/paper/commands/Unblock.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.commands; +package simplexity.simplepms.paper.commands; import com.mojang.brigadier.Command; import com.mojang.brigadier.arguments.StringArgumentType; @@ -14,12 +14,12 @@ import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import simplexity.simplepms.commands.util.Exceptions; -import simplexity.simplepms.config.LocaleMessage; -import simplexity.simplepms.logic.Constants; -import simplexity.simplepms.logic.UnblockHandler; -import simplexity.simplepms.saving.Cache; -import simplexity.simplepms.saving.objects.PlayerBlock; +import simplexity.simplepms.paper.commands.util.Exceptions; +import simplexity.simplepms.paper.config.LocaleMessage; +import simplexity.simplepms.paper.logic.Constants; +import simplexity.simplepms.paper.logic.UnblockHandler; +import com.simplexity.simplepms.common.database.Cache; +import com.simplexity.simplepms.common.database.objects.PlayerBlock; import java.util.List; import java.util.concurrent.CompletableFuture; diff --git a/src/main/java/simplexity/simplepms/commands/arguments/OfflinePlayerArgument.java b/paper/src/main/java/simplexity/simplepms/paper/commands/arguments/OfflinePlayerArgument.java similarity index 95% rename from src/main/java/simplexity/simplepms/commands/arguments/OfflinePlayerArgument.java rename to paper/src/main/java/simplexity/simplepms/paper/commands/arguments/OfflinePlayerArgument.java index 46c783b..856cbbd 100644 --- a/src/main/java/simplexity/simplepms/commands/arguments/OfflinePlayerArgument.java +++ b/paper/src/main/java/simplexity/simplepms/paper/commands/arguments/OfflinePlayerArgument.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.commands.arguments; +package simplexity.simplepms.paper.commands.arguments; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.arguments.ArgumentType; @@ -15,8 +15,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import simplexity.simplepms.commands.util.Exceptions; -import simplexity.simplepms.config.ConfigHandler; +import simplexity.simplepms.paper.commands.util.Exceptions; +import simplexity.simplepms.paper.config.ConfigHandler; import java.util.concurrent.CompletableFuture; diff --git a/src/main/java/simplexity/simplepms/commands/arguments/Target.java b/paper/src/main/java/simplexity/simplepms/paper/commands/arguments/Target.java similarity index 66% rename from src/main/java/simplexity/simplepms/commands/arguments/Target.java rename to paper/src/main/java/simplexity/simplepms/paper/commands/arguments/Target.java index 52d6abd..2635176 100644 --- a/src/main/java/simplexity/simplepms/commands/arguments/Target.java +++ b/paper/src/main/java/simplexity/simplepms/paper/commands/arguments/Target.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.commands.arguments; +package simplexity.simplepms.paper.commands.arguments; import org.bukkit.command.CommandSender; diff --git a/src/main/java/simplexity/simplepms/commands/arguments/TargetArgument.java b/paper/src/main/java/simplexity/simplepms/paper/commands/arguments/TargetArgument.java similarity index 93% rename from src/main/java/simplexity/simplepms/commands/arguments/TargetArgument.java rename to paper/src/main/java/simplexity/simplepms/paper/commands/arguments/TargetArgument.java index 1f48525..7de36ba 100644 --- a/src/main/java/simplexity/simplepms/commands/arguments/TargetArgument.java +++ b/paper/src/main/java/simplexity/simplepms/paper/commands/arguments/TargetArgument.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.commands.arguments; +package simplexity.simplepms.paper.commands.arguments; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.arguments.ArgumentType; @@ -14,9 +14,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import simplexity.simplepms.SimplePMs; -import simplexity.simplepms.commands.util.Exceptions; -import simplexity.simplepms.config.ConfigHandler; +import simplexity.simplepms.paper.SimplePMs; +import simplexity.simplepms.paper.commands.util.Exceptions; +import simplexity.simplepms.paper.config.ConfigHandler; import java.util.concurrent.CompletableFuture; diff --git a/src/main/java/simplexity/simplepms/commands/util/Exceptions.java b/paper/src/main/java/simplexity/simplepms/paper/commands/util/Exceptions.java similarity index 95% rename from src/main/java/simplexity/simplepms/commands/util/Exceptions.java rename to paper/src/main/java/simplexity/simplepms/paper/commands/util/Exceptions.java index e696907..f307ec1 100644 --- a/src/main/java/simplexity/simplepms/commands/util/Exceptions.java +++ b/paper/src/main/java/simplexity/simplepms/paper/commands/util/Exceptions.java @@ -1,12 +1,12 @@ -package simplexity.simplepms.commands.util; +package simplexity.simplepms.paper.commands.util; import com.mojang.brigadier.exceptions.DynamicCommandExceptionType; import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; import io.papermc.paper.command.brigadier.MessageComponentSerializer; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; -import simplexity.simplepms.SimplePMs; -import simplexity.simplepms.config.LocaleMessage; +import simplexity.simplepms.paper.SimplePMs; +import simplexity.simplepms.paper.config.LocaleMessage; @SuppressWarnings("UnstableApiUsage") public class Exceptions { diff --git a/src/main/java/simplexity/simplepms/commands/util/MessageChecks.java b/paper/src/main/java/simplexity/simplepms/paper/commands/util/MessageChecks.java similarity index 90% rename from src/main/java/simplexity/simplepms/commands/util/MessageChecks.java rename to paper/src/main/java/simplexity/simplepms/paper/commands/util/MessageChecks.java index 48b191e..e4d95f6 100644 --- a/src/main/java/simplexity/simplepms/commands/util/MessageChecks.java +++ b/paper/src/main/java/simplexity/simplepms/paper/commands/util/MessageChecks.java @@ -1,13 +1,13 @@ -package simplexity.simplepms.commands.util; +package simplexity.simplepms.paper.commands.util; import com.mojang.brigadier.exceptions.CommandSyntaxException; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import simplexity.simplepms.config.ConfigHandler; -import simplexity.simplepms.logic.Constants; -import simplexity.simplepms.saving.Cache; -import simplexity.simplepms.saving.objects.PlayerBlock; -import simplexity.simplepms.saving.objects.PlayerSettings; +import simplexity.simplepms.paper.config.ConfigHandler; +import simplexity.simplepms.paper.logic.Constants; +import com.simplexity.simplepms.common.database.Cache; +import com.simplexity.simplepms.common.database.objects.PlayerBlock; +import com.simplexity.simplepms.common.database.objects.PlayerSettings; import java.util.List; diff --git a/src/main/java/simplexity/simplepms/config/ConfigHandler.java b/paper/src/main/java/simplexity/simplepms/paper/config/ConfigHandler.java similarity index 98% rename from src/main/java/simplexity/simplepms/config/ConfigHandler.java rename to paper/src/main/java/simplexity/simplepms/paper/config/ConfigHandler.java index 8940e2d..d99d350 100644 --- a/src/main/java/simplexity/simplepms/config/ConfigHandler.java +++ b/paper/src/main/java/simplexity/simplepms/paper/config/ConfigHandler.java @@ -1,11 +1,12 @@ -package simplexity.simplepms.config; +package simplexity.simplepms.paper.config; import org.bukkit.NamespacedKey; import org.bukkit.Registry; import org.bukkit.Sound; import org.bukkit.configuration.file.FileConfiguration; import org.jetbrains.annotations.NotNull; -import simplexity.simplepms.SimplePMs; +import simplexity.simplepms.paper.SimplePMs; +import simplexity.simplepms.paper.saving.DatabaseHandler; import java.util.ArrayList; import java.util.HashSet; @@ -112,7 +113,6 @@ private void validateConsoleNames(List list) { } } - public boolean isMysqlEnabled() { return mysqlEnabled; } diff --git a/src/main/java/simplexity/simplepms/config/LocaleHandler.java b/paper/src/main/java/simplexity/simplepms/paper/config/LocaleHandler.java similarity index 96% rename from src/main/java/simplexity/simplepms/config/LocaleHandler.java rename to paper/src/main/java/simplexity/simplepms/paper/config/LocaleHandler.java index 2d6363e..8f92060 100644 --- a/src/main/java/simplexity/simplepms/config/LocaleHandler.java +++ b/paper/src/main/java/simplexity/simplepms/paper/config/LocaleHandler.java @@ -1,9 +1,9 @@ -package simplexity.simplepms.config; +package simplexity.simplepms.paper.config; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import simplexity.simplepms.SimplePMs; +import simplexity.simplepms.paper.SimplePMs; import java.io.File; import java.io.IOException; diff --git a/src/main/java/simplexity/simplepms/config/LocaleMessage.java b/paper/src/main/java/simplexity/simplepms/paper/config/LocaleMessage.java similarity index 99% rename from src/main/java/simplexity/simplepms/config/LocaleMessage.java rename to paper/src/main/java/simplexity/simplepms/paper/config/LocaleMessage.java index 6499972..396bbb5 100644 --- a/src/main/java/simplexity/simplepms/config/LocaleMessage.java +++ b/paper/src/main/java/simplexity/simplepms/paper/config/LocaleMessage.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.config; +package simplexity.simplepms.paper.config; public enum LocaleMessage { CONSOLE_SENDER_NAME("console.name", "[Server]"), diff --git a/src/main/java/simplexity/simplepms/events/BlockUserEvent.java b/paper/src/main/java/simplexity/simplepms/paper/events/BlockUserEvent.java similarity index 99% rename from src/main/java/simplexity/simplepms/events/BlockUserEvent.java rename to paper/src/main/java/simplexity/simplepms/paper/events/BlockUserEvent.java index d2ddf64..b78aa5d 100644 --- a/src/main/java/simplexity/simplepms/events/BlockUserEvent.java +++ b/paper/src/main/java/simplexity/simplepms/paper/events/BlockUserEvent.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.events; +package simplexity.simplepms.paper.events; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; diff --git a/src/main/java/simplexity/simplepms/events/PrivateMessageEvent.java b/paper/src/main/java/simplexity/simplepms/paper/events/PrivateMessageEvent.java similarity index 98% rename from src/main/java/simplexity/simplepms/events/PrivateMessageEvent.java rename to paper/src/main/java/simplexity/simplepms/paper/events/PrivateMessageEvent.java index 498a913..6b80c44 100644 --- a/src/main/java/simplexity/simplepms/events/PrivateMessageEvent.java +++ b/paper/src/main/java/simplexity/simplepms/paper/events/PrivateMessageEvent.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.events; +package simplexity.simplepms.paper.events; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/src/main/java/simplexity/simplepms/events/UnblockUserEvent.java b/paper/src/main/java/simplexity/simplepms/paper/events/UnblockUserEvent.java similarity index 98% rename from src/main/java/simplexity/simplepms/events/UnblockUserEvent.java rename to paper/src/main/java/simplexity/simplepms/paper/events/UnblockUserEvent.java index fc91969..a62abc7 100644 --- a/src/main/java/simplexity/simplepms/events/UnblockUserEvent.java +++ b/paper/src/main/java/simplexity/simplepms/paper/events/UnblockUserEvent.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.events; +package simplexity.simplepms.paper.events; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; diff --git a/src/main/java/simplexity/simplepms/listeners/JoinListener.java b/paper/src/main/java/simplexity/simplepms/paper/listeners/JoinListener.java similarity index 62% rename from src/main/java/simplexity/simplepms/listeners/JoinListener.java rename to paper/src/main/java/simplexity/simplepms/paper/listeners/JoinListener.java index f168329..178246f 100644 --- a/src/main/java/simplexity/simplepms/listeners/JoinListener.java +++ b/paper/src/main/java/simplexity/simplepms/paper/listeners/JoinListener.java @@ -1,11 +1,11 @@ -package simplexity.simplepms.listeners; +package simplexity.simplepms.paper.listeners; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; -import simplexity.simplepms.logic.Constants; -import simplexity.simplepms.saving.Cache; +import simplexity.simplepms.paper.logic.Constants; +import com.simplexity.simplepms.common.database.Cache; import java.util.UUID; @@ -15,6 +15,6 @@ public class JoinListener implements Listener { public void onLogin(PlayerJoinEvent joinEvent) { Player player = joinEvent.getPlayer(); UUID playerUuid = player.getUniqueId(); - Cache.populateCache(playerUuid, player, player.hasPermission(Constants.ADMIN_SOCIAL_SPY)); + Cache.populateCache(playerUuid, player.hasPermission(Constants.ADMIN_SOCIAL_SPY)); } } diff --git a/src/main/java/simplexity/simplepms/listeners/PreCommandListener.java b/paper/src/main/java/simplexity/simplepms/paper/listeners/PreCommandListener.java similarity index 83% rename from src/main/java/simplexity/simplepms/listeners/PreCommandListener.java rename to paper/src/main/java/simplexity/simplepms/paper/listeners/PreCommandListener.java index 3fb8efa..5282d12 100644 --- a/src/main/java/simplexity/simplepms/listeners/PreCommandListener.java +++ b/paper/src/main/java/simplexity/simplepms/paper/listeners/PreCommandListener.java @@ -1,11 +1,11 @@ -package simplexity.simplepms.listeners; +package simplexity.simplepms.paper.listeners; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import simplexity.simplepms.config.ConfigHandler; -import simplexity.simplepms.logic.SpyHandler; +import simplexity.simplepms.paper.config.ConfigHandler; +import simplexity.simplepms.paper.logic.SpyHandler; public class PreCommandListener implements Listener { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) diff --git a/src/main/java/simplexity/simplepms/listeners/QuitListener.java b/paper/src/main/java/simplexity/simplepms/paper/listeners/QuitListener.java similarity index 81% rename from src/main/java/simplexity/simplepms/listeners/QuitListener.java rename to paper/src/main/java/simplexity/simplepms/paper/listeners/QuitListener.java index a7b552c..4e5da54 100644 --- a/src/main/java/simplexity/simplepms/listeners/QuitListener.java +++ b/paper/src/main/java/simplexity/simplepms/paper/listeners/QuitListener.java @@ -1,9 +1,9 @@ -package simplexity.simplepms.listeners; +package simplexity.simplepms.paper.listeners; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerQuitEvent; -import simplexity.simplepms.saving.Cache; +import com.simplexity.simplepms.common.database.Cache; public class QuitListener implements Listener { @EventHandler diff --git a/src/main/java/simplexity/simplepms/logic/BlockHandler.java b/paper/src/main/java/simplexity/simplepms/paper/logic/BlockHandler.java similarity index 83% rename from src/main/java/simplexity/simplepms/logic/BlockHandler.java rename to paper/src/main/java/simplexity/simplepms/paper/logic/BlockHandler.java index d8349c5..684525e 100644 --- a/src/main/java/simplexity/simplepms/logic/BlockHandler.java +++ b/paper/src/main/java/simplexity/simplepms/paper/logic/BlockHandler.java @@ -1,12 +1,12 @@ -package simplexity.simplepms.logic; +package simplexity.simplepms.paper.logic; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import simplexity.simplepms.SimplePMs; -import simplexity.simplepms.events.BlockUserEvent; -import simplexity.simplepms.saving.Cache; -import simplexity.simplepms.saving.objects.PlayerBlock; +import simplexity.simplepms.paper.SimplePMs; +import simplexity.simplepms.paper.events.BlockUserEvent; +import com.simplexity.simplepms.common.database.Cache; +import com.simplexity.simplepms.common.database.objects.PlayerBlock; import javax.annotation.Nullable; diff --git a/src/main/java/simplexity/simplepms/logic/Constants.java b/paper/src/main/java/simplexity/simplepms/paper/logic/Constants.java similarity index 98% rename from src/main/java/simplexity/simplepms/logic/Constants.java rename to paper/src/main/java/simplexity/simplepms/paper/logic/Constants.java index c89439e..d7d4850 100644 --- a/src/main/java/simplexity/simplepms/logic/Constants.java +++ b/paper/src/main/java/simplexity/simplepms/paper/logic/Constants.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.logic; +package simplexity.simplepms.paper.logic; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; diff --git a/src/main/java/simplexity/simplepms/logic/MessageUtils.java b/paper/src/main/java/simplexity/simplepms/paper/logic/MessageUtils.java similarity index 95% rename from src/main/java/simplexity/simplepms/logic/MessageUtils.java rename to paper/src/main/java/simplexity/simplepms/paper/logic/MessageUtils.java index eb5466c..c0708f6 100644 --- a/src/main/java/simplexity/simplepms/logic/MessageUtils.java +++ b/paper/src/main/java/simplexity/simplepms/paper/logic/MessageUtils.java @@ -1,4 +1,4 @@ -package simplexity.simplepms.logic; +package simplexity.simplepms.paper.logic; import me.clip.placeholderapi.PlaceholderAPI; import net.kyori.adventure.text.Component; @@ -10,9 +10,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import simplexity.simplepms.SimplePMs; -import simplexity.simplepms.config.ConfigHandler; -import simplexity.simplepms.config.LocaleMessage; +import simplexity.simplepms.paper.SimplePMs; +import simplexity.simplepms.paper.config.ConfigHandler; +import simplexity.simplepms.paper.config.LocaleMessage; public class MessageUtils { private static MessageUtils instance; diff --git a/src/main/java/simplexity/simplepms/logic/PMHandler.java b/paper/src/main/java/simplexity/simplepms/paper/logic/PMHandler.java similarity index 83% rename from src/main/java/simplexity/simplepms/logic/PMHandler.java rename to paper/src/main/java/simplexity/simplepms/paper/logic/PMHandler.java index ca17c7b..5f841b0 100644 --- a/src/main/java/simplexity/simplepms/logic/PMHandler.java +++ b/paper/src/main/java/simplexity/simplepms/paper/logic/PMHandler.java @@ -1,16 +1,19 @@ -package simplexity.simplepms.logic; +package simplexity.simplepms.paper.logic; +import org.bukkit.Bukkit; import org.bukkit.Registry; import org.bukkit.Sound; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import simplexity.simplepms.SimplePMs; -import simplexity.simplepms.config.ConfigHandler; -import simplexity.simplepms.config.LocaleMessage; -import simplexity.simplepms.events.PrivateMessageEvent; -import simplexity.simplepms.saving.Cache; +import simplexity.simplepms.paper.SimplePMs; +import simplexity.simplepms.paper.config.ConfigHandler; +import simplexity.simplepms.paper.config.LocaleMessage; +import simplexity.simplepms.paper.events.PrivateMessageEvent; +import com.simplexity.simplepms.common.database.Cache; import java.util.HashMap; +import java.util.Set; +import java.util.stream.Collectors; public class PMHandler { public static final HashMap lastMessaged = new HashMap<>(); @@ -60,7 +63,8 @@ private static void handleMessageReceive(CommandSender initiator, CommandSender private static PrivateMessageEvent callPMEvent(CommandSender initiator, CommandSender target, String messageContent) { - PrivateMessageEvent messageEvent = new PrivateMessageEvent(initiator, target, messageContent, Cache.getSpyingPlayers()); + Set spyingPlayers = Cache.getSpyingPlayers().stream().map(Bukkit::getPlayer).collect(Collectors.toSet()); + PrivateMessageEvent messageEvent = new PrivateMessageEvent(initiator, target, messageContent, spyingPlayers); SimplePMs.getInstance().getServer().getPluginManager().callEvent(messageEvent); return messageEvent; } diff --git a/paper/src/main/java/simplexity/simplepms/paper/logic/PaperPlatformAdapter.java b/paper/src/main/java/simplexity/simplepms/paper/logic/PaperPlatformAdapter.java new file mode 100644 index 0000000..e7ad11f --- /dev/null +++ b/paper/src/main/java/simplexity/simplepms/paper/logic/PaperPlatformAdapter.java @@ -0,0 +1,27 @@ +package simplexity.simplepms.paper.logic; + +import com.simplexity.simplepms.common.logic.LocaleKey; +import com.simplexity.simplepms.common.logic.PlatformAdapter; +import org.bukkit.Bukkit; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import simplexity.simplepms.paper.config.LocaleMessage; + +import java.util.UUID; + +public class PaperPlatformAdapter implements PlatformAdapter { + @Override + public String getPlayerName(@NotNull UUID playerUUID) { + return Bukkit.getOfflinePlayer(playerUUID).getName(); + } + + @Override + public @Nullable String getLocaleString(@NotNull LocaleKey key) { + return switch (key) { + case ERROR_NAME_NOT_FOUND -> LocaleMessage.ERROR_NAME_NOT_FOUND.getMessage(); + default -> null; + }; + } + + +} diff --git a/src/main/java/simplexity/simplepms/logic/SpyHandler.java b/paper/src/main/java/simplexity/simplepms/paper/logic/SpyHandler.java similarity index 85% rename from src/main/java/simplexity/simplepms/logic/SpyHandler.java rename to paper/src/main/java/simplexity/simplepms/paper/logic/SpyHandler.java index 5847f8f..4e524e9 100644 --- a/src/main/java/simplexity/simplepms/logic/SpyHandler.java +++ b/paper/src/main/java/simplexity/simplepms/paper/logic/SpyHandler.java @@ -1,15 +1,19 @@ -package simplexity.simplepms.logic; +package simplexity.simplepms.paper.logic; import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; import org.bukkit.Registry; import org.bukkit.Sound; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import simplexity.simplepms.SimplePMs; -import simplexity.simplepms.config.ConfigHandler; -import simplexity.simplepms.config.LocaleMessage; -import simplexity.simplepms.events.PrivateMessageEvent; -import simplexity.simplepms.saving.Cache; +import simplexity.simplepms.paper.SimplePMs; +import simplexity.simplepms.paper.config.ConfigHandler; +import simplexity.simplepms.paper.config.LocaleMessage; +import simplexity.simplepms.paper.events.PrivateMessageEvent; +import com.simplexity.simplepms.common.database.Cache; + +import java.util.Set; +import java.util.stream.Collectors; public class SpyHandler { @@ -23,7 +27,8 @@ public static void sendCommandSpy(CommandSender initiator, String command, Strin console.sendMessage(parsedMessage); } if (initiator.hasPermission(Constants.BYPASS_COMMAND_SPY)) return; - for (Player spyingPlayer : Cache.getSpyingPlayers()) { + Set spyingPlayers = Cache.getSpyingPlayers().stream().map(Bukkit::getPlayer).collect(Collectors.toSet()); + for (Player spyingPlayer : spyingPlayers) { if (initiator.equals(spyingPlayer)) continue; if (!spyingPlayer.hasPermission(Constants.ADMIN_SOCIAL_SPY)) continue; spyingPlayer.sendMessage(parsedMessage); diff --git a/src/main/java/simplexity/simplepms/logic/UnblockHandler.java b/paper/src/main/java/simplexity/simplepms/paper/logic/UnblockHandler.java similarity index 83% rename from src/main/java/simplexity/simplepms/logic/UnblockHandler.java rename to paper/src/main/java/simplexity/simplepms/paper/logic/UnblockHandler.java index 4b71693..eabf2db 100644 --- a/src/main/java/simplexity/simplepms/logic/UnblockHandler.java +++ b/paper/src/main/java/simplexity/simplepms/paper/logic/UnblockHandler.java @@ -1,13 +1,13 @@ -package simplexity.simplepms.logic; +package simplexity.simplepms.paper.logic; import com.mojang.brigadier.exceptions.CommandSyntaxException; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import simplexity.simplepms.commands.util.Exceptions; -import simplexity.simplepms.events.UnblockUserEvent; -import simplexity.simplepms.saving.Cache; -import simplexity.simplepms.saving.objects.PlayerBlock; +import simplexity.simplepms.paper.commands.util.Exceptions; +import simplexity.simplepms.paper.events.UnblockUserEvent; +import com.simplexity.simplepms.common.database.Cache; +import com.simplexity.simplepms.common.database.objects.PlayerBlock; import java.util.List; import java.util.UUID; diff --git a/paper/src/main/java/simplexity/simplepms/paper/saving/DatabaseHandler.java b/paper/src/main/java/simplexity/simplepms/paper/saving/DatabaseHandler.java new file mode 100644 index 0000000..aa318f1 --- /dev/null +++ b/paper/src/main/java/simplexity/simplepms/paper/saving/DatabaseHandler.java @@ -0,0 +1,81 @@ +package simplexity.simplepms.paper.saving; + +import com.simplexity.simplepms.common.database.SQLHandler; +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; +import simplexity.simplepms.paper.SimplePMs; +import simplexity.simplepms.paper.config.ConfigHandler; +import com.simplexity.simplepms.common.database.objects.PlayerBlock; +import com.simplexity.simplepms.common.database.objects.PlayerSettings; + +import java.util.List; +import java.util.UUID; +import java.util.concurrent.CompletableFuture; + +@SuppressWarnings({"SqlResolve", "StringTemplateMigration", "SameParameterValue"}) +public class DatabaseHandler { + + private DatabaseHandler() { } + + private static DatabaseHandler instance; + + public static DatabaseHandler getInstance() { + if (instance == null) instance = new DatabaseHandler(); + return instance; + } + + private static final Plugin plugin = SimplePMs.getInstance(); + + public void init() { + setupConfig(); + SQLHandler.setUsingMySQL(ConfigHandler.getInstance().isMysqlEnabled()); + SQLHandler.getInstance().init(); + } + + public void reloadDatabase() { + shutdownConnection(); + setupConfig(); + } + + public CompletableFuture getSettings(UUID playerUUID) { + return CompletableFuture.supplyAsync(() -> SQLHandler.getInstance().getSettings(playerUUID)); + } + + public CompletableFuture> getBlockedPlayers(UUID playerUUID) { + return CompletableFuture.supplyAsync(() -> SQLHandler.getInstance().getBlockedPlayers(playerUUID)); + } + + public void addBlockedPlayer(UUID playerUUID, UUID blockedPlayerUUID, String blockedPlayerName, String reason) { + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> SQLHandler.getInstance().addBlockedPlayer(playerUUID, blockedPlayerUUID, blockedPlayerName, reason)); + } + + public void removeBlockedPlayer(UUID playerUUID, UUID blockedPlayerUUID) { + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> SQLHandler.getInstance().removeBlockedPlayer(playerUUID, blockedPlayerUUID)); + } + + public void updateSettings(UUID playerUUID, boolean socialSpyEnabled, boolean messagesDisabled) { + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> SQLHandler.getInstance().updateSettings(playerUUID, socialSpyEnabled, messagesDisabled)); + + } + + private void setupConfig() { + if (ConfigHandler.getInstance().isMysqlEnabled()) { + SQLHandler.getInstance().setupConfig( + "jdbc:mysql://" + ConfigHandler.getInstance().getMysqlIp() + "/" + ConfigHandler.getInstance().getMysqlName(), + ConfigHandler.getInstance().getMysqlUsername(), + ConfigHandler.getInstance().getMysqlPassword() + ); + } + else { + SQLHandler.getInstance().setupConfig( + "jdbc:sqlite:" + SimplePMs.getInstance().getDataFolder() + "/simple-pms.db", + null, + null + ); + } + } + + public void shutdownConnection() { + SQLHandler.getInstance().shutdownConnection(); + } +} diff --git a/src/main/resources/config.yml b/paper/src/main/resources/config.yml similarity index 100% rename from src/main/resources/config.yml rename to paper/src/main/resources/config.yml diff --git a/src/main/resources/paper-plugin.yml b/paper/src/main/resources/paper-plugin.yml similarity index 82% rename from src/main/resources/paper-plugin.yml rename to paper/src/main/resources/paper-plugin.yml index b7235b7..b35855c 100644 --- a/src/main/resources/paper-plugin.yml +++ b/paper/src/main/resources/paper-plugin.yml @@ -1,6 +1,6 @@ name: SimplePMs version: '${project.version}' -main: simplexity.simplepms.SimplePMs +main: simplexity.simplepms.paper.SimplePMs api-version: 1.20.6 description: Plugin focused on simple private messaging. dependencies: diff --git a/pom.xml b/pom.xml index a5f29eb..076f882 100644 --- a/pom.xml +++ b/pom.xml @@ -1,99 +1,25 @@ - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 + http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 simplexity SimplePMs 2.4.3 - jar + pom - SimplePMs + + common + paper + fabric + + SimplePMs Plugin focused on simple private messaging. + 17 UTF-8 - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - 21 - 21 - --enable-preview - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.4 - - - package - - shade - - - false - - - - mojang - - - - - - - - - - - src/main/resources - true - - - - - - - placeholderapi - https://repo.extendedclip.com/content/repositories/placeholderapi/ - - - papermc-repo - https://repo.papermc.io/repository/maven-public/ - - - sonatype - https://oss.sonatype.org/content/groups/public/ - - - - - - io.papermc.paper - paper-api - 1.20.6-R0.1-SNAPSHOT - provided - - - me.clip - placeholderapi - 2.11.6 - provided - - - com.zaxxer - HikariCP - 6.3.0 - - diff --git a/src/main/java/simplexity/simplepms/saving/SqlHandler.java b/src/main/java/simplexity/simplepms/saving/SqlHandler.java deleted file mode 100644 index d498c9e..0000000 --- a/src/main/java/simplexity/simplepms/saving/SqlHandler.java +++ /dev/null @@ -1,262 +0,0 @@ -package simplexity.simplepms.saving; - -import com.zaxxer.hikari.HikariConfig; -import com.zaxxer.hikari.HikariDataSource; -import org.bukkit.Bukkit; -import org.bukkit.plugin.Plugin; -import org.slf4j.Logger; -import simplexity.simplepms.SimplePMs; -import simplexity.simplepms.config.ConfigHandler; -import simplexity.simplepms.saving.objects.PlayerBlock; -import simplexity.simplepms.saving.objects.PlayerSettings; - -import java.sql.Connection; -import java.sql.DatabaseMetaData; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; - -@SuppressWarnings({"CallToPrintStackTrace", "SqlResolve", "StringTemplateMigration", "SameParameterValue"}) -public class SqlHandler { - - private SqlHandler() { - } - - private static SqlHandler instance; - - public static SqlHandler getInstance() { - if (instance == null) { - instance = new SqlHandler(); - } - return instance; - } - - - private static final HikariConfig hikariConfig = new HikariConfig(); - private static HikariDataSource dataSource; - private static final Plugin plugin = SimplePMs.getInstance(); - private final Logger logger = SimplePMs.getInstance().getSLF4JLogger(); - - - public void init() { - setupConfig(); - try (Connection connection = getConnection()) { - PreparedStatement blocklistInitStatement = connection.prepareStatement(""" - CREATE TABLE IF NOT EXISTS blocklist ( - player_uuid VARCHAR (36) NOT NULL, - blocked_player_uuid VARCHAR(36) NOT NULL, - blocked_player_name VARCHAR(256), - block_reason VARCHAR(256), - PRIMARY KEY (player_uuid, blocked_player_uuid) - );"""); - blocklistInitStatement.execute(); - PreparedStatement playerSettingsInitStatement = connection.prepareStatement(""" - CREATE TABLE IF NOT EXISTS settings ( - player_uuid VARCHAR (36) NOT NULL PRIMARY KEY, - socialspy_enabled BOOLEAN NOT NULL, - messages_disabled BOOLEAN NOT NULL - );"""); - playerSettingsInitStatement.execute(); - updateDatabaseColumns().join(); - } catch (SQLException e) { - logger.warn("Failed to connect to database: {}", e.getMessage(), e); - } - } - - public void reloadDatabase() { - logger.info("Reconnecting to SimplePMs database..."); - shutdownConnection(); - setupConfig(); - logger.info("Database reloaded successfully"); - } - - - public CompletableFuture getSettings(UUID playerUUID) { - return CompletableFuture.supplyAsync(() -> { - String queryString = "SELECT socialspy_enabled, messages_disabled FROM settings WHERE player_uuid = ?;"; - PlayerSettings settings = null; - try (Connection connection = getConnection()) { - PreparedStatement statement = connection.prepareStatement(queryString); - statement.setString(1, String.valueOf(playerUUID)); - try (ResultSet resultSet = statement.executeQuery()) { - if (!resultSet.next()) { - settings = new PlayerSettings(playerUUID); - updateSettings(playerUUID, settings.isSocialSpyEnabled(), settings.areMessagesDisabled()); - } else { - boolean socialSpy = resultSet.getBoolean("socialspy_enabled"); - boolean messagesDisabled = resultSet.getBoolean("messages_disabled"); - settings = new PlayerSettings(playerUUID, socialSpy, messagesDisabled); - } - } - } catch (SQLException e) { - logger.warn("Failed to retrieve settings from database: {}", e.getMessage(), e); - } - return settings; - }); - } - - public CompletableFuture> getBlockedPlayers(UUID playerUUID) { - return CompletableFuture.supplyAsync(() -> { - String queryString = "SELECT blocked_player_uuid, block_reason, blocked_player_name from blocklist WHERE player_uuid = ?;"; - List blockedPlayers = new ArrayList<>(); - try (Connection connection = getConnection()) { - PreparedStatement statement = connection.prepareStatement(queryString); - statement.setString(1, String.valueOf(playerUUID)); - try (ResultSet resultSet = statement.executeQuery()) { - while (resultSet.next()) { - UUID blockedPlayerUUID = UUID.fromString(resultSet.getString("blocked_player_uuid")); - String blockedPlayerName = resultSet.getString("blocked_player_name"); - String reason = resultSet.getString("block_reason"); - PlayerBlock block = new PlayerBlock(playerUUID, blockedPlayerName, blockedPlayerUUID, reason); - blockedPlayers.add(block); - } - } - } catch (SQLException e) { - logger.warn("Failed to get blocked players: {}", e.getMessage(), e); - } - return blockedPlayers; - }); - } - - public void addBlockedPlayer(UUID playerUUID, UUID blockedPlayerUUID, String blockedPlayerName, String reason) { - Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { - String queryString = "REPLACE INTO blocklist (player_uuid, blocked_player_uuid, blocked_player_name, block_reason) VALUES (?, ?, ?, ?);"; - try (Connection connection = getConnection()) { - PreparedStatement statement = connection.prepareStatement(queryString); - statement.setString(1, String.valueOf(playerUUID)); - statement.setString(2, String.valueOf(blockedPlayerUUID)); - statement.setString(3, blockedPlayerName); - statement.setString(4, reason); - statement.executeUpdate(); - } catch (SQLException e) { - logger.warn("Failed to add blocked player: {}", e.getMessage(), e); - e.printStackTrace(); - } - }); - } - - public void removeBlockedPlayer(UUID playerUUID, UUID blockedPlayerUUID) { - Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { - String queryString = "DELETE FROM blocklist WHERE player_uuid = ? and blocked_player_uuid = ?;"; - try (Connection connection = getConnection()) { - PreparedStatement statement = connection.prepareStatement(queryString); - statement.setString(1, String.valueOf(playerUUID)); - statement.setString(2, String.valueOf(blockedPlayerUUID)); - statement.executeUpdate(); - } catch (SQLException e) { - logger.warn("Failed to remove blocked player: {}", e.getMessage(), e); - } - }); - } - - public void updateSettings(UUID playerUUID, boolean socialSpyEnabled, boolean messagesDisabled) { - Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { - String queryString = "REPLACE INTO settings (player_uuid, socialspy_enabled, messages_disabled) VALUES (?, ?, ?);"; - try (Connection connection = getConnection()) { - PreparedStatement statement = connection.prepareStatement(queryString); - statement.setString(1, String.valueOf(playerUUID)); - statement.setBoolean(2, socialSpyEnabled); - statement.setBoolean(3, messagesDisabled); - statement.executeUpdate(); - } catch (SQLException e) { - logger.warn("Failed to update settings to database: {}", e.getMessage(), e); - } - }); - - } - - private CompletableFuture updateDatabaseColumns() { - return CompletableFuture.supplyAsync(() -> { - String tableName = "blocklist"; - String columnName = "blocked_player_name"; - boolean columnExists; - try { - if (ConfigHandler.getInstance().isMysqlEnabled()) { - columnExists = doesMysqlColumnExist(tableName, columnName).get(); - } else { - columnExists = doesSqliteColumnExist(tableName, columnName).get(); - } - if (!columnExists) { - addColumn(tableName, columnName, "VARCHAR(256)", ""); - } - } catch (Exception e) { - logger.warn("Unable to update database table: {} column: {}, error: {}", tableName, columnName, e.getMessage(), e); - return false; - } - return true; - }); - } - - private CompletableFuture doesSqliteColumnExist(String tableName, String columnName) { - return CompletableFuture.supplyAsync(() -> { - String query = "PRAGMA table_info(" + tableName + ")"; - try (Connection connection = getConnection()) { - PreparedStatement statement = connection.prepareStatement(query); - ResultSet resultSet = statement.executeQuery(); - while (resultSet.next()) { - if (columnName.equalsIgnoreCase(resultSet.getString("name"))) { - return true; - } - } - } catch (SQLException e) { - logger.warn("Failed to to check for column {} in table {}: {}", columnName, tableName, e.getMessage(), e); - } - return false; - }); - } - - private CompletableFuture doesMysqlColumnExist(String tableName, String columnName) { - return CompletableFuture.supplyAsync(() -> { - try (Connection connection = getConnection()) { - DatabaseMetaData metaData = connection.getMetaData(); - ResultSet resultSet = metaData.getColumns(null, null, tableName, columnName); - return resultSet.next(); - } catch (SQLException e) { - logger.warn("Failed to check for column {} in table {}: {}", columnName, tableName, e.getMessage(), e); - } - return false; - }); - } - - // Possibly extremely cursed way to do this :cackle: - - private void addColumn(String tableName, String columnName, String dataType, String constraints) { - String query = String.format("ALTER TABLE %s ADD COLUMN %s %s %s;", tableName, columnName, dataType, constraints); - try (Connection connection = getConnection()) { - PreparedStatement statement = connection.prepareStatement(query); - statement.executeUpdate(); - logger.info("Added new column '{}' to table '{}'", columnName, tableName); - } catch (SQLException e) { - logger.warn("Failed to add new column {} to table {}: {}", columnName, tableName, e.getMessage(), e); - } - } - - - private void setupConfig() { - if (!ConfigHandler.getInstance().isMysqlEnabled()) { - hikariConfig.setJdbcUrl("jdbc:sqlite:" + SimplePMs.getInstance().getDataFolder() + "/simple-pms.db"); - hikariConfig.setConnectionTestQuery("PRAGMA journal_mode = WAL;"); - dataSource = new HikariDataSource(hikariConfig); - return; - } - hikariConfig.setJdbcUrl("jdbc:mysql://" + ConfigHandler.getInstance().getMysqlIp() + "/" + ConfigHandler.getInstance().getMysqlName()); - hikariConfig.setUsername(ConfigHandler.getInstance().getMysqlUsername()); - hikariConfig.setPassword(ConfigHandler.getInstance().getMysqlPassword()); - dataSource = new HikariDataSource(hikariConfig); - } - - private static Connection getConnection() throws SQLException { - return dataSource.getConnection(); - } - - public void shutdownConnection() { - if (dataSource == null || dataSource.isClosed()) return; - dataSource.close(); - dataSource = null; - logger.info("Closed existing database connection"); - } -}