mirror of
https://github.com/WiIIiam278/HuskSync.git
synced 2026-01-04 15:31:37 +00:00
Tweak max health syncing calculation, add config option
This commit is contained in:
@@ -810,8 +810,7 @@ public abstract class BukkitData implements Data {
|
||||
public static BukkitData.Health adapt(@NotNull Player player) {
|
||||
return from(
|
||||
player.getHealth(),
|
||||
Objects.requireNonNull(player.getAttribute(Attribute.GENERIC_MAX_HEALTH),
|
||||
"Missing max health attribute").getValue(),
|
||||
getMaxHealth(player),
|
||||
player.getHealthScale()
|
||||
);
|
||||
}
|
||||
@@ -822,9 +821,10 @@ public abstract class BukkitData implements Data {
|
||||
|
||||
// Set base max health
|
||||
final AttributeInstance maxHealthAttribute = Objects.requireNonNull(
|
||||
player.getAttribute(Attribute.GENERIC_MAX_HEALTH), "Missing max health attribute");
|
||||
player.getAttribute(Attribute.GENERIC_MAX_HEALTH), "Max health attribute was null"
|
||||
);
|
||||
double currentMaxHealth = maxHealthAttribute.getBaseValue();
|
||||
if (maxHealth != 0d) {
|
||||
if (plugin.getSettings().doSynchronizeMaxHealth() && maxHealth != 0d) {
|
||||
maxHealthAttribute.setBaseValue(maxHealth);
|
||||
currentMaxHealth = maxHealth;
|
||||
}
|
||||
@@ -853,6 +853,30 @@ public abstract class BukkitData implements Data {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a {@link Player}'s maximum health, minus any health boost effects
|
||||
*
|
||||
* @param player The {@link Player} to get the maximum health of
|
||||
* @return The {@link Player}'s max health
|
||||
*/
|
||||
private static double getMaxHealth(@NotNull Player player) {
|
||||
double maxHealth = Objects.requireNonNull(
|
||||
player.getAttribute(Attribute.GENERIC_MAX_HEALTH), "Max health attribute was null"
|
||||
).getBaseValue();
|
||||
|
||||
// If the player has additional health bonuses from synchronized potion effects,
|
||||
// subtract these from this number as they are synchronized separately
|
||||
if (player.hasPotionEffect(PotionEffectType.HEALTH_BOOST) && maxHealth > 20d) {
|
||||
final PotionEffect healthBoost = Objects.requireNonNull(
|
||||
player.getPotionEffect(PotionEffectType.HEALTH_BOOST), "Health boost effect was null"
|
||||
);
|
||||
final double boostEffect = 4 * (healthBoost.getAmplifier() + 1);
|
||||
maxHealth -= boostEffect;
|
||||
}
|
||||
|
||||
return maxHealth;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getHealth() {
|
||||
return health;
|
||||
|
||||
@@ -177,7 +177,11 @@ public class Settings {
|
||||
|
||||
@YamlComment("(Experimental) Persist Cartography Table locked maps to let them be viewed on any server")
|
||||
@YamlKey("synchronization.persist_locked_maps")
|
||||
private boolean persistLockedMaps = false;
|
||||
private boolean persistLockedMaps = true;
|
||||
|
||||
@YamlComment("Whether to synchronize player max health (requires health syncing to be enabled)")
|
||||
@YamlKey("synchronization.synchronize_max_health")
|
||||
private boolean synchronizeMaxHealth = true;
|
||||
|
||||
@YamlComment("Whether dead players who log out and log in to a different server should have their items saved. "
|
||||
+ "You may need to modify this if you're using the keepInventory gamerule.")
|
||||
@@ -352,6 +356,10 @@ public class Settings {
|
||||
return synchronizeDeadPlayersChangingServer;
|
||||
}
|
||||
|
||||
public boolean doSynchronizeMaxHealth() {
|
||||
return synchronizeMaxHealth;
|
||||
}
|
||||
|
||||
public int getNetworkLatencyMilliseconds() {
|
||||
return networkLatencyMilliseconds;
|
||||
}
|
||||
|
||||
@@ -77,7 +77,9 @@ synchronization:
|
||||
# Where to display sync notifications (ACTION_BAR, CHAT, TOAST or NONE)
|
||||
notification_display_slot: ACTION_BAR
|
||||
# (Experimental) Persist Cartography Table locked maps to let them be viewed on any server
|
||||
persist_locked_maps: false
|
||||
persist_locked_maps: true
|
||||
# Whether to synchronize player max health (requires health syncing to be enabled)
|
||||
synchronize_max_health: true
|
||||
# Whether dead players who log out and log in to a different server should have their items saved. You may need to modify this if you're using the keepInventory gamerule.
|
||||
synchronize_dead_players_changing_server: true
|
||||
# How long, in milliseconds, this server should wait for a response from the redis server before pulling data from the database instead (i.e., if the user did not change servers).
|
||||
|
||||
Reference in New Issue
Block a user