From 30dd48ce8833de03e9da6fa703964b47349cc1e2 Mon Sep 17 00:00:00 2001 From: William Date: Tue, 3 Jan 2023 12:14:18 +0000 Subject: [PATCH] Add additional checks and error handling when setting health --- .../husksync/player/BukkitPlayer.java | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) 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 55154a20..e60f2795 100644 --- a/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java +++ b/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java @@ -90,8 +90,8 @@ public class BukkitPlayer extends OnlineUser { @Override public CompletableFuture setStatus(@NotNull StatusData statusData, @NotNull Settings settings) { return CompletableFuture.runAsync(() -> { - double currentMaxHealth = Objects.requireNonNull(player.getAttribute(Attribute.GENERIC_MAX_HEALTH)) - .getBaseValue(); + // Set max health + double currentMaxHealth = Objects.requireNonNull(player.getAttribute(Attribute.GENERIC_MAX_HEALTH)).getBaseValue(); if (settings.getSynchronizationFeature(Settings.SynchronizationFeature.MAX_HEALTH)) { if (statusData.maxHealth != 0d) { Objects.requireNonNull(player.getAttribute(Attribute.GENERIC_MAX_HEALTH)) @@ -100,22 +100,33 @@ public class BukkitPlayer extends OnlineUser { } } if (settings.getSynchronizationFeature(Settings.SynchronizationFeature.HEALTH)) { + // Set health final double currentHealth = player.getHealth(); if (statusData.health != currentHealth) { final double healthToSet = currentHealth > currentMaxHealth ? currentMaxHealth : statusData.health; - if (healthToSet < 1) { - Bukkit.getScheduler().runTask(BukkitHuskSync.getInstance(), () -> player.setHealth(healthToSet)); - } else { - player.setHealth(Math.min(healthToSet, currentMaxHealth)); - } + final double maxHealth = currentMaxHealth; + Bukkit.getScheduler().runTask(BukkitHuskSync.getInstance(), () -> { + try { + player.setHealth(Math.min(healthToSet, maxHealth)); + } catch (IllegalArgumentException e) { + BukkitHuskSync.getInstance().getLogger().log(Level.WARNING, + "Failed to set health of player " + player.getName() + " to " + healthToSet); + } + }); } - if (statusData.healthScale != 0d) { - player.setHealthScale(statusData.healthScale); - } else { - player.setHealthScale(statusData.maxHealth); + // Set health scale + try { + if (statusData.healthScale != 0d) { + player.setHealthScale(statusData.healthScale); + } else { + player.setHealthScale(statusData.maxHealth); + } + player.setHealthScaled(statusData.healthScale != 0D); + } catch (IllegalArgumentException e) { + BukkitHuskSync.getInstance().getLogger().log(Level.WARNING, + "Failed to set health scale of player " + player.getName() + " to " + statusData.healthScale); } - player.setHealthScaled(statusData.healthScale != 0D); } if (settings.getSynchronizationFeature(Settings.SynchronizationFeature.HUNGER)) { player.setFoodLevel(statusData.hunger);