From 8b7b32906e54e0ece95f1cb14c64a03f37759498 Mon Sep 17 00:00:00 2001 From: Hugo Planque Date: Wed, 13 Jul 2022 01:11:38 +0200 Subject: [PATCH 1/6] hotfix(Bukkit): fix death sync event when setting health of 0 --- .../java/net/william278/husksync/player/BukkitPlayer.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java b/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java index 2856289c..88b89068 100644 --- a/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java +++ b/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java @@ -82,7 +82,12 @@ public class BukkitPlayer extends OnlineUser { if (statusDataFlags.contains(StatusDataFlag.SET_HEALTH)) { final double currentHealth = player.getHealth(); if (statusData.health != currentHealth) { - player.setHealth(currentHealth > currentMaxHealth ? currentMaxHealth : statusData.health); + double healthToSet = currentHealth > currentMaxHealth ? currentMaxHealth : statusData.health; + if (healthToSet <= 0) { + Bukkit.getScheduler().runTask(BukkitHuskSync.getInstance(), () -> player.setHealth(healthToSet)); + } else { + player.setHealth(healthToSet); + } } if (statusData.healthScale != 0d) { From 221baa7b04458a3a5329b0792fd75b4f4d8a974b Mon Sep 17 00:00:00 2001 From: Hugo Planque Date: Wed, 13 Jul 2022 09:52:31 +0200 Subject: [PATCH 2/6] switch variable to final --- .../main/java/net/william278/husksync/player/BukkitPlayer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java b/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java index 88b89068..ce6daa9d 100644 --- a/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java +++ b/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java @@ -82,7 +82,7 @@ public class BukkitPlayer extends OnlineUser { if (statusDataFlags.contains(StatusDataFlag.SET_HEALTH)) { final double currentHealth = player.getHealth(); if (statusData.health != currentHealth) { - double healthToSet = currentHealth > currentMaxHealth ? currentMaxHealth : statusData.health; + final double healthToSet = currentHealth > currentMaxHealth ? currentMaxHealth : statusData.health; if (healthToSet <= 0) { Bukkit.getScheduler().runTask(BukkitHuskSync.getInstance(), () -> player.setHealth(healthToSet)); } else { From 268c351a95dac8ff8433f0ff905400b65d34826c Mon Sep 17 00:00:00 2001 From: Hugo Planque Date: Wed, 13 Jul 2022 12:42:38 +0200 Subject: [PATCH 3/6] Clear inventory on death if player still not synced to avoid dupes --- .../william278/husksync/listener/BukkitEventListener.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/bukkit/src/main/java/net/william278/husksync/listener/BukkitEventListener.java b/bukkit/src/main/java/net/william278/husksync/listener/BukkitEventListener.java index 529334e0..0be4fada 100644 --- a/bukkit/src/main/java/net/william278/husksync/listener/BukkitEventListener.java +++ b/bukkit/src/main/java/net/william278/husksync/listener/BukkitEventListener.java @@ -15,6 +15,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryOpenEvent; @@ -53,6 +54,13 @@ public class BukkitEventListener extends EventListener implements Listener { .map(BukkitPlayer::adapt).collect(Collectors.toList()))); } + @EventHandler(ignoreCancelled = true) + public void onPlayerDeath(PlayerDeathEvent event) { + if (cancelPlayerEvent(BukkitPlayer.adapt(event.getEntity()))) { + event.getDrops().clear(); + } + } + @EventHandler(ignoreCancelled = true) public void onInventoryClose(@NotNull InventoryCloseEvent event) { CompletableFuture.runAsync(() -> { From 9d6da91a5e1b6c1ed21ab5cc93ebe3f7ae94b057 Mon Sep 17 00:00:00 2001 From: William Date: Wed, 13 Jul 2022 11:48:09 +0100 Subject: [PATCH 4/6] Bump up to 2.1 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 8d5cd6a9..20a73e28 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,5 +3,5 @@ org.gradle.jvmargs='-Dfile.encoding=UTF-8' org.gradle.daemon=true javaVersion=16 -plugin_version=2.0 +plugin_version=2.1 plugin_archive=husksync \ No newline at end of file From 10b3eb5a43e965cd42eade0a145775e60b04c8d1 Mon Sep 17 00:00:00 2001 From: William Date: Wed, 13 Jul 2022 12:21:38 +0100 Subject: [PATCH 5/6] Properly synchronise player death states --- .../husksync/listener/BukkitEventListener.java | 14 +++++++------- .../william278/husksync/player/BukkitPlayer.java | 5 ----- .../husksync/listener/EventListener.java | 3 --- .../net/william278/husksync/player/OnlineUser.java | 9 +-------- .../william278/husksync/player/DummyPlayer.java | 5 ----- 5 files changed, 8 insertions(+), 28 deletions(-) diff --git a/bukkit/src/main/java/net/william278/husksync/listener/BukkitEventListener.java b/bukkit/src/main/java/net/william278/husksync/listener/BukkitEventListener.java index 0be4fada..6609c2f7 100644 --- a/bukkit/src/main/java/net/william278/husksync/listener/BukkitEventListener.java +++ b/bukkit/src/main/java/net/william278/husksync/listener/BukkitEventListener.java @@ -54,13 +54,6 @@ public class BukkitEventListener extends EventListener implements Listener { .map(BukkitPlayer::adapt).collect(Collectors.toList()))); } - @EventHandler(ignoreCancelled = true) - public void onPlayerDeath(PlayerDeathEvent event) { - if (cancelPlayerEvent(BukkitPlayer.adapt(event.getEntity()))) { - event.getDrops().clear(); - } - } - @EventHandler(ignoreCancelled = true) public void onInventoryClose(@NotNull InventoryCloseEvent event) { CompletableFuture.runAsync(() -> { @@ -128,4 +121,11 @@ public class BukkitEventListener extends EventListener implements Listener { } } + @EventHandler(ignoreCancelled = true) + public void onPlayerDeath(PlayerDeathEvent event) { + if (cancelPlayerEvent(BukkitPlayer.adapt(event.getEntity()))) { + event.getDrops().clear(); + } + } + } diff --git a/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java b/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java index ce6daa9d..d18c8620 100644 --- a/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java +++ b/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java @@ -425,11 +425,6 @@ public class BukkitPlayer extends OnlineUser { }); } - @Override - public boolean isDead() { - return player.getHealth() <= 0d; - } - @Override public boolean isOffline() { try { diff --git a/common/src/main/java/net/william278/husksync/listener/EventListener.java b/common/src/main/java/net/william278/husksync/listener/EventListener.java index 019002f7..c2e634f0 100644 --- a/common/src/main/java/net/william278/husksync/listener/EventListener.java +++ b/common/src/main/java/net/william278/husksync/listener/EventListener.java @@ -50,9 +50,6 @@ public abstract class EventListener { * @param user The {@link OnlineUser} to handle */ protected final void handlePlayerJoin(@NotNull OnlineUser user) { - if (user.isDead()) { - return; - } usersAwaitingSync.add(user.uuid); CompletableFuture.runAsync(() -> { try { diff --git a/common/src/main/java/net/william278/husksync/player/OnlineUser.java b/common/src/main/java/net/william278/husksync/player/OnlineUser.java index c9007828..a8bc1a46 100644 --- a/common/src/main/java/net/william278/husksync/player/OnlineUser.java +++ b/common/src/main/java/net/william278/husksync/player/OnlineUser.java @@ -148,13 +148,6 @@ public abstract class OnlineUser extends User { */ public abstract CompletableFuture setPersistentDataContainer(@NotNull PersistentDataContainerData persistentDataContainerData); - /** - * Indicates if the player is currently dead - * - * @return {@code true} if the player is dead ({@code health <= 0}); {@code false} otherwise - */ - public abstract boolean isDead(); - /** * Indicates if the player has gone offline * @@ -191,7 +184,7 @@ public abstract class OnlineUser extends User { final PreSyncEvent preSyncEvent = (PreSyncEvent) eventCannon.firePreSyncEvent(this, data).join(); final UserData finalData = preSyncEvent.getUserData(); final List> dataSetOperations = new ArrayList<>() {{ - if (!isOffline() && !isDead() && !preSyncEvent.isCancelled()) { + if (!isOffline() && !preSyncEvent.isCancelled()) { if (settings.getBooleanValue(Settings.ConfigOption.SYNCHRONIZATION_SYNC_INVENTORIES)) { add(setInventory(finalData.getInventoryData())); } diff --git a/common/src/test/java/net/william278/husksync/player/DummyPlayer.java b/common/src/test/java/net/william278/husksync/player/DummyPlayer.java index fdd17d46..f4f3053f 100644 --- a/common/src/test/java/net/william278/husksync/player/DummyPlayer.java +++ b/common/src/test/java/net/william278/husksync/player/DummyPlayer.java @@ -124,11 +124,6 @@ public class DummyPlayer extends OnlineUser { }); } - @Override - public boolean isDead() { - return false; - } - @Override public boolean isOffline() { return false; From ebf5b77f001e669c0142eedfdbe2c940e3ed5e54 Mon Sep 17 00:00:00 2001 From: William Date: Wed, 13 Jul 2022 12:22:56 +0100 Subject: [PATCH 6/6] Add credit to HookWoods --- .../src/main/java/net/william278/husksync/config/Locales.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/william278/husksync/config/Locales.java b/common/src/main/java/net/william278/husksync/config/Locales.java index 27117b1f..b4241f7f 100644 --- a/common/src/main/java/net/william278/husksync/config/Locales.java +++ b/common/src/main/java/net/william278/husksync/config/Locales.java @@ -18,7 +18,7 @@ public class Locales { [HuskSync](#00fb9a bold) [| Version %version%](#00fb9a) [A modern, cross-server player data synchronization system](gray) [• Author:](white) [William278](gray show_text=&7Click to visit website open_url=https://william278.net) - [• Contributors:](white) [HarvelsX](gray show_text=&7Code) + [• Contributors:](white) [HarvelsX](gray show_text=&7Code), [HookWoods](gray show_text=&7Code) [• Translators:](white) [Namiu](gray show_text=&7\\(うにたろう\\) - Japanese, ja-jp), [anchelthe](gray show_text=&7Spanish, es-es), [Melonzio](gray show_text=&7Spanish, es-es), [Ceddix](gray show_text=&7German, de-de), [mateusneresrb](gray show_text=&7Brazilian Portuguese, pt-br], [小蔡](gray show_text=&7Traditional Chinese, zh-tw), [Ghost-chu](gray show_text=&7Simplified Chinese, zh-cn), [DJelly4K](gray show_text=&7Simplified Chinese, zh-cn), [Thourgard](gray show_text=&7Ukrainian, uk-ua), [xF3d3](gray show_text=&7Italian, it-it) [• Documentation:](white) [[Link]](#00fb9a show_text=&7Click to open link open_url=https://william278.net/docs/husksync/Home/) [• Bug reporting:](white) [[Link]](#00fb9a show_text=&7Click to open link open_url=https://github.com/WiIIiam278/HuskSync/issues)