diff options
Diffstat (limited to 'Spigot-Server-Patches/0079-handle-NaN-health-absorb-values-and-repair-bad-data.patch')
-rw-r--r-- | Spigot-Server-Patches/0079-handle-NaN-health-absorb-values-and-repair-bad-data.patch | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0079-handle-NaN-health-absorb-values-and-repair-bad-data.patch b/Spigot-Server-Patches/0079-handle-NaN-health-absorb-values-and-repair-bad-data.patch new file mode 100644 index 0000000000..72be8681f4 --- /dev/null +++ b/Spigot-Server-Patches/0079-handle-NaN-health-absorb-values-and-repair-bad-data.patch @@ -0,0 +1,60 @@ +From cd0818fe9a15de0585fe4ad9816f44521361de2c Mon Sep 17 00:00:00 2001 +From: Aikar <[email protected]> +Date: Sun, 27 Sep 2015 01:18:02 -0400 +Subject: [PATCH] handle NaN health/absorb values and repair bad data + + +diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java +index 9cb3b22fb..c70f14a15 100644 +--- a/src/main/java/net/minecraft/server/EntityLiving.java ++++ b/src/main/java/net/minecraft/server/EntityLiving.java +@@ -481,7 +481,13 @@ public abstract class EntityLiving extends Entity { + } + + public void a(NBTTagCompound nbttagcompound) { +- this.setAbsorptionHearts(nbttagcompound.getFloat("AbsorptionAmount")); ++ // Paper start - jvm keeps optimizing the setter ++ float absorptionAmount = nbttagcompound.getFloat("AbsorptionAmount"); ++ if (Float.isNaN(absorptionAmount)) { ++ absorptionAmount = 0; ++ } ++ this.setAbsorptionHearts(absorptionAmount); ++ // Paper end + if (nbttagcompound.hasKeyOfType("Attributes", 9) && this.world != null && !this.world.isClientSide) { + GenericAttributes.a(this.getAttributeMap(), nbttagcompound.getList("Attributes", 10)); + } +@@ -780,6 +786,10 @@ public abstract class EntityLiving extends Entity { + } + + public void setHealth(float f) { ++ // Paper start ++ if (Float.isNaN(f)) { f = getMaxHealth(); if (this.valid) { ++ System.err.println("[NAN-HEALTH] " + getName() + " had NaN health set"); ++ } } // Paper end + // CraftBukkit start - Handle scaled health + if (this instanceof EntityPlayer) { + org.bukkit.craftbukkit.entity.CraftPlayer player = ((EntityPlayer) this).getBukkitEntity(); +@@ -2211,7 +2221,7 @@ public abstract class EntityLiving extends Entity { + } + + public void setAbsorptionHearts(float f) { +- if (f < 0.0F) { ++ if (f < 0.0F || Float.isNaN(f)) { // Paper + f = 0.0F; + } + +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +index dd8380f71..0a9e8b9cd 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +@@ -1398,6 +1398,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + } + + public void setRealHealth(double health) { ++ if (Double.isNaN(health)) {return;} // Paper + this.health = health; + } + +-- +2.12.2 + |