Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev 2.0 #21

Merged
merged 2 commits into from
Sep 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading