summaryrefslogtreewikicommitdiff
path: root/src/main/java/net/tylermurphy/hideAndSeek/database
diff options
context:
space:
mode:
authorTyler Murphy <tylermurphy534@gmail.com>2021-12-26 16:58:18 -0600
committerTyler Murphy <tylermurphy534@gmail.com>2021-12-26 16:58:18 -0600
commit1617bfe44ab2fc2112ee5cc6fa082b7981222c64 (patch)
tree8e3114039cdb034d5021bd4d32aecb81ce36cc05 /src/main/java/net/tylermurphy/hideAndSeek/database
parent1.3.3 beta 2 (diff)
downloadkenshinshideandseek-1617bfe44ab2fc2112ee5cc6fa082b7981222c64.tar.gz
kenshinshideandseek-1617bfe44ab2fc2112ee5cc6fa082b7981222c64.tar.bz2
kenshinshideandseek-1617bfe44ab2fc2112ee5cc6fa082b7981222c64.zip
1.3.3 beta 3
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/database')
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/database/Database.java32
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/database/PlayerInfoTable.java33
2 files changed, 45 insertions, 20 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/database/Database.java b/src/main/java/net/tylermurphy/hideAndSeek/database/Database.java
index 2254ec2..9d3cc73 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/database/Database.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/database/Database.java
@@ -1,19 +1,25 @@
package net.tylermurphy.hideAndSeek.database;
+import com.google.common.io.ByteStreams;
import net.tylermurphy.hideAndSeek.Main;
+import java.io.ByteArrayInputStream;
import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
+import java.util.UUID;
public class Database {
- private final File databaseFile = new File(Main.data, "database.db");
+ private static final File databaseFile = new File(Main.data, "database.db");
- public PlayerInfoTable playerInfo;
+ public static PlayerInfoTable playerInfo;
- protected Connection connect() {
+ protected static Connection connect() {
Connection conn = null;
try {
String url = "jdbc:sqlite:"+databaseFile;
@@ -24,7 +30,25 @@ public class Database {
return conn;
}
- public void init(){
+ protected static InputStream convertUniqueId(UUID uuid) {
+ byte[] bytes = new byte[16];
+ ByteBuffer.wrap(bytes)
+ .putLong(uuid.getMostSignificantBits())
+ .putLong(uuid.getLeastSignificantBits());
+ return new ByteArrayInputStream(bytes);
+ }
+
+ protected static UUID convertBinaryStream(InputStream stream) {
+ ByteBuffer buffer = ByteBuffer.allocate(16);
+ try {
+ buffer.put(ByteStreams.toByteArray(stream));
+ buffer.flip();
+ return new UUID(buffer.getLong(), buffer.getLong());
+ } catch (IOException ignored) {}
+ return null;
+ }
+
+ public static void init(){
playerInfo = new PlayerInfoTable();
}
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/database/PlayerInfoTable.java b/src/main/java/net/tylermurphy/hideAndSeek/database/PlayerInfoTable.java
index 07fb2ee..0dba4b4 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/database/PlayerInfoTable.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/database/PlayerInfoTable.java
@@ -1,8 +1,7 @@
package net.tylermurphy.hideAndSeek.database;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.game.WinType;
-import net.tylermurphy.hideAndSeek.util.Util;
+import net.tylermurphy.hideAndSeek.util.WinType;
import java.io.IOException;
import java.io.InputStream;
@@ -23,7 +22,7 @@ public class PlayerInfoTable {
+ " games_played int NOT NULL\n"
+ ");";
- try(Connection connection = Main.plugin.database.connect(); Statement statement = connection.createStatement()){
+ try(Connection connection = Database.connect(); Statement statement = connection.createStatement()){
statement.execute(sql);
} catch (SQLException e){
Main.plugin.getLogger().severe("SQL Error: " + e.getMessage());
@@ -32,21 +31,22 @@ public class PlayerInfoTable {
public PlayerInfo getInfo(UUID uuid){
String sql = "SELECT * FROM player_info WHERE uuid = ?;";
- try(Connection connection = Main.plugin.database.connect(); PreparedStatement statement = connection.prepareStatement(sql)){
- InputStream is = Util.convertUniqueId(uuid);
+ try(Connection connection = Database.connect(); PreparedStatement statement = connection.prepareStatement(sql)){
+ InputStream is = Database.convertUniqueId(uuid);
byte[] bytes = new byte[is.available()];
- is.read(bytes);
+ if(is.read(bytes) == -1){
+ throw new IOException("Failed to read bytes from input stream");
+ }
statement.setBytes(1, bytes);
ResultSet rs = statement.executeQuery();
if(rs.next()){
- PlayerInfo info = new PlayerInfo(
+ return new PlayerInfo(
uuid,
rs.getInt("wins"),
rs.getInt("seeker_wins"),
rs.getInt("hider_wins"),
rs.getInt("games_played")
);
- return info;
}
} catch (SQLException e){
Main.plugin.getLogger().severe("SQL Error: " + e.getMessage());
@@ -59,13 +59,13 @@ public class PlayerInfoTable {
public List<PlayerInfo> getInfoPage(int page){
String sql = "SELECT * FROM player_info ORDER BY wins DESC LIMIT 10 OFFSET ?;";
- try(Connection connection = Main.plugin.database.connect(); PreparedStatement statement = connection.prepareStatement(sql)){
+ try(Connection connection = Database.connect(); PreparedStatement statement = connection.prepareStatement(sql)){
statement.setInt(1, (page-1)*10);
ResultSet rs = statement.executeQuery();
List<PlayerInfo> infoList = new ArrayList<>();
while(rs.next()){
PlayerInfo info = new PlayerInfo(
- Util.convertBinaryStream(rs.getBinaryStream("uuid")),
+ Database.convertBinaryStream(rs.getBinaryStream("uuid")),
rs.getInt("wins"),
rs.getInt("seeker_wins"),
rs.getInt("hider_wins"),
@@ -80,14 +80,16 @@ public class PlayerInfoTable {
return null;
}
- public boolean addWins(List<UUID> uuids, List<UUID> winners, WinType type){
+ public void addWins(List<UUID> uuids, List<UUID> winners, WinType type){
for(UUID uuid : uuids){
String sql = "INSERT OR REPLACE INTO player_info (uuid, wins, seeker_wins, hider_wins, games_played) VALUES (?,?,?,?,?)";
PlayerInfo info = getInfo(uuid);
- try(Connection connection = Main.plugin.database.connect(); PreparedStatement statement = connection.prepareStatement(sql)){
- InputStream is = Util.convertUniqueId(uuid);
+ try(Connection connection = Database.connect(); PreparedStatement statement = connection.prepareStatement(sql)){
+ InputStream is = Database.convertUniqueId(uuid);
byte[] bytes = new byte[is.available()];
- is.read(bytes);
+ if(is.read(bytes) == -1){
+ throw new IOException("Failed to read bytes from input stream");
+ }
statement.setBytes(1, bytes);
statement.setInt(2, info.wins + (winners.contains(uuid) ? 1 : 0));
statement.setInt(3, info.seeker_wins + (winners.contains(uuid) && type == WinType.SEEKER_WIN ? 1 : 0));
@@ -97,13 +99,12 @@ public class PlayerInfoTable {
} catch (SQLException e){
Main.plugin.getLogger().severe("SQL Error: " + e.getMessage());
e.printStackTrace();
- return false;
+ return;
} catch (IOException e) {
Main.plugin.getLogger().severe("IO Error: " + e.getMessage());
e.printStackTrace();
}
}
- return true;
}
}