forked from git-mirrors/GeyserConnect
Add mysql storage manager
This commit is contained in:
parent
229fab13ca
commit
42c58228f9
6 changed files with 109 additions and 9 deletions
14
pom.xml
14
pom.xml
|
@ -5,15 +5,15 @@
|
|||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>org.geysermc</groupId>
|
||||
<artifactId>geyser-multi</artifactId>
|
||||
<artifactId>geyser-connect</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
|
||||
<name>GeyserMulti</name>
|
||||
<description>Allows for players from Minecraft Bedrock Edition to join Minecraft Java Edition servers via a masterServer list.</description>
|
||||
<name>GeyserConnect</name>
|
||||
<description>Allows for players from Minecraft Bedrock Edition to join Minecraft Java Edition servers via a server list.</description>
|
||||
<url>https://geysermc.org</url>
|
||||
|
||||
<properties>
|
||||
<outputName>GeyserMulti</outputName>
|
||||
<outputName>GeyserConnect</outputName>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
|
@ -65,6 +65,12 @@
|
|||
<version>3.31.1</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<version>8.0.20</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
@ -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>>(){});
|
||||
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
Reference in a new issue