diff --git a/src/main/java/org/mvplugins/multiverse/inventories/share/Sharables.java b/src/main/java/org/mvplugins/multiverse/inventories/share/Sharables.java index dc94c24a..80eb885e 100644 --- a/src/main/java/org/mvplugins/multiverse/inventories/share/Sharables.java +++ b/src/main/java/org/mvplugins/multiverse/inventories/share/Sharables.java @@ -191,6 +191,7 @@ public boolean updatePlayer(Player player, ProfileData profile) { /** * Sharing Max Health. */ + //todo: maybe store attribute modifier as well public static final Sharable MAX_HEALTH = new Sharable.Builder<>("max_hit_points", Double.class, new SharableHandler() { @Override @@ -231,22 +232,22 @@ public void updateProfile(ProfileData profile, Player player) { @Override public boolean updatePlayer(Player player, ProfileData profile) { Double value = profile.get(HEALTH); - if (value == null) { - player.setHealth(PlayerStats.HEALTH); - return false; - } try { + if (value == null) { + player.setHealth(PlayerStats.HEALTH); + return false; + } double maxHealth = getMaxHealth(player); // This share may handled before MAX_HEALTH. // Thus this is needed to ensure there is no loss in health stored if (value > maxHealth) { Option.of(maxHealthAttr).map(player::getAttribute) - .peek(attr -> attr.setBaseValue(maxHealth)); + .peek(attr -> attr.setBaseValue(value)); } player.setHealth(value); } catch (IllegalArgumentException e) { - Logging.fine("Invalid value '" + value + "': " + e.getMessage()); - player.setHealth(PlayerStats.HEALTH); + Logging.warning("Invalid value '" + value + "': " + e.getMessage()); + player.setHealth(getMaxHealth(player)); return false; } return true; @@ -257,7 +258,7 @@ public boolean updatePlayer(Player player, ProfileData profile) { private static double getMaxHealth(Player player) { return Option.of(maxHealthAttr).map(player::getAttribute) - .map(AttributeInstance::getValue) + .map(AttributeInstance::getBaseValue) .getOrElse(PlayerStats.MAX_HEALTH); }