diff --git a/pom.xml b/pom.xml
index cf33e8a..258dabc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,15 +5,15 @@
4.0.0
org.geysermc
- geyser-multi
+ geyser-connect
1.0-SNAPSHOT
- GeyserMulti
- Allows for players from Minecraft Bedrock Edition to join Minecraft Java Edition servers via a masterServer list.
+ GeyserConnect
+ Allows for players from Minecraft Bedrock Edition to join Minecraft Java Edition servers via a server list.
https://geysermc.org
- GeyserMulti
+ GeyserConnect
UTF-8
UTF-8
1.8
@@ -65,6 +65,12 @@
3.31.1
compile
+
+ mysql
+ mysql-connector-java
+ 8.0.20
+ compile
+
diff --git a/src/main/java/org/geysermc/connect/GeyserConnectConfig.java b/src/main/java/org/geysermc/connect/GeyserConnectConfig.java
index 3003752..87d467e 100644
--- a/src/main/java/org/geysermc/connect/GeyserConnectConfig.java
+++ b/src/main/java/org/geysermc/connect/GeyserConnectConfig.java
@@ -60,5 +60,17 @@ public class GeyserConnectConfig {
@JsonProperty("storage-type")
private AbstractStorageManager.StorageType storageType;
+
+ private MySQLConnectionSection mysql;
+ }
+
+ @Getter
+ public static class MySQLConnectionSection {
+
+ private String user;
+ private String pass;
+ private String database;
+ private String host;
+ private int port;
}
}
diff --git a/src/main/java/org/geysermc/connect/storage/AbstractStorageManager.java b/src/main/java/org/geysermc/connect/storage/AbstractStorageManager.java
index f620999..431d8ea 100644
--- a/src/main/java/org/geysermc/connect/storage/AbstractStorageManager.java
+++ b/src/main/java/org/geysermc/connect/storage/AbstractStorageManager.java
@@ -23,7 +23,8 @@ public class AbstractStorageManager {
@Getter
public enum StorageType {
JSON("json", JsonStorageManager.class),
- SQLITE("sqlite", SqliteStorageManager.class);
+ SQLITE("sqlite", SQLiteStorageManager.class),
+ MYSQL("mysql", MySQLStorageManager.class);
@JsonValue
private String name;
diff --git a/src/main/java/org/geysermc/connect/storage/MySQLStorageManager.java b/src/main/java/org/geysermc/connect/storage/MySQLStorageManager.java
new file mode 100644
index 0000000..014dd89
--- /dev/null
+++ b/src/main/java/org/geysermc/connect/storage/MySQLStorageManager.java
@@ -0,0 +1,70 @@
+package org.geysermc.connect.storage;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.geysermc.connect.GeyserConnectConfig;
+import org.geysermc.connect.MasterServer;
+import org.geysermc.connect.utils.Player;
+import org.geysermc.connect.utils.Server;
+
+import java.io.IOException;
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class MySQLStorageManager extends AbstractStorageManager {
+
+ private final ObjectMapper mapper = new ObjectMapper();
+
+ private Connection connection;
+
+ @Override
+ public void setupStorage() {
+ try {
+ Class.forName("com.mysql.cj.jdbc.Driver");
+ GeyserConnectConfig.MySQLConnectionSection connectionInfomation = MasterServer.getInstance().getGeyserConnectConfig().getCustomServers().getMysql();
+ connection = DriverManager.getConnection("jdbc:mysql://" + connectionInfomation.getHost() + "/" + connectionInfomation.getDatabase(), connectionInfomation.getUser(), connectionInfomation.getPass());
+
+ Statement createPlayersTable = connection.createStatement();
+ createPlayersTable.executeUpdate("CREATE TABLE IF NOT EXISTS players (xuid VARCHAR(32), servers TEXT, PRIMARY KEY(xuid));");
+ createPlayersTable.close();
+ } catch (ClassNotFoundException | SQLException e) {
+ MasterServer.getInstance().getLogger().severe("Unable to connect to MySQL database!", e);
+ }
+ }
+
+ @Override
+ public void closeStorage() {
+ try {
+ connection.close();
+ } catch (SQLException e) { }
+ }
+
+ @Override
+ public void saveServers(Player player) {
+ try {
+ Statement updatePlayersServers = connection.createStatement();
+ updatePlayersServers.executeUpdate("REPLACE INTO players(xuid, servers) VALUES('" + player.getXuid() + "', '" + mapper.writeValueAsString(player.getServers()) + "');");
+ updatePlayersServers.close();
+ } catch (IOException | SQLException e) { }
+ }
+
+ @Override
+ public List loadServers(Player player) {
+ List servers = new ArrayList<>();
+
+ try {
+ Statement getPlayersServers = connection.createStatement();
+ ResultSet rs = getPlayersServers.executeQuery("SELECT servers FROM players WHERE xuid='" + player.getXuid() + "';");
+
+ while (rs.next()) {
+ List loadedServers = mapper.readValue(rs.getString("servers"), new TypeReference>(){});
+ servers.addAll(loadedServers);
+ }
+
+ getPlayersServers.close();
+ } catch (IOException | SQLException e) { }
+
+ return servers;
+ }
+}
diff --git a/src/main/java/org/geysermc/connect/storage/SqliteStorageManager.java b/src/main/java/org/geysermc/connect/storage/SQLiteStorageManager.java
similarity index 88%
rename from src/main/java/org/geysermc/connect/storage/SqliteStorageManager.java
rename to src/main/java/org/geysermc/connect/storage/SQLiteStorageManager.java
index 2b9bb85..aef8230 100644
--- a/src/main/java/org/geysermc/connect/storage/SqliteStorageManager.java
+++ b/src/main/java/org/geysermc/connect/storage/SQLiteStorageManager.java
@@ -12,7 +12,7 @@ import java.sql.*;
import java.util.ArrayList;
import java.util.List;
-public class SqliteStorageManager extends AbstractStorageManager {
+public class SQLiteStorageManager extends AbstractStorageManager {
private final ObjectMapper mapper = new ObjectMapper();
@@ -56,8 +56,10 @@ public class SqliteStorageManager extends AbstractStorageManager {
Statement getPlayersServers = connection.createStatement();
ResultSet rs = getPlayersServers.executeQuery("SELECT servers FROM players WHERE xuid='" + player.getXuid() + "';");
- List loadedServers = mapper.readValue(rs.getString("servers"), new TypeReference>(){});
- servers.addAll(loadedServers);
+ while (rs.next()) {
+ List loadedServers = mapper.readValue(rs.getString("servers"), new TypeReference>() {});
+ servers.addAll(loadedServers);
+ }
getPlayersServers.close();
} catch (IOException | SQLException e) { }
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index c8ff20c..3b1c7a8 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -42,5 +42,14 @@ custom-servers:
max: 10
# Storage engine for custom servers
- # Can be json, sqlite
+ # Can be json, sqlite, mysql
storage-type: json
+
+ # Connection details for the mysql storage type
+ mysql:
+ user: "geyser_connect"
+ pass: ""
+ database: "geyser_connect"
+ host: "localhost"
+ port: 3306
+