Add additional checks and error handling when setting health

feat/data-edit-commands
William 2 years ago
parent cf7912a89e
commit 30dd48ce88

@ -90,8 +90,8 @@ public class BukkitPlayer extends OnlineUser {
@Override @Override
public CompletableFuture<Void> setStatus(@NotNull StatusData statusData, @NotNull Settings settings) { public CompletableFuture<Void> setStatus(@NotNull StatusData statusData, @NotNull Settings settings) {
return CompletableFuture.runAsync(() -> { return CompletableFuture.runAsync(() -> {
double currentMaxHealth = Objects.requireNonNull(player.getAttribute(Attribute.GENERIC_MAX_HEALTH)) // Set max health
.getBaseValue(); double currentMaxHealth = Objects.requireNonNull(player.getAttribute(Attribute.GENERIC_MAX_HEALTH)).getBaseValue();
if (settings.getSynchronizationFeature(Settings.SynchronizationFeature.MAX_HEALTH)) { if (settings.getSynchronizationFeature(Settings.SynchronizationFeature.MAX_HEALTH)) {
if (statusData.maxHealth != 0d) { if (statusData.maxHealth != 0d) {
Objects.requireNonNull(player.getAttribute(Attribute.GENERIC_MAX_HEALTH)) Objects.requireNonNull(player.getAttribute(Attribute.GENERIC_MAX_HEALTH))
@ -100,22 +100,33 @@ public class BukkitPlayer extends OnlineUser {
} }
} }
if (settings.getSynchronizationFeature(Settings.SynchronizationFeature.HEALTH)) { if (settings.getSynchronizationFeature(Settings.SynchronizationFeature.HEALTH)) {
// Set health
final double currentHealth = player.getHealth(); final double currentHealth = player.getHealth();
if (statusData.health != currentHealth) { if (statusData.health != currentHealth) {
final double healthToSet = currentHealth > currentMaxHealth ? currentMaxHealth : statusData.health; final double healthToSet = currentHealth > currentMaxHealth ? currentMaxHealth : statusData.health;
if (healthToSet < 1) { final double maxHealth = currentMaxHealth;
Bukkit.getScheduler().runTask(BukkitHuskSync.getInstance(), () -> player.setHealth(healthToSet)); Bukkit.getScheduler().runTask(BukkitHuskSync.getInstance(), () -> {
} else { try {
player.setHealth(Math.min(healthToSet, currentMaxHealth)); 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);
} }
});
} }
// Set health scale
try {
if (statusData.healthScale != 0d) { if (statusData.healthScale != 0d) {
player.setHealthScale(statusData.healthScale); player.setHealthScale(statusData.healthScale);
} else { } else {
player.setHealthScale(statusData.maxHealth); player.setHealthScale(statusData.maxHealth);
} }
player.setHealthScaled(statusData.healthScale != 0D); 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);
}
} }
if (settings.getSynchronizationFeature(Settings.SynchronizationFeature.HUNGER)) { if (settings.getSynchronizationFeature(Settings.SynchronizationFeature.HUNGER)) {
player.setFoodLevel(statusData.hunger); player.setFoodLevel(statusData.hunger);

Loading…
Cancel
Save