diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 0ab6971a9d..d4c4322ddb 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -3471,7 +3471,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ $this->server->getLogger()->logException($e); } - $this->server->getPluginManager()->callEvent($ev = new PlayerQuitEvent($this, $message)); + $this->server->getPluginManager()->callEvent($ev = new PlayerQuitEvent($this, $message, $reason)); if($ev->getQuitMessage() != ""){ $this->server->broadcastMessage($ev->getQuitMessage()); } diff --git a/src/pocketmine/block/Ice.php b/src/pocketmine/block/Ice.php index 3829fa4a6b..85b7be2665 100644 --- a/src/pocketmine/block/Ice.php +++ b/src/pocketmine/block/Ice.php @@ -48,6 +48,10 @@ class Ice extends Transparent{ return 2; } + public function getFrictionFactor() : float{ + return 0.98; + } + public function getToolType() : int{ return Tool::TYPE_PICKAXE; } diff --git a/src/pocketmine/block/PackedIce.php b/src/pocketmine/block/PackedIce.php index b1a77bc57c..38b68f5d06 100644 --- a/src/pocketmine/block/PackedIce.php +++ b/src/pocketmine/block/PackedIce.php @@ -41,6 +41,10 @@ class PackedIce extends Solid{ return 0.5; } + public function getFrictionFactor() : float{ + return 0.98; + } + public function getToolType() : int{ return Tool::TYPE_PICKAXE; } diff --git a/src/pocketmine/event/player/PlayerQuitEvent.php b/src/pocketmine/event/player/PlayerQuitEvent.php index 6397f42b6c..5167ac6407 100644 --- a/src/pocketmine/event/player/PlayerQuitEvent.php +++ b/src/pocketmine/event/player/PlayerQuitEvent.php @@ -34,14 +34,18 @@ class PlayerQuitEvent extends PlayerEvent{ /** @var TranslationContainer|string */ protected $quitMessage; + /** @var string */ + protected $quitReason; /** * @param Player $player * @param TranslationContainer|string $quitMessage + * @param string $quitReason */ - public function __construct(Player $player, $quitMessage){ + public function __construct(Player $player, $quitMessage, string $quitReason){ $this->player = $player; $this->quitMessage = $quitMessage; + $this->quitReason = $quitReason; } /** @@ -57,4 +61,11 @@ class PlayerQuitEvent extends PlayerEvent{ public function getQuitMessage(){ return $this->quitMessage; } + + /** + * @return string + */ + public function getQuitReason() : string{ + return $this->quitReason; + } } diff --git a/src/pocketmine/network/mcpe/protocol/CraftingDataPacket.php b/src/pocketmine/network/mcpe/protocol/CraftingDataPacket.php index 7f8b8d14d2..615410d77d 100644 --- a/src/pocketmine/network/mcpe/protocol/CraftingDataPacket.php +++ b/src/pocketmine/network/mcpe/protocol/CraftingDataPacket.php @@ -48,13 +48,16 @@ class CraftingDataPacket extends DataPacket{ /** @var bool */ public $cleanRecipes = false; + public $decodedEntries = []; + public function clean(){ $this->entries = []; + $this->decodedEntries = []; return parent::clean(); } protected function decodePayload(){ - $entries = []; + $this->decodedEntries = []; $recipeCount = $this->getUnsignedVarInt(); for($i = 0; $i < $recipeCount; ++$i){ $entry = []; @@ -106,7 +109,7 @@ class CraftingDataPacket extends DataPacket{ default: throw new \UnexpectedValueException("Unhandled recipe type $recipeType!"); //do not continue attempting to decode } - $entries[] = $entry; + $this->decodedEntries[] = $entry; } $this->getBool(); //cleanRecipes }