From aac00c190d4a8eeee8da837966c91030f594469b Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 2 Jun 2013 14:49:24 +1000 Subject: [PATCH] Add fix for health scaling - courtesy of Sleaker --- .../0045-Fix-Health-Scaling.patch | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 CraftBukkit-Patches/0045-Fix-Health-Scaling.patch diff --git a/CraftBukkit-Patches/0045-Fix-Health-Scaling.patch b/CraftBukkit-Patches/0045-Fix-Health-Scaling.patch new file mode 100644 index 0000000000..30f2d3f555 --- /dev/null +++ b/CraftBukkit-Patches/0045-Fix-Health-Scaling.patch @@ -0,0 +1,54 @@ +From f2a8c9f207bf8e51ce517f8c0ceb647968567b66 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 58a4acb..57d39fe 100644 +--- a/src/main/java/net/minecraft/server/EntityLiving.java ++++ b/src/main/java/net/minecraft/server/EntityLiving.java +@@ -416,7 +416,10 @@ public abstract class EntityLiving extends Entity { + + public int 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 f26d552..8fcdbae 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 409addf..c8a7f41 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 + + world.makeSound(entityhuman, "random.burp", 0.5F, world.random.nextFloat() * 0.1F + 0.9F); +-- +1.8.1.2 +