diff --git a/pom.xml b/pom.xml
index f2fd10a..cf33e8a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -59,6 +59,12 @@
terminalconsoleappender
1.1.1
+
+ org.xerial
+ sqlite-jdbc
+ 3.31.1
+ compile
+
diff --git a/src/main/java/org/geysermc/connect/MasterServer.java b/src/main/java/org/geysermc/connect/MasterServer.java
index ad3a412..9289048 100644
--- a/src/main/java/org/geysermc/connect/MasterServer.java
+++ b/src/main/java/org/geysermc/connect/MasterServer.java
@@ -130,6 +130,7 @@ public class MasterServer {
public void shutdown() {
shuttingDown = true;
generalThreadPool.shutdown();
+ storageManager.closeStorage();
if (geyserProxy != null) {
geyserProxy.onDisable();
diff --git a/src/main/java/org/geysermc/connect/proxy/GeyserProxyLogger.java b/src/main/java/org/geysermc/connect/proxy/GeyserProxyLogger.java
index f9a7ec2..818947c 100644
--- a/src/main/java/org/geysermc/connect/proxy/GeyserProxyLogger.java
+++ b/src/main/java/org/geysermc/connect/proxy/GeyserProxyLogger.java
@@ -6,6 +6,7 @@ import org.geysermc.connect.utils.Logger;
@Log4j2
public class GeyserProxyLogger extends Logger {
+
/**
* Disable debug messages depending on config
*/
diff --git a/src/main/java/org/geysermc/connect/proxy/ProxyConnectorServerEventHandler.java b/src/main/java/org/geysermc/connect/proxy/ProxyConnectorServerEventHandler.java
index cd95550..c3ad835 100644
--- a/src/main/java/org/geysermc/connect/proxy/ProxyConnectorServerEventHandler.java
+++ b/src/main/java/org/geysermc/connect/proxy/ProxyConnectorServerEventHandler.java
@@ -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) {
diff --git a/src/main/java/org/geysermc/connect/storage/AbstractStorageManager.java b/src/main/java/org/geysermc/connect/storage/AbstractStorageManager.java
index dd04fb5..f620999 100644
--- a/src/main/java/org/geysermc/connect/storage/AbstractStorageManager.java
+++ b/src/main/java/org/geysermc/connect/storage/AbstractStorageManager.java
@@ -12,6 +12,8 @@ public class AbstractStorageManager {
public void setupStorage() { }
+ public void closeStorage() { }
+
public void saveServers(Player player) { }
public List 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;
diff --git a/src/main/java/org/geysermc/connect/storage/JsonStorageManager.java b/src/main/java/org/geysermc/connect/storage/JsonStorageManager.java
index ee257b8..7ed13ec 100644
--- a/src/main/java/org/geysermc/connect/storage/JsonStorageManager.java
+++ b/src/main/java/org/geysermc/connect/storage/JsonStorageManager.java
@@ -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 loadServers(Player player) {
- File dataFile = new File("players/" + player.getXuid() + ".json");
List servers = new ArrayList<>();
- if (dataFile.exists()) {
- try {
- List loadedServers = mapper.readValue(dataFile, new TypeReference>(){});
- servers.addAll(loadedServers);
- } catch (IOException e) { }
- }
+ try {
+ List loadedServers = mapper.readValue(dataFolder.resolve(player.getXuid() + ".json").toFile(), new TypeReference>(){});
+ servers.addAll(loadedServers);
+ } catch (IOException e) { }
return servers;
}
diff --git a/src/main/java/org/geysermc/connect/storage/SqliteStorageManager.java b/src/main/java/org/geysermc/connect/storage/SqliteStorageManager.java
new file mode 100644
index 0000000..2b9bb85
--- /dev/null
+++ b/src/main/java/org/geysermc/connect/storage/SqliteStorageManager.java
@@ -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 loadServers(Player player) {
+ List servers = new ArrayList<>();
+
+ try {
+ Statement getPlayersServers = connection.createStatement();
+ ResultSet rs = getPlayersServers.executeQuery("SELECT servers FROM players WHERE xuid='" + player.getXuid() + "';");
+
+ List loadedServers = mapper.readValue(rs.getString("servers"), new TypeReference>(){});
+ servers.addAll(loadedServers);
+
+ getPlayersServers.close();
+ } catch (IOException | SQLException e) { }
+
+ return servers;
+ }
+}
diff --git a/src/main/java/org/geysermc/connect/ui/FormID.java b/src/main/java/org/geysermc/connect/ui/FormID.java
index 68317dd..1188998 100644
--- a/src/main/java/org/geysermc/connect/ui/FormID.java
+++ b/src/main/java/org/geysermc/connect/ui/FormID.java
@@ -4,6 +4,7 @@ import lombok.Getter;
@Getter
public enum FormID {
+
MAIN,
DIRECT_CONNECT(true),
EDIT_SERVERS(true),
diff --git a/src/main/java/org/geysermc/connect/ui/UIHandler.java b/src/main/java/org/geysermc/connect/ui/UIHandler.java
index b1722c6..77b84da 100644
--- a/src/main/java/org/geysermc/connect/ui/UIHandler.java
+++ b/src/main/java/org/geysermc/connect/ui/UIHandler.java
@@ -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
*
diff --git a/src/main/java/org/geysermc/connect/utils/PalleteManger.java b/src/main/java/org/geysermc/connect/utils/PalleteManger.java
index f08c4a2..4d6bdcd 100644
--- a/src/main/java/org/geysermc/connect/utils/PalleteManger.java
+++ b/src/main/java/org/geysermc/connect/utils/PalleteManger.java
@@ -16,6 +16,7 @@ import java.io.InputStream;
* This class is mostly copied from core Geyser
*/
public class PalleteManger {
+
public static final ListTag BLOCK_PALLETE;
public static final CompoundTag BIOMES_PALLETE;
public static final byte[] EMPTY_LEVEL_CHUNK_DATA;
diff --git a/src/main/java/org/geysermc/connect/utils/Server.java b/src/main/java/org/geysermc/connect/utils/Server.java
index 9c5b2f7..8ab0298 100644
--- a/src/main/java/org/geysermc/connect/utils/Server.java
+++ b/src/main/java/org/geysermc/connect/utils/Server.java
@@ -6,6 +6,7 @@ import lombok.Getter;
@Getter
@AllArgsConstructor
public class Server {
+
private String address;
private int port = 25565;
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index bf82930..c8ff20c 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -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: