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..6609c2f7 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; @@ -120,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 2856289c..d18c8620 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); + final 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) { @@ -420,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/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) 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 5c0f98d6..274c23c6 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 26a63935..5a918dac 100644 --- a/common/src/main/java/net/william278/husksync/player/OnlineUser.java +++ b/common/src/main/java/net/william278/husksync/player/OnlineUser.java @@ -149,13 +149,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 * @@ -192,7 +185,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; 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