From a0c50e0fb0b1ab71b0b28d6e28afd98c14cddc46 Mon Sep 17 00:00:00 2001 From: Ryan Fox Date: Sun, 25 Oct 2020 15:35:00 +0000 Subject: [PATCH] Move player data from config to database The plugin will not automatically migrate player data to the database. I'll add the script I used for that, then bump the minor version number like the coward I am. --- .../party/_2a03/mc/command/HomeCommand.java | 10 ++-- src/main/java/party/_2a03/mc/util/Config.java | 34 ------------ .../java/party/_2a03/mc/util/Database.java | 55 +++++++++++++++++++ .../java/party/_2a03/mc/util/PlayerData.java | 7 +++ .../party/_2a03/mc/util/PlayerPosition.java | 1 - 5 files changed, 66 insertions(+), 41 deletions(-) diff --git a/src/main/java/party/_2a03/mc/command/HomeCommand.java b/src/main/java/party/_2a03/mc/command/HomeCommand.java index 224998e..5cf41d0 100644 --- a/src/main/java/party/_2a03/mc/command/HomeCommand.java +++ b/src/main/java/party/_2a03/mc/command/HomeCommand.java @@ -8,7 +8,7 @@ import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.LiteralText; import net.minecraft.util.registry.RegistryKey; -import party._2a03.mc.util.Config; +import party._2a03.mc.util.Database; import party._2a03.mc.util.PlayerData; import party._2a03.mc.util.PlayerPosition; @@ -17,7 +17,7 @@ public class HomeCommand { LiteralArgumentBuilder literalargumentbuilder = CommandManager.literal("home").executes(ctx -> { ServerCommandSource source = ctx.getSource(); ServerPlayerEntity sender = source.getPlayer(); - PlayerPosition position = Config.getPlayer(sender.getUuid().toString()).getHome(); + PlayerPosition position = Database.getPlayer(sender.getUuid().toString()).getHome(); if (position.registrykey == null) { source.sendFeedback(new LiteralText("Home not found, do /home set"), false); return -1; @@ -30,7 +30,7 @@ public class HomeCommand { literalargumentbuilder.then(CommandManager.literal("set").executes(ctx -> { ServerCommandSource source = ctx.getSource(); ServerPlayerEntity sender = source.getPlayer(); - PlayerData playerdata = Config.getPlayer(sender.getUuid().toString()); + PlayerData playerdata = Database.getPlayer(sender.getUuid().toString()); double x = sender.getX(); double y = sender.getY(); double z = sender.getZ(); @@ -39,7 +39,6 @@ public class HomeCommand { RegistryKey registrykey = sender.getServerWorld().getRegistryKey(); PlayerPosition location = new PlayerPosition(x, y, z, yaw, pitch, registrykey); playerdata.setHome(location); - Config.setPlayer(playerdata); source.sendFeedback(new LiteralText("Your home has been updated"), true); return 1; })); @@ -49,7 +48,7 @@ public class HomeCommand { }).then(CommandManager.argument("UUID", StringArgumentType.word()).executes(ctx -> { ServerCommandSource source = ctx.getSource(); ServerPlayerEntity sender = source.getPlayer(); - PlayerData playerdata = Config.getPlayer(StringArgumentType.getString(ctx, "UUID")); + PlayerData playerdata = Database.getPlayer(StringArgumentType.getString(ctx, "UUID")); double x = sender.getX(); double y = sender.getY(); double z = sender.getZ(); @@ -58,7 +57,6 @@ public class HomeCommand { RegistryKey registrykey = sender.getServerWorld().getRegistryKey(); PlayerPosition location = new PlayerPosition(x, y, z, yaw, pitch, registrykey); playerdata.setHome(location); - Config.setPlayer(playerdata); source.sendFeedback(new LiteralText("User's home has been updated (" + StringArgumentType.getString(ctx, "UUID") + ")"), true); return 1; }))); diff --git a/src/main/java/party/_2a03/mc/util/Config.java b/src/main/java/party/_2a03/mc/util/Config.java index 735fa09..1c54cad 100644 --- a/src/main/java/party/_2a03/mc/util/Config.java +++ b/src/main/java/party/_2a03/mc/util/Config.java @@ -44,40 +44,6 @@ public class Config { LOGGER.info("Configuration loaded"); } - public static PlayerData getPlayer(String uuid) { - JSONArray members = json.getJSONArray("members"); - PlayerPosition home = null; - for (int i = 0; i < members.length(); ++i) { - JSONObject item = members.getJSONObject(i); - String item_uuid = item.getString("uuid"); - if (item_uuid.equals(uuid)) { - home = new PlayerPosition(item.getJSONArray("home")); - } - } - if (home == null) { - home = new PlayerPosition(); - } - return new PlayerData(uuid, home); - } - - public static void setPlayer(PlayerData player) { - JSONArray members = json.getJSONArray("members"); - int playerIndex = -1; - for (int i = 0; i < members.length(); ++i) { - JSONObject item = members.getJSONObject(i); - String item_uuid = item.getString("uuid"); - if (item_uuid.equals(player.getUUID())) { - playerIndex = i; - } - } - if (playerIndex >= 0) { - members.remove(playerIndex); - } - members.put(player.getJSON()); - json.put("members", members); - saveConfig(); - } - public static JSONArray getData(String key) { return json.getJSONArray(key); } diff --git a/src/main/java/party/_2a03/mc/util/Database.java b/src/main/java/party/_2a03/mc/util/Database.java index 33f17cc..23a262b 100644 --- a/src/main/java/party/_2a03/mc/util/Database.java +++ b/src/main/java/party/_2a03/mc/util/Database.java @@ -3,9 +3,15 @@ package party._2a03.mc.util; import java.io.File; import java.sql.Connection; import java.sql.DriverManager; +import java.sql.Statement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; import java.sql.SQLException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.json.JSONArray; +import party._2a03.mc.util.PlayerData; +import party._2a03.mc.util.PlayerPosition; public class Database { private static final Logger LOGGER = LogManager.getLogger(); @@ -21,6 +27,19 @@ public class Database { String url = "jdbc:sqlite:"; url = url.concat(file.getPath()); conn = DriverManager.getConnection(url); + try { + Statement stmt; + stmt = conn.createStatement(); + stmt.executeUpdate( + "CREATE TABLE IF NOT EXISTS players (" + + "uuid TEXT NOT NULL UNIQUE," + + "home TEXT," + + "PRIMARY KEY(uuid)" + + ");"); + stmt.close(); + } catch (SQLException e) { + LOGGER.error(e.getMessage(), e); + } LOGGER.info("Database loaded"); } @@ -33,4 +52,40 @@ public class Database { LOGGER.error(e.getMessage(), e); } } + + public static PlayerData getPlayer(String uuid) { + try { + PreparedStatement pstmt; + pstmt = conn.prepareStatement( + "SELECT home FROM players WHERE uuid = ?;"); + pstmt.setString(1, uuid); + ResultSet res = pstmt.executeQuery(); + if (res.next()) { + PlayerPosition home = new PlayerPosition(new JSONArray(res.getString("home"))); + return new PlayerData(uuid, home); + } + pstmt.close(); + } catch (SQLException e) { + LOGGER.error(e.getMessage(), e); + } + return new PlayerData(uuid); + } + + public static void setPlayerHome(String uuid, PlayerPosition home) { + try { + PreparedStatement pstmt; + pstmt = conn.prepareStatement( + "INSERT INTO players (uuid, home) " + + "VALUES(?, ?) " + + "ON CONFLICT(uuid) " + + "DO UPDATE SET home=?;"); + pstmt.setString(1, uuid); + pstmt.setString(2, home.getJSON().toString()); + pstmt.setString(3, home.getJSON().toString()); + pstmt.executeUpdate(); + pstmt.close(); + } catch (SQLException e) { + LOGGER.error(e.getMessage(), e); + } + } } diff --git a/src/main/java/party/_2a03/mc/util/PlayerData.java b/src/main/java/party/_2a03/mc/util/PlayerData.java index e411160..73204f0 100644 --- a/src/main/java/party/_2a03/mc/util/PlayerData.java +++ b/src/main/java/party/_2a03/mc/util/PlayerData.java @@ -2,12 +2,18 @@ package party._2a03.mc.util; import org.json.JSONArray; import org.json.JSONObject; +import party._2a03.mc.util.Database; import party._2a03.mc.util.PlayerPosition; public class PlayerData { private String uuid; private PlayerPosition home; + public PlayerData(String p_uuid) { + this.uuid = p_uuid; + this.home = new PlayerPosition(); + } + public PlayerData(String p_uuid, PlayerPosition p_home) { this.uuid = p_uuid; this.home = p_home; @@ -23,6 +29,7 @@ public class PlayerData { public void setHome(PlayerPosition location) { this.home = location; + Database.setPlayerHome(this.uuid, this.home); } public JSONObject getJSON() { diff --git a/src/main/java/party/_2a03/mc/util/PlayerPosition.java b/src/main/java/party/_2a03/mc/util/PlayerPosition.java index b297c26..82b9fc0 100644 --- a/src/main/java/party/_2a03/mc/util/PlayerPosition.java +++ b/src/main/java/party/_2a03/mc/util/PlayerPosition.java @@ -4,7 +4,6 @@ import org.json.JSONArray; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryKey; -import party._2a03.mc.util.Config; public class PlayerPosition { public double x;