e4d10a6d67
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 122289ff Add FaceAttachable interface to handle Grindstone facing in common with Switches a6db750e SPIGOT-5647: ZombieVillager entity should have getVillagerType() CraftBukkit Changes: bbe3d58e SPIGOT-5650: Lectern.setPage(int) causes a NullPointerException 3075579f Add FaceAttachable interface to handle Grindstone facing in common with Switches 95bd4238 SPIGOT-5647: ZombieVillager entity should have getVillagerType() 4d975ac3 SPIGOT-5617: setBlockData does not work when NotPlayEvent is called by redstone current
60 lines
2.5 KiB
Diff
60 lines
2.5 KiB
Diff
From 769a0228d72e5f65cdca22bc8b1eb8290804d9a8 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
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 1eca778d31..08d0728e16 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
|
@@ -496,7 +496,13 @@ public abstract class EntityLiving extends Entity {
|
|
|
|
@Override
|
|
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));
|
|
}
|
|
@@ -945,6 +951,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();
|
|
@@ -2739,7 +2749,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 2cdea9f5d0..8688b727a3 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -1584,6 +1584,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
}
|
|
|
|
public void setRealHealth(double health) {
|
|
+ if (Double.isNaN(health)) {return;} // Paper
|
|
this.health = health;
|
|
}
|
|
|
|
--
|
|
2.25.1
|
|
|