mirror of
https://github.com/GeyserMC/GeyserConnect.git
synced 2025-09-10 00:03:04 +02:00
Add mysql storage manager
This commit is contained in:
parent
229fab13ca
commit
42c58228f9
6 changed files with 109 additions and 9 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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<Server> loadServers(Player player) {
|
||||
List<Server> servers = new ArrayList<>();
|
||||
|
||||
try {
|
||||
Statement getPlayersServers = connection.createStatement();
|
||||
ResultSet rs = getPlayersServers.executeQuery("SELECT servers FROM players WHERE xuid='" + player.getXuid() + "';");
|
||||
|
||||
while (rs.next()) {
|
||||
List<Server> loadedServers = mapper.readValue(rs.getString("servers"), new TypeReference<List<Server>>(){});
|
||||
servers.addAll(loadedServers);
|
||||
}
|
||||
|
||||
getPlayersServers.close();
|
||||
} catch (IOException | SQLException e) { }
|
||||
|
||||
return servers;
|
||||
}
|
||||
}
|
|
@ -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<Server> loadedServers = mapper.readValue(rs.getString("servers"), new TypeReference<List<Server>>(){});
|
||||
servers.addAll(loadedServers);
|
||||
while (rs.next()) {
|
||||
List<Server> loadedServers = mapper.readValue(rs.getString("servers"), new TypeReference<List<Server>>() {});
|
||||
servers.addAll(loadedServers);
|
||||
}
|
||||
|
||||
getPlayersServers.close();
|
||||
} catch (IOException | SQLException e) { }
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue