From b3e4fbb3de49b81d17befdd77dbd7c7b4d07da10 Mon Sep 17 00:00:00 2001 From: William Date: Thu, 9 Jun 2022 12:22:31 +0100 Subject: [PATCH 1/5] Update a few jitpack links to use net.william278 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 746c1f2a..5e0dff02 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,7 @@ Most likely not - and I cannot support it - but feel free to test it, as dependi ### API HuskSync has an API for Bukkit providing events that fire when synchronisation takes place as well as a method to access and deserialize player data on demand. There is no API for the proxy side currently. -HuskSync's API is available on [JitPack](https://jitpack.io/#WiIIiam278/HuskSync/Tag). You can view the [HuskSync JavaDocs here](https://javadoc.jitpack.io/com/github/WiIIiam278/HuskSync/latest/javadoc/index.html). You should only use stuff in the `husksync.bukkit.api` and `husksync.bukkit.data` packages (as well as the PlayerData class located in the `husksync` root package. +HuskSync's API is available on [JitPack](https://jitpack.io/#net.william278/HuskSync/Tag). You can view the [HuskSync JavaDocs here](https://javadoc.jitpack.io/net/william278/HuskSync/latest/javadoc/index.html). You should only use stuff in the `husksync.bukkit.api` and `husksync.bukkit.data` packages (as well as the PlayerData class located in the `husksync` root package. #### Including the API in your project With Maven, add the repository to your pom.xml: @@ -133,7 +133,7 @@ With Maven, add the repository to your pom.xml: ``` -Then, add the dependency. Replace `version` with the latest version of HuskSync: [![](https://jitpack.io/v/WiIIiam278/HuskSync.svg)](https://jitpack.io/#WiIIiam278/HuskSync) +Then, add the dependency. Replace `version` with the latest version of HuskSync: [![](https://jitpack.io/v/WiIIiam278/HuskSync.svg)](https://jitpack.io/#net.william278/HuskSync) ```xml net.william278 From 7d38b9941e2780d69dccdc157b57925eebd0f392 Mon Sep 17 00:00:00 2001 From: William Date: Mon, 4 Jul 2022 09:57:12 +0100 Subject: [PATCH 2/5] Don't sync now-dead players --- .../net/william278/husksync/bukkit/util/PlayerSetter.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/bukkit/src/main/java/net/william278/husksync/bukkit/util/PlayerSetter.java b/bukkit/src/main/java/net/william278/husksync/bukkit/util/PlayerSetter.java index c2bcd52b..5f8fc70c 100644 --- a/bukkit/src/main/java/net/william278/husksync/bukkit/util/PlayerSetter.java +++ b/bukkit/src/main/java/net/william278/husksync/bukkit/util/PlayerSetter.java @@ -154,6 +154,10 @@ public class PlayerSetter { // Set the player's data from the PlayerData try { + // Don't sync the player if they are dead + if (player.isDead() || player.getHealth() <= 0) { + return; + } if (Settings.syncAdvancements) { List advancementRecords = DataSerializer.deserializeAdvancementData(data.getSerializedAdvancements()); @@ -175,6 +179,10 @@ public class PlayerSetter { setPlayerAdvancements(player, advancementRecords, data); } } + // Don't sync the player if they are dead + if (player.isDead() || player.getHealth() <= 0) { + return; + } if (Settings.syncInventories) { setPlayerInventory(player, DataSerializer.deserializeInventory(data.getSerializedInventory())); player.getInventory().setHeldItemSlot(data.getSelectedSlot()); From 649b7c085702131a203b8dde91c0efae11ec57ae Mon Sep 17 00:00:00 2001 From: William Date: Mon, 4 Jul 2022 09:58:16 +0100 Subject: [PATCH 3/5] Bump to 1.4.1 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 86c87c62..643a983c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ javaVersion=16 -plugin_version=1.4 +plugin_version=1.4.1 plugin_archive=husksync \ No newline at end of file From 8e5b794b6d793b446ad7bf7414dc0a80ad4fe9b9 Mon Sep 17 00:00:00 2001 From: William Date: Mon, 4 Jul 2022 10:26:10 +0100 Subject: [PATCH 4/5] Still fire synccomplete for dead player syncs --- .../java/net/william278/husksync/bukkit/util/PlayerSetter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/bukkit/src/main/java/net/william278/husksync/bukkit/util/PlayerSetter.java b/bukkit/src/main/java/net/william278/husksync/bukkit/util/PlayerSetter.java index 5f8fc70c..f28d9433 100644 --- a/bukkit/src/main/java/net/william278/husksync/bukkit/util/PlayerSetter.java +++ b/bukkit/src/main/java/net/william278/husksync/bukkit/util/PlayerSetter.java @@ -181,6 +181,7 @@ public class PlayerSetter { } // Don't sync the player if they are dead if (player.isDead() || player.getHealth() <= 0) { + Bukkit.getPluginManager().callEvent(new SyncCompleteEvent(player, data)); return; } if (Settings.syncInventories) { From 948887c90f995e575de11c71c766040a7549ff6e Mon Sep 17 00:00:00 2001 From: William Date: Mon, 4 Jul 2022 13:16:10 +0100 Subject: [PATCH 5/5] (MySQL) - fix uuid generation --- .../husksync/proxy/data/DataManager.java | 74 +++++++++---------- gradle.properties | 2 +- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/common/src/main/java/net/william278/husksync/proxy/data/DataManager.java b/common/src/main/java/net/william278/husksync/proxy/data/DataManager.java index e51df57c..49d0e972 100644 --- a/common/src/main/java/net/william278/husksync/proxy/data/DataManager.java +++ b/common/src/main/java/net/william278/husksync/proxy/data/DataManager.java @@ -235,10 +235,44 @@ public class DataManager { } private void updatePlayerSQLData(PlayerData playerData, Settings.SynchronisationCluster cluster) { - try (Connection connection = getConnection(cluster.clusterId())) { + try (Connection connection = getConnection(cluster.clusterId())) { //todo sqlite incompatible + try (PreparedStatement statement = connection.prepareStatement( + "UPDATE " + cluster.dataTableName() + " SET `version_uuid`=UUID(), `timestamp`=?, `inventory`=?, `ender_chest`=?, `health`=?, `max_health`=?, `health_scale`=?, `hunger`=?, `saturation`=?, `saturation_exhaustion`=?, `selected_slot`=?, `status_effects`=?, `total_experience`=?, `exp_level`=?, `exp_progress`=?, `game_mode`=?, `statistics`=?, `is_flying`=?, `advancements`=?, `location`=? WHERE `player_id`=(SELECT `id` FROM " + cluster.playerTableName() + " WHERE `uuid`=?);")) { + //statement.setString(1, playerData.getDataVersionUUID().toString()); + statement.setTimestamp(1, new Timestamp(System.currentTimeMillis())); + statement.setString(2, playerData.getSerializedInventory()); + statement.setString(3, playerData.getSerializedEnderChest()); + statement.setDouble(4, playerData.getHealth()); // Health + statement.setDouble(5, playerData.getMaxHealth()); // Max health + statement.setDouble(6, playerData.getHealthScale()); // Health scale + statement.setInt(7, playerData.getHunger()); // Hunger + statement.setFloat(8, playerData.getSaturation()); // Saturation + statement.setFloat(9, playerData.getSaturationExhaustion()); // Saturation exhaustion + statement.setInt(10, playerData.getSelectedSlot()); // Current selected slot + statement.setString(11, playerData.getSerializedEffectData()); // Status effects + statement.setInt(12, playerData.getTotalExperience()); // Total Experience + statement.setInt(13, playerData.getExpLevel()); // Exp level + statement.setFloat(14, playerData.getExpProgress()); // Exp progress + statement.setString(15, playerData.getGameMode()); // GameMode + statement.setString(16, playerData.getSerializedStatistics()); // Statistics + statement.setBoolean(17, playerData.isFlying()); // Is flying + statement.setString(18, playerData.getSerializedAdvancements()); // Advancements + statement.setString(19, playerData.getSerializedLocation()); // Location + + statement.setString(20, playerData.getPlayerUUID().toString()); + statement.executeUpdate(); + } + } catch (SQLException e) { + logger.log(Level.SEVERE, "An SQL exception occurred", e); + } + } + + private void insertPlayerData(PlayerData playerData, Settings.SynchronisationCluster cluster) { + try (Connection connection = getConnection(cluster.clusterId())) { //todo sqlite incompatible try (PreparedStatement statement = connection.prepareStatement( - "UPDATE " + cluster.dataTableName() + " SET `version_uuid`=?, `timestamp`=?, `inventory`=?, `ender_chest`=?, `health`=?, `max_health`=?, `health_scale`=?, `hunger`=?, `saturation`=?, `saturation_exhaustion`=?, `selected_slot`=?, `status_effects`=?, `total_experience`=?, `exp_level`=?, `exp_progress`=?, `game_mode`=?, `statistics`=?, `is_flying`=?, `advancements`=?, `location`=? WHERE `player_id`=(SELECT `id` FROM " + cluster.playerTableName() + " WHERE `uuid`=?);")) { - statement.setString(1, playerData.getDataVersionUUID().toString()); + "INSERT INTO " + cluster.dataTableName() + " (`player_id`,`version_uuid`,`timestamp`,`inventory`,`ender_chest`,`health`,`max_health`,`health_scale`,`hunger`,`saturation`,`saturation_exhaustion`,`selected_slot`,`status_effects`,`total_experience`,`exp_level`,`exp_progress`,`game_mode`,`statistics`,`is_flying`,`advancements`,`location`) VALUES((SELECT `id` FROM " + cluster.playerTableName() + " WHERE `uuid`=?),UUID(),?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);")) { + statement.setString(1, playerData.getPlayerUUID().toString()); + //statement.setString(2, playerData.getDataVersionUUID().toString()); statement.setTimestamp(2, new Timestamp(System.currentTimeMillis())); statement.setString(3, playerData.getSerializedInventory()); statement.setString(4, playerData.getSerializedEnderChest()); @@ -259,40 +293,6 @@ public class DataManager { statement.setString(19, playerData.getSerializedAdvancements()); // Advancements statement.setString(20, playerData.getSerializedLocation()); // Location - statement.setString(21, playerData.getPlayerUUID().toString()); - statement.executeUpdate(); - } - } catch (SQLException e) { - logger.log(Level.SEVERE, "An SQL exception occurred", e); - } - } - - private void insertPlayerData(PlayerData playerData, Settings.SynchronisationCluster cluster) { - try (Connection connection = getConnection(cluster.clusterId())) { - try (PreparedStatement statement = connection.prepareStatement( - "INSERT INTO " + cluster.dataTableName() + " (`player_id`,`version_uuid`,`timestamp`,`inventory`,`ender_chest`,`health`,`max_health`,`health_scale`,`hunger`,`saturation`,`saturation_exhaustion`,`selected_slot`,`status_effects`,`total_experience`,`exp_level`,`exp_progress`,`game_mode`,`statistics`,`is_flying`,`advancements`,`location`) VALUES((SELECT `id` FROM " + cluster.playerTableName() + " WHERE `uuid`=?),?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);")) { - statement.setString(1, playerData.getPlayerUUID().toString()); - statement.setString(2, playerData.getDataVersionUUID().toString()); - statement.setTimestamp(3, new Timestamp(System.currentTimeMillis())); - statement.setString(4, playerData.getSerializedInventory()); - statement.setString(5, playerData.getSerializedEnderChest()); - statement.setDouble(6, playerData.getHealth()); // Health - statement.setDouble(7, playerData.getMaxHealth()); // Max health - statement.setDouble(8, playerData.getHealthScale()); // Health scale - statement.setInt(9, playerData.getHunger()); // Hunger - statement.setFloat(10, playerData.getSaturation()); // Saturation - statement.setFloat(11, playerData.getSaturationExhaustion()); // Saturation exhaustion - statement.setInt(12, playerData.getSelectedSlot()); // Current selected slot - statement.setString(13, playerData.getSerializedEffectData()); // Status effects - statement.setInt(14, playerData.getTotalExperience()); // Total Experience - statement.setInt(15, playerData.getExpLevel()); // Exp level - statement.setFloat(16, playerData.getExpProgress()); // Exp progress - statement.setString(17, playerData.getGameMode()); // GameMode - statement.setString(18, playerData.getSerializedStatistics()); // Statistics - statement.setBoolean(19, playerData.isFlying()); // Is flying - statement.setString(20, playerData.getSerializedAdvancements()); // Advancements - statement.setString(21, playerData.getSerializedLocation()); // Location - statement.executeUpdate(); } } catch (SQLException e) { diff --git a/gradle.properties b/gradle.properties index 643a983c..7874a27a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ javaVersion=16 -plugin_version=1.4.1 +plugin_version=1.4.2 plugin_archive=husksync \ No newline at end of file