summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormd_5 <git@md-5.net>2018-02-12 08:59:32 +1100
committermd_5 <git@md-5.net>2018-02-12 08:59:32 +1100
commit8bb4f6ccc150ed89eb522571ed643ad84765ca91 (patch)
tree4b61c36e702129ff5059ff62eb57c2e4531fb554
parent49ecc7c7a28bf0074690ce2f1a02232b7fb2385b (diff)
downloadcraftbukkit-8bb4f6ccc150ed89eb522571ed643ad84765ca91.tar
craftbukkit-8bb4f6ccc150ed89eb522571ed643ad84765ca91.tar.gz
craftbukkit-8bb4f6ccc150ed89eb522571ed643ad84765ca91.tar.lz
craftbukkit-8bb4f6ccc150ed89eb522571ed643ad84765ca91.tar.xz
craftbukkit-8bb4f6ccc150ed89eb522571ed643ad84765ca91.zip
SPIGOT-3813: Player.setHealth not reliable in conjunction with attribute API
-rw-r--r--nms-patches/EntityLiving.patch2
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java7
2 files changed, 6 insertions, 3 deletions
diff --git a/nms-patches/EntityLiving.patch b/nms-patches/EntityLiving.patch
index 1fd9494f..1521d5c8 100644
--- a/nms-patches/EntityLiving.patch
+++ b/nms-patches/EntityLiving.patch
@@ -257,7 +257,7 @@
+ player.setRealHealth(f);
+ }
+
-+ this.datawatcher.set(EntityLiving.HEALTH, Float.valueOf(player.getScaledHealth()));
++ player.updateScaledHealth();
+ return;
+ }
+ // CraftBukkit end
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 20059b94..1866d521 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -1382,9 +1382,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
injectScaledMaxHealth(set, true);
+ // SPIGOT-3813: Attributes before health
+ if (getHandle().playerConnection != null) {
+ getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateAttributes(getHandle().getId(), set));
+ sendHealthUpdate();
+ }
getHandle().getDataWatcher().set(EntityLiving.HEALTH, (float) getScaledHealth());
- sendHealthUpdate();
- getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateAttributes(getHandle().getId(), set));
getHandle().maxHealthCache = getMaxHealth();
}