From 66fbfdd47b3c7a7951284c05d22d0ed9418e9ca0 Mon Sep 17 00:00:00 2001 From: Irish Date: Sat, 18 Mar 2017 17:58:02 -0400 Subject: [PATCH 1/5] Fixed hunger not saving, resolves 1 of #435 (#439) --- src/pocketmine/entity/Human.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/pocketmine/entity/Human.php b/src/pocketmine/entity/Human.php index 478d99f7b..d9a26d1ee 100644 --- a/src/pocketmine/entity/Human.php +++ b/src/pocketmine/entity/Human.php @@ -408,6 +408,12 @@ class Human extends Creature implements ProjectileSource, InventoryHolder{ public function saveNBT(){ parent::saveNBT(); + + $this->namedtag->foodLevel = new IntTag("foodLevel", $this->getFood()); + $this->namedtag->foodExhaustionLevel = new FloatTag("foodExhaustionLevel", $this->getExhaustion()); + $this->namedtag->foodSaturationLevel = new FloatTag("foodSaturationLevel", $this->getSaturation()); + $this->namedtag->foodTickTimer = new IntTag("foodTickTimer", $this->foodTickTimer); + $this->namedtag->Inventory = new ListTag("Inventory", []); $this->namedtag->Inventory->setTagType(NBT::TAG_Compound); if($this->inventory !== null){ From 4c61ad9f2dd38baaaebbbd4b511ecd918af2857f Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sun, 19 Mar 2017 10:24:33 +0000 Subject: [PATCH 2/5] Stop skipping stack frames (#425) --- src/pocketmine/CrashDump.php | 2 +- src/pocketmine/PocketMine.php | 2 +- src/pocketmine/Server.php | 7 +++---- src/pocketmine/utils/MainLogger.php | 6 ++---- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/pocketmine/CrashDump.php b/src/pocketmine/CrashDump.php index abf7db96b..38188dc38 100644 --- a/src/pocketmine/CrashDump.php +++ b/src/pocketmine/CrashDump.php @@ -143,7 +143,7 @@ class CrashDump{ $error = $lastExceptionError; }else{ $error = (array) error_get_last(); - $error["trace"] = @getTrace(3); + $error["trace"] = getTrace(4); //Skipping CrashDump->baseCrash, CrashDump->construct, Server->crashDump $errorConversion = [ E_ERROR => "E_ERROR", E_WARNING => "E_WARNING", diff --git a/src/pocketmine/PocketMine.php b/src/pocketmine/PocketMine.php index 12aa25c3a..f51f1cca6 100644 --- a/src/pocketmine/PocketMine.php +++ b/src/pocketmine/PocketMine.php @@ -357,7 +357,7 @@ namespace pocketmine { return -1; } - function getTrace($start = 1, $trace = null){ + function getTrace($start = 0, $trace = null){ if($trace === null){ if(function_exists("xdebug_get_function_stack")){ $trace = array_reverse(xdebug_get_function_stack()); diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 8702cb7c2..ac6076821 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -2027,9 +2027,8 @@ class Server{ $errline = $e->getLine(); $type = ($errno === E_ERROR or $errno === E_USER_ERROR) ? \LogLevel::ERROR : (($errno === E_USER_WARNING or $errno === E_WARNING) ? \LogLevel::WARNING : \LogLevel::NOTICE); - if(($pos = strpos($errstr, "\n")) !== false){ - $errstr = substr($errstr, 0, $pos); - } + + $errstr = preg_replace('/\s+/', ' ', trim($errstr)); $errfile = cleanPath($errfile); @@ -2041,7 +2040,7 @@ class Server{ "fullFile" => $e->getFile(), "file" => $errfile, "line" => $errline, - "trace" => @getTrace(1, $trace) + "trace" => getTrace(0, $trace) ]; global $lastExceptionError, $lastError; diff --git a/src/pocketmine/utils/MainLogger.php b/src/pocketmine/utils/MainLogger.php index 7afe1d627..ba69c40d5 100644 --- a/src/pocketmine/utils/MainLogger.php +++ b/src/pocketmine/utils/MainLogger.php @@ -134,12 +134,10 @@ class MainLogger extends \AttachableThreadedLogger{ $type = ($errno === E_ERROR or $errno === E_USER_ERROR) ? LogLevel::ERROR : (($errno === E_USER_WARNING or $errno === E_WARNING) ? LogLevel::WARNING : LogLevel::NOTICE); } $errno = $errorConversion[$errno] ?? $errno; - if(($pos = strpos($errstr, "\n")) !== false){ - $errstr = substr($errstr, 0, $pos); - } + $errstr = preg_replace('/\s+/', ' ', trim($errstr)); $errfile = \pocketmine\cleanPath($errfile); $this->log($type, get_class($e) . ": \"$errstr\" ($errno) in \"$errfile\" at line $errline"); - foreach(@\pocketmine\getTrace(1, $trace) as $i => $line){ + foreach(\pocketmine\getTrace(0, $trace) as $i => $line){ $this->debug($line); } } From 2673e4de7f53f40d97864590be53baa22b46d466 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sun, 19 Mar 2017 11:25:56 +0000 Subject: [PATCH 3/5] More anti-leak measures for double chest inventory issues --- src/pocketmine/tile/Chest.php | 4 ++++ src/pocketmine/tile/Furnace.php | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/pocketmine/tile/Chest.php b/src/pocketmine/tile/Chest.php index 8d6abae94..3bffa58d6 100644 --- a/src/pocketmine/tile/Chest.php +++ b/src/pocketmine/tile/Chest.php @@ -63,6 +63,10 @@ class Chest extends Spawnable implements InventoryHolder, Container, Nameable{ foreach($this->getInventory()->getViewers() as $player){ $player->removeWindow($this->getRealInventory()); } + + $this->inventory = null; + $this->doubleInventory = null; + parent::close(); } } diff --git a/src/pocketmine/tile/Furnace.php b/src/pocketmine/tile/Furnace.php index b97b95adb..637acee47 100644 --- a/src/pocketmine/tile/Furnace.php +++ b/src/pocketmine/tile/Furnace.php @@ -92,6 +92,9 @@ class Furnace extends Spawnable implements InventoryHolder, Container, Nameable{ foreach($this->getInventory()->getViewers() as $player){ $player->removeWindow($this->getInventory()); } + + $this->inventory = null; + parent::close(); } } From 06f2a9c6745f804e4ef68a562853e163bf64ae13 Mon Sep 17 00:00:00 2001 From: Irish Date: Mon, 20 Mar 2017 08:21:58 -0400 Subject: [PATCH 4/5] Fix client-side death bug (#438) --- src/pocketmine/Player.php | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index efaf73312..85c4dc8fd 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -3340,15 +3340,6 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade $this->dataPacket($pk); } - public function setHealth($amount){ - parent::setHealth($amount); - if($this->spawned === true){ - $pk = new SetHealthPacket(); - $pk->health = $this->getHealth(); - $this->dataPacket($pk); - } - } - public function attack($damage, EntityDamageEvent $source){ if(!$this->isAlive()){ return; From b7a3230f7315cd2a4c582589b8deeea01cc005d4 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Mon, 20 Mar 2017 18:54:19 +0000 Subject: [PATCH 5/5] Fixed botched effect override condition for equivalent amplifiers --- src/pocketmine/entity/Entity.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pocketmine/entity/Entity.php b/src/pocketmine/entity/Entity.php index ecef2e7c9..91f9443aa 100644 --- a/src/pocketmine/entity/Entity.php +++ b/src/pocketmine/entity/Entity.php @@ -470,7 +470,7 @@ abstract class Entity extends Location implements Metadatable{ if(isset($this->effects[$effect->getId()])){ $oldEffect = $this->effects[$effect->getId()]; if( - abs($effect->getAmplifier()) <= ($oldEffect->getAmplifier()) + abs($effect->getAmplifier()) < ($oldEffect->getAmplifier()) or (abs($effect->getAmplifier()) === abs($oldEffect->getAmplifier()) and $effect->getDuration() < $oldEffect->getDuration()) ){