Skip to content

Commit

Permalink
Merge pull request #21 from Matt-MX/dev-2.0
Browse files Browse the repository at this point in the history
Dev 2.0
  • Loading branch information
Matt-MX authored Sep 18, 2024
2 parents de48a83 + 4e5da50 commit 08a8485
Show file tree
Hide file tree
Showing 7 changed files with 131 additions and 28 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
24 changes: 17 additions & 7 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,12 +79,18 @@ public ReconnectVelocity(@Nullable ProxyServer server, @Nullable Logger logger,

checker = new UpdateChecker();

if (checker.get("https://api.github.com/repos/Matt-MX/ReconnectVelocity/releases/latest")
.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!");
}
}
}

Expand Down Expand Up @@ -119,7 +127,9 @@ public void saveDefaultConfig() {
try {
this.config = loader.load().get(ReconnectConfig.class);
} catch (ConfigurateException e) {
throw new RuntimeException(e);
getLogger().error("There were errors when loading the existing config. Renaming and resetting!");
configLocation.renameTo(configLocation.getParentFile().toPath().resolve("config-old.yml").toFile());
saveDefaultConfig();
}
}

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";
}
}
40 changes: 21 additions & 19 deletions src/main/java/com/mattmx/reconnect/util/updater/UpdateChecker.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLConnection;

Expand All @@ -20,34 +22,34 @@ public class UpdateChecker {
public UpdateChecker get(String url) {
try {
StringBuilder builder = new StringBuilder();
URL u = new URL(url);
URL u = new URI(url).toURL();
URLConnection connection = u.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

String line;
while ((line = reader.readLine()) != null) {
builder.append(line + "\n");
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
while ((line = reader.readLine()) != null) {
builder.append(line);
}
}

content = builder.toString();
getData();
return this;
} catch (IOException e) {
e.printStackTrace();
}
return this;
}

private void getData() {
if (content == null) return;
JsonElement root = JsonParser.parseString(content);
JsonElement root = JsonParser.parseString(content);

if (!root.isJsonObject()) throw new RuntimeException("Unable to get latest version!");

if (root.isJsonObject()) return;
JsonObject obj = root.getAsJsonObject();

JsonObject obj = root.getAsJsonObject();
if (obj.get("tag_name") != null) {
this.latest = obj.get("tag_name").getAsString();
this.link = obj.get("html_url").getAsString();
}

if (obj.get("tag_name") != null) {
this.latest = obj.get("tag_name").getAsString();
this.link = obj.get("html_url").getAsString();
return this;
} catch (IOException | URISyntaxException ex) {
ex.printStackTrace();
}
return this;
}

public boolean isLatest(String version) {
Expand Down

0 comments on commit 08a8485

Please sign in to comment.