mirror of
https://github.com/GeyserMC/GeyserConnect.git
synced 2025-06-26 14:15:22 +02:00
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>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>org.geysermc</groupId>
|
<groupId>org.geysermc</groupId>
|
||||||
<artifactId>geyser-multi</artifactId>
|
<artifactId>geyser-connect</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
<name>GeyserMulti</name>
|
<name>GeyserConnect</name>
|
||||||
<description>Allows for players from Minecraft Bedrock Edition to join Minecraft Java Edition servers via a masterServer list.</description>
|
<description>Allows for players from Minecraft Bedrock Edition to join Minecraft Java Edition servers via a server list.</description>
|
||||||
<url>https://geysermc.org</url>
|
<url>https://geysermc.org</url>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<outputName>GeyserMulti</outputName>
|
<outputName>GeyserConnect</outputName>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
<maven.compiler.source>1.8</maven.compiler.source>
|
<maven.compiler.source>1.8</maven.compiler.source>
|
||||||
|
@ -65,6 +65,12 @@
|
||||||
<version>3.31.1</version>
|
<version>3.31.1</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
<version>8.0.20</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
@ -60,5 +60,17 @@ public class GeyserConnectConfig {
|
||||||
|
|
||||||
@JsonProperty("storage-type")
|
@JsonProperty("storage-type")
|
||||||
private AbstractStorageManager.StorageType storageType;
|
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
|
@Getter
|
||||||
public enum StorageType {
|
public enum StorageType {
|
||||||
JSON("json", JsonStorageManager.class),
|
JSON("json", JsonStorageManager.class),
|
||||||
SQLITE("sqlite", SqliteStorageManager.class);
|
SQLITE("sqlite", SQLiteStorageManager.class),
|
||||||
|
MYSQL("mysql", MySQLStorageManager.class);
|
||||||
|
|
||||||
@JsonValue
|
@JsonValue
|
||||||
private String name;
|
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.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class SqliteStorageManager extends AbstractStorageManager {
|
public class SQLiteStorageManager extends AbstractStorageManager {
|
||||||
|
|
||||||
private final ObjectMapper mapper = new ObjectMapper();
|
private final ObjectMapper mapper = new ObjectMapper();
|
||||||
|
|
||||||
|
@ -56,8 +56,10 @@ public class SqliteStorageManager extends AbstractStorageManager {
|
||||||
Statement getPlayersServers = connection.createStatement();
|
Statement getPlayersServers = connection.createStatement();
|
||||||
ResultSet rs = getPlayersServers.executeQuery("SELECT servers FROM players WHERE xuid='" + player.getXuid() + "';");
|
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);
|
servers.addAll(loadedServers);
|
||||||
|
}
|
||||||
|
|
||||||
getPlayersServers.close();
|
getPlayersServers.close();
|
||||||
} catch (IOException | SQLException e) { }
|
} catch (IOException | SQLException e) { }
|
|
@ -42,5 +42,14 @@ custom-servers:
|
||||||
max: 10
|
max: 10
|
||||||
|
|
||||||
# Storage engine for custom servers
|
# Storage engine for custom servers
|
||||||
# Can be json, sqlite
|
# Can be json, sqlite, mysql
|
||||||
storage-type: json
|
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