From b57dcebb6fc8c20ef11591c8db7a2e0f41255c4c Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Tue, 16 Jul 2019 19:59:15 +0100 Subject: [PATCH] Living: tighten validity checks on health NBT, don't use generic getValue() (it could return anything) --- src/pocketmine/entity/Living.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/pocketmine/entity/Living.php b/src/pocketmine/entity/Living.php index a8eda74610..853cb9fc64 100644 --- a/src/pocketmine/entity/Living.php +++ b/src/pocketmine/entity/Living.php @@ -44,6 +44,7 @@ use pocketmine\math\VoxelRayTrace; use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\FloatTag; use pocketmine\nbt\tag\ListTag; +use pocketmine\nbt\tag\ShortTag; use pocketmine\network\mcpe\protocol\ActorEventPacket; use pocketmine\network\mcpe\protocol\types\EntityMetadataFlags; use pocketmine\network\mcpe\protocol\types\EntityMetadataProperties; @@ -105,9 +106,10 @@ abstract class Living extends Entity{ if($nbt->hasTag("HealF", FloatTag::class)){ $health = $nbt->getFloat("HealF"); - }elseif($nbt->hasTag("Health")){ - $healthTag = $nbt->getTag("Health"); - $health = (float) $healthTag->getValue(); //Older versions of PocketMine-MP incorrectly saved this as a short instead of a float + }elseif($nbt->hasTag("Health", ShortTag::class)){ + $health = $nbt->getShort("Health"); //Older versions of PocketMine-MP incorrectly saved this as a short instead of a float + }elseif($nbt->hasTag("Health", FloatTag::class)){ + $health = $nbt->getFloat("Health"); } $this->setHealth($health);