forked from git-mirrors/GeyserConnect
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>
|
||||
<version>1.1.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.xerial</groupId>
|
||||
<artifactId>sqlite-jdbc</artifactId>
|
||||
<version>3.31.1</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
@ -130,6 +130,7 @@ public class MasterServer {
|
|||
public void shutdown() {
|
||||
shuttingDown = true;
|
||||
generalThreadPool.shutdown();
|
||||
storageManager.closeStorage();
|
||||
|
||||
if (geyserProxy != null) {
|
||||
geyserProxy.onDisable();
|
||||
|
|
|
@ -6,6 +6,7 @@ import org.geysermc.connect.utils.Logger;
|
|||
|
||||
@Log4j2
|
||||
public class GeyserProxyLogger extends Logger {
|
||||
|
||||
/**
|
||||
* Disable debug messages depending on config
|
||||
*/
|
||||
|
|
|
@ -8,6 +8,7 @@ import org.geysermc.connect.MasterServer;
|
|||
import org.geysermc.connect.utils.Player;
|
||||
|
||||
public class ProxyConnectorServerEventHandler extends ConnectorServerEventHandler {
|
||||
|
||||
private final GeyserConnector connector;
|
||||
|
||||
public ProxyConnectorServerEventHandler(GeyserConnector connector) {
|
||||
|
|
|
@ -12,6 +12,8 @@ public class AbstractStorageManager {
|
|||
|
||||
public void setupStorage() { }
|
||||
|
||||
public void closeStorage() { }
|
||||
|
||||
public void saveServers(Player player) { }
|
||||
|
||||
public List<Server> loadServers(Player player) {
|
||||
|
@ -21,7 +23,7 @@ public class AbstractStorageManager {
|
|||
@Getter
|
||||
public enum StorageType {
|
||||
JSON("json", JsonStorageManager.class),
|
||||
SQLITE("sqlite", AbstractStorageManager.class);
|
||||
SQLITE("sqlite", SqliteStorageManager.class);
|
||||
|
||||
@JsonValue
|
||||
private String name;
|
||||
|
|
|
@ -5,41 +5,39 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|||
import org.geysermc.connect.utils.Player;
|
||||
import org.geysermc.connect.utils.Server;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class JsonStorageManager extends AbstractStorageManager {
|
||||
private ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
private final ObjectMapper mapper = new ObjectMapper();
|
||||
private final Path dataFolder = Paths.get("players/");
|
||||
|
||||
@Override
|
||||
public void setupStorage() {
|
||||
File playersFolder = new File("players/");
|
||||
if (!playersFolder.exists()) {
|
||||
playersFolder.mkdirs();
|
||||
if (!dataFolder.toFile().exists()) {
|
||||
dataFolder.toFile().mkdirs();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveServers(Player player) {
|
||||
File dataFile = new File("players/" + player.getXuid() + ".json");
|
||||
try {
|
||||
mapper.writeValue(dataFile, player.getServers());
|
||||
mapper.writeValue(dataFolder.resolve(player.getXuid() + ".json").toFile(), player.getServers());
|
||||
} catch (IOException e) { }
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Server> loadServers(Player player) {
|
||||
File dataFile = new File("players/" + player.getXuid() + ".json");
|
||||
List<Server> servers = new ArrayList<>();
|
||||
|
||||
if (dataFile.exists()) {
|
||||
try {
|
||||
List<Server> loadedServers = mapper.readValue(dataFile, new TypeReference<List<Server>>(){});
|
||||
List<Server> loadedServers = mapper.readValue(dataFolder.resolve(player.getXuid() + ".json").toFile(), new TypeReference<List<Server>>(){});
|
||||
servers.addAll(loadedServers);
|
||||
} catch (IOException e) { }
|
||||
}
|
||||
|
||||
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
|
||||
public enum FormID {
|
||||
|
||||
MAIN,
|
||||
DIRECT_CONNECT(true),
|
||||
EDIT_SERVERS(true),
|
||||
|
|
|
@ -17,6 +17,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
public class UIHandler {
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
public class PalleteManger {
|
||||
|
||||
public static final ListTag<CompoundTag> BLOCK_PALLETE;
|
||||
public static final CompoundTag BIOMES_PALLETE;
|
||||
public static final byte[] EMPTY_LEVEL_CHUNK_DATA;
|
||||
|
|
|
@ -6,6 +6,7 @@ import lombok.Getter;
|
|||
@Getter
|
||||
@AllArgsConstructor
|
||||
public class Server {
|
||||
|
||||
private String address;
|
||||
private int port = 25565;
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ debug-mode: false
|
|||
max-players: 100
|
||||
|
||||
# MOTD to display
|
||||
motd: "GeyserMulti Proxy"
|
||||
motd: "GeyserConnect Proxy"
|
||||
|
||||
# Config for the Geyser listener
|
||||
geyser:
|
||||
|
|
Loading…
Add table
Reference in a new issue