From 0a26bbedcd04bb3f6da1e48107710865af35feed Mon Sep 17 00:00:00 2001 From: Nick Minkler Date: Sun, 2 Jun 2013 14:54:11 +1000 Subject: [PATCH] Fix Health Scaling Fix scaled health sending incorrect values to client. No longer attempts to scale health above maximum. Hopefully fixes 'flash' when player eats food. diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java index f043040..e0bb0a5 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -251,7 +251,10 @@ public abstract class EntityLiving extends Entity { public float getScaledHealth() { if (this.maxHealth != this.getMaxHealth() && this.getHealth() > 0) { - return this.getHealth() * this.getMaxHealth() / this.maxHealth + 1; + // Spigot start + int health = (int) ((((double) this.getHealth()) / this.maxHealth) * this.getMaxHealth()); + return health > 0 ? health : 1; + // Spigot end } else { return this.getHealth(); } diff --git a/src/main/java/net/minecraft/server/FoodMetaData.java b/src/main/java/net/minecraft/server/FoodMetaData.java index 543a430..fcf359b 100644 --- a/src/main/java/net/minecraft/server/FoodMetaData.java +++ b/src/main/java/net/minecraft/server/FoodMetaData.java @@ -39,7 +39,8 @@ public class FoodMetaData { this.foodLevel = event.getFoodLevel(); } - ((EntityPlayer) entityhuman).playerConnection.sendPacket(new Packet8UpdateHealth(entityhuman.getHealth(), this.foodLevel, this.saturationLevel)); + // Spigot - This next line fixes health scaling + ((EntityPlayer) entityhuman).playerConnection.sendPacket(new Packet8UpdateHealth(((EntityPlayer) entityhuman).getScaledHealth(), this.foodLevel, this.saturationLevel)); // CraftBukkit end } } diff --git a/src/main/java/net/minecraft/server/ItemFood.java b/src/main/java/net/minecraft/server/ItemFood.java index 5b77fc7..56eab3f 100644 --- a/src/main/java/net/minecraft/server/ItemFood.java +++ b/src/main/java/net/minecraft/server/ItemFood.java @@ -36,7 +36,8 @@ public class ItemFood extends Item { entityhuman.getFoodData().eat(event.getFoodLevel() - oldFoodLevel, this.getSaturationModifier()); } - ((EntityPlayer) entityhuman).playerConnection.sendPacket(new Packet8UpdateHealth(entityhuman.getHealth(), entityhuman.getFoodData().foodLevel, entityhuman.getFoodData().saturationLevel)); + // Spigot - this next line fixes health scaling + ((EntityPlayer) entityhuman).playerConnection.sendPacket(new Packet8UpdateHealth(((EntityPlayer) entityhuman).getScaledHealth(), entityhuman.getFoodData().foodLevel, entityhuman.getFoodData().saturationLevel)); // CraftBukkit end entityhuman.getFoodData().a(this); -- 1.8.1.2