mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 07:48:53 +01:00
ef170ee659
--- work/Bukkit Submodule work/Bukkit 6eac6d70..1ef8b9d9: > Add Player#openBook(ItemStack) method --- work/CraftBukkit Submodule work/CraftBukkit 17543ecf..649921e5: > Add Player#openBook(ItemStack) method > SPIGOT-2000: Picking up items to shield slot working inconsistently when inventory is full > SPIGOT-5037: Player.openMerchant does not show merchant level > SPIGOT-5038: Inventory.getHolder returns null for wandering traders --- work/Spigot Submodule work/Spigot baafee91..df0eb250: > SPIGOT-5043: Desync if world is changed in PlayerSpawnLocationEvent > Rebuild patches Implementation developer note: This patch adds a "pre-source" patch system for fixing malformed patches from upstream directly. This seems to keep happening so it's best we have some way to deal with them. This system brings those issues into our domain rather than needing to wait for upstream to fix their malformed files.
60 lines
2.5 KiB
Diff
60 lines
2.5 KiB
Diff
From 66398e620f47e35be76d2c529661ee4b7f207eb0 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 4409588fb..d202d3d65 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
|
@@ -543,7 +543,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));
|
|
}
|
|
@@ -990,6 +996,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();
|
|
@@ -2675,7 +2685,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 8f80582a7..34ae74700 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -1565,6 +1565,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
}
|
|
|
|
public void setRealHealth(double health) {
|
|
+ if (Double.isNaN(health)) {return;} // Paper
|
|
this.health = health;
|
|
}
|
|
|
|
--
|
|
2.21.0
|
|
|