Skip to content

Commit

Permalink
🔥 Add PostgreSQL #17
Browse files Browse the repository at this point in the history
  • Loading branch information
Matt-MX committed Sep 18, 2024
1 parent b527a7a commit 4e5da50
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 11 deletions.
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand Down
6 changes: 4 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand All @@ -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]
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/com/mattmx/reconnect/ReconnectConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> reconnectMessage = List.of("<gray>You were reconnected to <white>%server%</white>.");
Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/mattmx/reconnect/ReconnectListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down
22 changes: 13 additions & 9 deletions src/main/java/com/mattmx/reconnect/ReconnectVelocity.java
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
Expand All @@ -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!");
}
}

Expand Down
84 changes: 84 additions & 0 deletions src/main/java/com/mattmx/reconnect/storage/PostgreSQLStorage.java
Original file line number Diff line number Diff line change
@@ -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";
}
}

0 comments on commit 4e5da50

Please sign in to comment.