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");
- }
-}