From 20df25d3a53ff83addfc2d65faa65df5d2da5476 Mon Sep 17 00:00:00 2001 From: Tamion <70228790+notTamion@users.noreply.github.com> Date: Sat, 8 Mar 2025 21:31:21 +0100 Subject: [PATCH] Don't resync all attributes when updating scaled health (#12232) --- .../bukkit/craftbukkit/entity/CraftPlayer.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index a33c22827..0e0abc233 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -2827,14 +2827,9 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } public void updateScaledHealth(boolean sendHealth) { - AttributeMap attributemapserver = this.getHandle().getAttributes(); - Collection set = attributemapserver.getSyncableAttributes(); - - this.injectScaledMaxHealth(set, true); - // SPIGOT-3813: Attributes before health if (this.getHandle().connection != null) { - this.getHandle().connection.send(new ClientboundUpdateAttributesPacket(this.getHandle().getId(), set)); + this.getHandle().connection.send(new ClientboundUpdateAttributesPacket(this.getHandle().getId(), Set.of(this.getScaledMaxHealth()))); if (sendHealth) { this.sendHealthUpdate(); } @@ -2874,8 +2869,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { break; } } + collection.add(getScaledMaxHealth()); + } + + public AttributeInstance getScaledMaxHealth() { AttributeInstance dummy = new AttributeInstance(Attributes.MAX_HEALTH, (attribute) -> { }); - // Spigot start double healthMod = this.scaledHealth ? this.healthScale : this.getMaxHealth(); if ( healthMod >= Float.MAX_VALUE || healthMod <= 0 ) { @@ -2883,8 +2881,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { this.getServer().getLogger().warning( this.getName() + " tried to crash the server with a large health attribute" ); } dummy.setBaseValue(healthMod); - // Spigot end - collection.add(dummy); + return dummy; } @Override