mirror of
https://github.com/GeyserMC/GeyserConnect.git
synced 2025-06-26 14:15:22 +02:00
Add sqlite storage manager
This commit is contained in:
parent
8a8ea5cd7f
commit
229fab13ca
12 changed files with 96 additions and 16 deletions
6
pom.xml
6
pom.xml
|
@ -59,6 +59,12 @@
|
||||||
<artifactId>terminalconsoleappender</artifactId>
|
<artifactId>terminalconsoleappender</artifactId>
|
||||||
<version>1.1.1</version>
|
<version>1.1.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.xerial</groupId>
|
||||||
|
<artifactId>sqlite-jdbc</artifactId>
|
||||||
|
<version>3.31.1</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
@ -130,6 +130,7 @@ public class MasterServer {
|
||||||
public void shutdown() {
|
public void shutdown() {
|
||||||
shuttingDown = true;
|
shuttingDown = true;
|
||||||
generalThreadPool.shutdown();
|
generalThreadPool.shutdown();
|
||||||
|
storageManager.closeStorage();
|
||||||
|
|
||||||
if (geyserProxy != null) {
|
if (geyserProxy != null) {
|
||||||
geyserProxy.onDisable();
|
geyserProxy.onDisable();
|
||||||
|
|
|
@ -6,6 +6,7 @@ import org.geysermc.connect.utils.Logger;
|
||||||
|
|
||||||
@Log4j2
|
@Log4j2
|
||||||
public class GeyserProxyLogger extends Logger {
|
public class GeyserProxyLogger extends Logger {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disable debug messages depending on config
|
* Disable debug messages depending on config
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -8,6 +8,7 @@ import org.geysermc.connect.MasterServer;
|
||||||
import org.geysermc.connect.utils.Player;
|
import org.geysermc.connect.utils.Player;
|
||||||
|
|
||||||
public class ProxyConnectorServerEventHandler extends ConnectorServerEventHandler {
|
public class ProxyConnectorServerEventHandler extends ConnectorServerEventHandler {
|
||||||
|
|
||||||
private final GeyserConnector connector;
|
private final GeyserConnector connector;
|
||||||
|
|
||||||
public ProxyConnectorServerEventHandler(GeyserConnector connector) {
|
public ProxyConnectorServerEventHandler(GeyserConnector connector) {
|
||||||
|
|
|
@ -12,6 +12,8 @@ public class AbstractStorageManager {
|
||||||
|
|
||||||
public void setupStorage() { }
|
public void setupStorage() { }
|
||||||
|
|
||||||
|
public void closeStorage() { }
|
||||||
|
|
||||||
public void saveServers(Player player) { }
|
public void saveServers(Player player) { }
|
||||||
|
|
||||||
public List<Server> loadServers(Player player) {
|
public List<Server> loadServers(Player player) {
|
||||||
|
@ -21,7 +23,7 @@ public class AbstractStorageManager {
|
||||||
@Getter
|
@Getter
|
||||||
public enum StorageType {
|
public enum StorageType {
|
||||||
JSON("json", JsonStorageManager.class),
|
JSON("json", JsonStorageManager.class),
|
||||||
SQLITE("sqlite", AbstractStorageManager.class);
|
SQLITE("sqlite", SqliteStorageManager.class);
|
||||||
|
|
||||||
@JsonValue
|
@JsonValue
|
||||||
private String name;
|
private String name;
|
||||||
|
|
|
@ -5,41 +5,39 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import org.geysermc.connect.utils.Player;
|
import org.geysermc.connect.utils.Player;
|
||||||
import org.geysermc.connect.utils.Server;
|
import org.geysermc.connect.utils.Server;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class JsonStorageManager extends AbstractStorageManager {
|
public class JsonStorageManager extends AbstractStorageManager {
|
||||||
private ObjectMapper mapper = new ObjectMapper();
|
|
||||||
|
private final ObjectMapper mapper = new ObjectMapper();
|
||||||
|
private final Path dataFolder = Paths.get("players/");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setupStorage() {
|
public void setupStorage() {
|
||||||
File playersFolder = new File("players/");
|
if (!dataFolder.toFile().exists()) {
|
||||||
if (!playersFolder.exists()) {
|
dataFolder.toFile().mkdirs();
|
||||||
playersFolder.mkdirs();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void saveServers(Player player) {
|
public void saveServers(Player player) {
|
||||||
File dataFile = new File("players/" + player.getXuid() + ".json");
|
|
||||||
try {
|
try {
|
||||||
mapper.writeValue(dataFile, player.getServers());
|
mapper.writeValue(dataFolder.resolve(player.getXuid() + ".json").toFile(), player.getServers());
|
||||||
} catch (IOException e) { }
|
} catch (IOException e) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Server> loadServers(Player player) {
|
public List<Server> loadServers(Player player) {
|
||||||
File dataFile = new File("players/" + player.getXuid() + ".json");
|
|
||||||
List<Server> servers = new ArrayList<>();
|
List<Server> servers = new ArrayList<>();
|
||||||
|
|
||||||
if (dataFile.exists()) {
|
try {
|
||||||
try {
|
List<Server> loadedServers = mapper.readValue(dataFolder.resolve(player.getXuid() + ".json").toFile(), new TypeReference<List<Server>>(){});
|
||||||
List<Server> loadedServers = mapper.readValue(dataFile, new TypeReference<List<Server>>(){});
|
servers.addAll(loadedServers);
|
||||||
servers.addAll(loadedServers);
|
} catch (IOException e) { }
|
||||||
} catch (IOException e) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
return servers;
|
return servers;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
package org.geysermc.connect.storage;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.geysermc.connect.MasterServer;
|
||||||
|
import org.geysermc.connect.utils.Player;
|
||||||
|
import org.geysermc.connect.utils.Server;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.sql.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SqliteStorageManager extends AbstractStorageManager {
|
||||||
|
|
||||||
|
private final ObjectMapper mapper = new ObjectMapper();
|
||||||
|
|
||||||
|
private Connection connection;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setupStorage() {
|
||||||
|
try {
|
||||||
|
Class.forName("org.sqlite.JDBC");
|
||||||
|
connection = DriverManager.getConnection("jdbc:sqlite:players.db");
|
||||||
|
|
||||||
|
Statement createPlayersTable = connection.createStatement();
|
||||||
|
createPlayersTable.executeUpdate("CREATE TABLE IF NOT EXISTS players (xuid TEXT, servers TEXT, PRIMARY KEY(xuid));");
|
||||||
|
createPlayersTable.close();
|
||||||
|
} catch (ClassNotFoundException | SQLException e) {
|
||||||
|
MasterServer.getInstance().getLogger().severe("Unable to load sqlite 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("INSERT OR 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() + "';");
|
||||||
|
|
||||||
|
List<Server> loadedServers = mapper.readValue(rs.getString("servers"), new TypeReference<List<Server>>(){});
|
||||||
|
servers.addAll(loadedServers);
|
||||||
|
|
||||||
|
getPlayersServers.close();
|
||||||
|
} catch (IOException | SQLException e) { }
|
||||||
|
|
||||||
|
return servers;
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import lombok.Getter;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public enum FormID {
|
public enum FormID {
|
||||||
|
|
||||||
MAIN,
|
MAIN,
|
||||||
DIRECT_CONNECT(true),
|
DIRECT_CONNECT(true),
|
||||||
EDIT_SERVERS(true),
|
EDIT_SERVERS(true),
|
||||||
|
|
|
@ -17,6 +17,7 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class UIHandler {
|
public class UIHandler {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a list of servers for the client based on the passed servers list
|
* Create a list of servers for the client based on the passed servers list
|
||||||
*
|
*
|
||||||
|
|
|
@ -16,6 +16,7 @@ import java.io.InputStream;
|
||||||
* This class is mostly copied from core Geyser
|
* This class is mostly copied from core Geyser
|
||||||
*/
|
*/
|
||||||
public class PalleteManger {
|
public class PalleteManger {
|
||||||
|
|
||||||
public static final ListTag<CompoundTag> BLOCK_PALLETE;
|
public static final ListTag<CompoundTag> BLOCK_PALLETE;
|
||||||
public static final CompoundTag BIOMES_PALLETE;
|
public static final CompoundTag BIOMES_PALLETE;
|
||||||
public static final byte[] EMPTY_LEVEL_CHUNK_DATA;
|
public static final byte[] EMPTY_LEVEL_CHUNK_DATA;
|
||||||
|
|
|
@ -6,6 +6,7 @@ import lombok.Getter;
|
||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class Server {
|
public class Server {
|
||||||
|
|
||||||
private String address;
|
private String address;
|
||||||
private int port = 25565;
|
private int port = 25565;
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ debug-mode: false
|
||||||
max-players: 100
|
max-players: 100
|
||||||
|
|
||||||
# MOTD to display
|
# MOTD to display
|
||||||
motd: "GeyserMulti Proxy"
|
motd: "GeyserConnect Proxy"
|
||||||
|
|
||||||
# Config for the Geyser listener
|
# Config for the Geyser listener
|
||||||
geyser:
|
geyser:
|
||||||
|
|
Loading…
Add table
Reference in a new issue