diff --git a/build.gradle.kts b/build.gradle.kts index 98b7bc7..b82de50 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -21,6 +21,7 @@ dependencies { implementation(libs.storage.mysql) implementation(libs.storage.maria) implementation(libs.storage.sqlite) + implementation(libs.storage.postgresql) implementation(libs.storage.hikari) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0b4528d..3f07689 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,9 +8,10 @@ litebans = "0.5.0" luckperms = "5.4" yaml = "1.7.2" -mysql = "8.0.29" +mysql = "8.0.33" maria = "3.3.3" -sqlite = "3.41.2.2" +sqlite = "3.45.2.0" +postgresql = "42.7.3" hikari = "5.1.0" [libraries] @@ -23,6 +24,7 @@ storage-yaml = { module = "me.carleslc.Simple-YAML:Simple-Yaml", version.ref = " storage-mysql = { module = "mysql:mysql-connector-java", version.ref = "mysql" } storage-maria = { module = "org.mariadb.jdbc:mariadb-java-client", version.ref = "maria" } storage-sqlite = { module = "org.xerial:sqlite-jdbc", version.ref = "sqlite" } +storage-postgresql = { module = "org.postgresql:postgresql", version.ref = "postgresql" } storage-hikari = { module = "com.zaxxer:HikariCP", version.ref = "hikari" } [plugins] diff --git a/src/main/java/com/mattmx/reconnect/ReconnectConfig.java b/src/main/java/com/mattmx/reconnect/ReconnectConfig.java index 056c032..4cda67f 100644 --- a/src/main/java/com/mattmx/reconnect/ReconnectConfig.java +++ b/src/main/java/com/mattmx/reconnect/ReconnectConfig.java @@ -8,6 +8,9 @@ @ConfigSerializable public class ReconnectConfig { + @Comment("Should we check for the latest version?") + boolean checkUpdates = true; + @Comment("Do we want to send players a message when they are reconnected to a server?") public boolean messageOnReconnect = true; public List reconnectMessage = List.of("You were reconnected to %server%."); diff --git a/src/main/java/com/mattmx/reconnect/ReconnectListener.java b/src/main/java/com/mattmx/reconnect/ReconnectListener.java index d96ddd2..9e4ec71 100644 --- a/src/main/java/com/mattmx/reconnect/ReconnectListener.java +++ b/src/main/java/com/mattmx/reconnect/ReconnectListener.java @@ -93,6 +93,7 @@ public void onChangeServer(@NotNull ServerConnectedEvent event) { @Subscribe public void onPlayerLogin(@NotNull LoginEvent event) { + if (!plugin.getConfig().checkUpdates) return; UpdateChecker checker = plugin.getUpdateChecker(); diff --git a/src/main/java/com/mattmx/reconnect/ReconnectVelocity.java b/src/main/java/com/mattmx/reconnect/ReconnectVelocity.java index 5c6e7fc..16b723b 100644 --- a/src/main/java/com/mattmx/reconnect/ReconnectVelocity.java +++ b/src/main/java/com/mattmx/reconnect/ReconnectVelocity.java @@ -69,6 +69,8 @@ public ReconnectVelocity(@Nullable ProxyServer server, @Nullable Logger logger, StorageManager.registerStorageMethod(new MariaDbStorage()); StorageManager.registerStorageMethod(new SQLiteStorage()); StorageManager.registerStorageMethod(new YamlStorage()); + StorageManager.registerStorageMethod(new PostgreSQLStorage()); + if (proxy.getPluginManager().isLoaded("luckperms")) { StorageManager.registerStorageMethod(new LuckPermsStorage()); } @@ -77,16 +79,18 @@ public ReconnectVelocity(@Nullable ProxyServer server, @Nullable Logger logger, checker = new UpdateChecker(); - String url = "https://api.github.com/repos/Matt-MX/ReconnectVelocity/releases/latest"; - try { - if (checker.get(url).isLatest(this.getClass().getAnnotation(Plugin.class).version())) { - getLogger().info("Running the latest version! ReconnectVelocity " + checker.getLatest()); - } else { - getLogger().info("Newer version available! ReconnectVelocity " + checker.getLatest()); - getLogger().info("Get it here: " + checker.getLink()); + if (getConfig().checkUpdates) { + String url = "https://api.github.com/repos/Matt-MX/ReconnectVelocity/releases/latest"; + try { + if (checker.get(url).isLatest(this.getClass().getAnnotation(Plugin.class).version())) { + getLogger().info("Running the latest version! ReconnectVelocity " + checker.getLatest()); + } else { + getLogger().info("Newer version available! ReconnectVelocity " + checker.getLatest()); + getLogger().info("Get it here: " + checker.getLink()); + } + } catch (Exception failure) { + getLogger().info("Unable to get latest release!"); } - } catch (Exception failure) { - getLogger().info("Unable to get latest release!"); } } diff --git a/src/main/java/com/mattmx/reconnect/storage/PostgreSQLStorage.java b/src/main/java/com/mattmx/reconnect/storage/PostgreSQLStorage.java new file mode 100644 index 0000000..5e82188 --- /dev/null +++ b/src/main/java/com/mattmx/reconnect/storage/PostgreSQLStorage.java @@ -0,0 +1,84 @@ +package com.mattmx.reconnect.storage; + +import com.mattmx.reconnect.ReconnectConfig; +import com.mattmx.reconnect.ReconnectVelocity; +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +public class PostgreSQLStorage extends StorageMethod { + private HikariDataSource ds; + + @Override + public void init() { + ReconnectConfig config = ReconnectVelocity.get().getConfig(); + + HikariConfig hikariConfig = new HikariConfig(); + hikariConfig.setDriverClassName(org.mariadb.jdbc.Driver.class.getName()); + if (config.storage.data.connectionParameters.useJdbcString) { + hikariConfig.setJdbcUrl(config.storage.data.connectionParameters.jdbcString); + } else { + hikariConfig.setJdbcUrl("jdbc:postgresql://" + config.storage.data.address + "/" + config.storage.data.database); + } + hikariConfig.setUsername(config.storage.data.username); + hikariConfig.setPassword(config.storage.data.password); + hikariConfig.setConnectionTimeout(config.storage.data.connectionParameters.connectionTimeout); + hikariConfig.setIdleTimeout(config.storage.data.connectionParameters.idleTimeout); + hikariConfig.setKeepaliveTime(config.storage.data.connectionParameters.keepAliveTime); + hikariConfig.setMaxLifetime(config.storage.data.connectionParameters.maxLifetime); + hikariConfig.setMinimumIdle(config.storage.data.connectionParameters.minimumIdle); + hikariConfig.setMaximumPoolSize(config.storage.data.connectionParameters.maximumPoolSize); + hikariConfig.setPoolName("reconnect"); + + ds = new HikariDataSource(hikariConfig); + try (Connection con = ds.getConnection()) { + Statement statement = con.createStatement(); + statement.executeUpdate("CREATE TABLE IF NOT EXISTS reconnect_data(" + + "uuid VARCHAR(255)," + + "lastserver TEXT," + + "PRIMARY KEY(uuid))"); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + @Override + public void setLastServer(String uuid, String servername) { + try (Connection con = ds.getConnection()) { + Statement statement = con.createStatement(); + statement.executeUpdate( + "INSERT INTO reconnect_data VALUES ('" + uuid + "','" + servername + "')" + + "ON CONFLICT (uuid) DO UPDATE SET lastserver = '" + servername + "'"); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + @Override + public String getLastServer(String uuid) { + try (Connection con = ds.getConnection()) { + Statement statement = con.createStatement(); + ResultSet rs = statement.executeQuery("SELECT lastserver FROM reconnect_data WHERE uuid = '" + uuid + "'"); + if (rs.next()) { + return rs.getString("lastserver"); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } + + @Override + public void save() { + ds.close(); + } + + @Override + public String getMethod() { + return "postgresql"; + } +} \ No newline at end of file