From 0ac87989dc12d95fdad1686cc4aa15fd580fe988 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Thu, 2 May 2019 16:08:03 +0100 Subject: [PATCH 1/4] Update RakLib to 0.12.4 --- composer.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.lock b/composer.lock index 31b7775ba..166990518 100644 --- a/composer.lock +++ b/composer.lock @@ -201,16 +201,16 @@ }, { "name": "pocketmine/raklib", - "version": "0.12.3", + "version": "0.12.4", "source": { "type": "git", "url": "https://github.com/pmmp/RakLib.git", - "reference": "9df7dbcdafeb29403af6a7fa22c8785f758a1145" + "reference": "fc1ccc8e61b9033e5372436b2e28a7a95388373f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pmmp/RakLib/zipball/9df7dbcdafeb29403af6a7fa22c8785f758a1145", - "reference": "9df7dbcdafeb29403af6a7fa22c8785f758a1145", + "url": "https://api.github.com/repos/pmmp/RakLib/zipball/fc1ccc8e61b9033e5372436b2e28a7a95388373f", + "reference": "fc1ccc8e61b9033e5372436b2e28a7a95388373f", "shasum": "" }, "require": { @@ -235,10 +235,10 @@ ], "description": "A RakNet server implementation written in PHP", "support": { - "source": "https://github.com/pmmp/RakLib/tree/0.12.3", + "source": "https://github.com/pmmp/RakLib/tree/0.12.4", "issues": "https://github.com/pmmp/RakLib/issues" }, - "time": "2019-04-21T12:15:38+00:00" + "time": "2019-05-02T14:53:51+00:00" }, { "name": "pocketmine/snooze", From de09c8c082b4b999f6a4b2f2817a88b33a75ee45 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Thu, 2 May 2019 16:17:39 +0100 Subject: [PATCH 2/4] Player: fix crash handling resource pack requests --- src/pocketmine/Player.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 2997ce568..d3cb5e5b7 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -2061,7 +2061,13 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ case ResourcePackClientResponsePacket::STATUS_SEND_PACKS: $manager = $this->server->getResourcePackManager(); foreach($packet->packIds as $uuid){ - $pack = $manager->getPackById(substr($uuid, 0, strpos($uuid, "_"))); //dirty hack for mojang's dirty hack for versions + //dirty hack for mojang's dirty hack for versions + $splitPos = strpos($uuid, "_"); + if($splitPos !== false){ + $uuid = substr($uuid, 0, $splitPos); + } + + $pack = $manager->getPackById($uuid); if(!($pack instanceof ResourcePack)){ //Client requested a resource pack but we don't have it available on the server $this->close("", "disconnectionScreen.resourcePack", true); From f6a0f4aa82043effc2713bfc7107b476e28f4b5a Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Thu, 2 May 2019 16:20:28 +0100 Subject: [PATCH 3/4] Player: fixed immobile interference on PlayerJoinEvent closes #2894 this should use a cleaner hack that doesn't affect plugins at all, but that's too much work for this one bug fix. --- src/pocketmine/Player.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index d3cb5e5b7..1dcc52c83 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -1065,6 +1065,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ return; //avoid player spawning twice (this can only happen on 3.x with a custom malicious client) } $this->spawned = true; + $this->setImmobile(false); if($this->hasPermission(Server::BROADCAST_CHANNEL_USERS)){ PermissionManager::getInstance()->subscribeToPermission(Server::BROADCAST_CHANNEL_USERS, $this); @@ -1083,7 +1084,6 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ $this->server->broadcastMessage($ev->getJoinMessage()); } - $this->setImmobile(false); $this->noDamageTicks = 60; foreach($this->usedChunks as $index => $c){ From cb49f1e83529c91b4404d9967fe29e3ed7ddc73f Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Thu, 2 May 2019 16:25:23 +0100 Subject: [PATCH 4/4] fixed air being breakable by creative players closes #2851 --- src/pocketmine/level/Level.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index e70baf6f0..b42ae887e 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -26,6 +26,7 @@ declare(strict_types=1); */ namespace pocketmine\level; +use pocketmine\block\Air; use pocketmine\block\Block; use pocketmine\block\BlockFactory; use pocketmine\entity\Entity; @@ -1797,7 +1798,7 @@ class Level implements ChunkManager, Metadatable{ if($player !== null){ $ev = new BlockBreakEvent($player, $target, $item, $player->isCreative(), $drops, $xpDrop); - if(($player->isSurvival() and !$target->isBreakable($item)) or $player->isSpectator()){ + if($target instanceof Air or ($player->isSurvival() and !$target->isBreakable($item)) or $player->isSpectator()){ $ev->setCancelled(); }elseif($this->checkSpawnProtection($player, $target)){ $ev->setCancelled(); //set it to cancelled so plugins can bypass this