From 3b34268ed6758f5415f0098ddfe8a77a6bda1706 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Mon, 8 Nov 2021 19:48:19 +0000 Subject: [PATCH] Human: try to trap this stupid float cast bug in the wild --- src/pocketmine/entity/Human.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/pocketmine/entity/Human.php b/src/pocketmine/entity/Human.php index 5036415bd..835b7baf1 100644 --- a/src/pocketmine/entity/Human.php +++ b/src/pocketmine/entity/Human.php @@ -57,6 +57,7 @@ use pocketmine\network\mcpe\protocol\types\inventory\ItemStackWrapper; use pocketmine\network\mcpe\protocol\types\PlayerListEntry; use pocketmine\network\mcpe\protocol\types\SkinAdapterSingleton; use pocketmine\Player; +use pocketmine\utils\AssumptionFailedError; use pocketmine\utils\UUID; use function array_filter; use function array_merge; @@ -69,6 +70,7 @@ use function max; use function min; use function mt_rand; use function random_int; +use function sprintf; use function strlen; use const INT32_MAX; use const INT32_MIN; @@ -393,7 +395,12 @@ class Human extends Creature implements ProjectileSource, InventoryHolder{ public function setCurrentTotalXp(int $amount) : bool{ $newLevel = ExperienceUtils::getLevelFromXp($amount); - return $this->setXpAndProgress((int) $newLevel, $newLevel - ((int) $newLevel)); + $xpLevel = (int) $newLevel; + $xpProgress = $newLevel - (int) $newLevel; + if($xpProgress > 1.0){ + throw new AssumptionFailedError(sprintf("newLevel - (int) newLevel should never be bigger than 1, but have %.53f (newLevel=%.53f)", $xpProgress, $newLevel)); + } + return $this->setXpAndProgress($xpLevel, $xpProgress); } /**