diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 2851195f4..ce1823c3c 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -2133,12 +2133,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade $vector = new Vector3($packet->x, $packet->y, $packet->z); - if($this->isCreative()){ - $item = $this->inventory->getItemInHand(); - }else{ - $item = $this->inventory->getItemInHand(); - } - + $item = $this->inventory->getItemInHand(); $oldItem = clone $item; if($this->canInteract($vector->add(0.5, 0.5, 0.5), $this->isCreative() ? 13 : 6) and $this->level->useBreakOn($vector, $item, $this, true)){ @@ -3314,7 +3309,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade } /** - * TODO: get rid of these remains, fix DataPacketReceiveEvent, fix timings + * Called when a packet is received from the client. This method will call DataPacketReceiveEvent. * * @param DataPacket $packet */ @@ -3323,18 +3318,14 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade return; } - $timings = Timings::getReceiveDataPacketTimings($packet); - $timings->startTiming(); $this->server->getPluginManager()->callEvent($ev = new DataPacketReceiveEvent($this, $packet)); - if($ev->isCancelled()){ - $timings->stopTiming(); - return; + if(!$ev->isCancelled() and !$packet->handle($this)){ + $this->server->getLogger()->debug("Unhandled " . get_class($packet) . " received from " . $this->getName()); } - $timings->stopTiming(); } diff --git a/src/pocketmine/PocketMine.php b/src/pocketmine/PocketMine.php index 9a0269657..9e6d42fac 100644 --- a/src/pocketmine/PocketMine.php +++ b/src/pocketmine/PocketMine.php @@ -431,7 +431,6 @@ namespace pocketmine { "json" => "JSON", "mbstring" => "Multibyte String", "yaml" => "YAML", - "openssl" => "OpenSSL", "sockets" => "Sockets", "zip" => "Zip", "zlib" => "Zlib" diff --git a/src/pocketmine/network/Network.php b/src/pocketmine/network/Network.php index abe41caba..8c6be605c 100644 --- a/src/pocketmine/network/Network.php +++ b/src/pocketmine/network/Network.php @@ -237,10 +237,22 @@ class Network{ return $this->server; } + /** + * Decodes a batch packet and does handling for it. + * + * TODO: Move this out of here + * + * @param BatchPacket $packet + * @param Player $player + * + * @throws \InvalidArgumentException|\InvalidStateException + */ public function processBatch(BatchPacket $packet, Player $p){ - if(strlen($packet->payload) === 0){ - //prevent zlib_decode errors for incorrectly-decoded packets + $rawLen = strlen($packet->payload); + if($rawLen === 0){ throw new \InvalidArgumentException("BatchPacket payload is empty or packet decode error"); + }elseif($rawLen < 3){ + throw new \InvalidArgumentException("Not enough bytes, expected zlib header"); } $str = zlib_decode($packet->payload, 1024 * 1024 * 64); //Max 64MB @@ -264,10 +276,7 @@ class Network{ $pk->decode(); assert($pk->feof(), "Still " . strlen(substr($pk->buffer, $pk->offset)) . " bytes unread in " . get_class($pk)); - if(!$pk->handle($p)){ - $logger = $this->server->getLogger(); - $logger->debug("Unhandled " . get_class($pk) . " received from " . $p->getName()); - } + $p->handleDataPacket($pk); } } } diff --git a/src/pocketmine/network/mcpe/RakLibInterface.php b/src/pocketmine/network/mcpe/RakLibInterface.php index e113174b8..9a5b12275 100644 --- a/src/pocketmine/network/mcpe/RakLibInterface.php +++ b/src/pocketmine/network/mcpe/RakLibInterface.php @@ -135,10 +135,7 @@ class RakLibInterface implements ServerInstance, AdvancedSourceInterface{ if($pk !== null){ $pk->decode(); assert($pk->feof(), "Still " . strlen(substr($pk->buffer, $pk->offset)) . " bytes unread!"); - if(!$pk->handle($this->players[$identifier])){ - $logger = $this->server->getLogger(); - $logger->debug("Unhandled " . get_class($pk) . " received from " . $this->players[$identifier]->getName()); - } + $this->players[$identifier]->handleDataPacket($pk); } } }catch(\Throwable $e){ diff --git a/src/pocketmine/resourcepacks/ZippedResourcePack.php b/src/pocketmine/resourcepacks/ZippedResourcePack.php index 1f49bd8c9..80af52660 100644 --- a/src/pocketmine/resourcepacks/ZippedResourcePack.php +++ b/src/pocketmine/resourcepacks/ZippedResourcePack.php @@ -111,7 +111,7 @@ class ZippedResourcePack implements ResourcePack{ public function getSha256(bool $cached = true) : string{ if($this->sha256 === null or !$cached){ - $this->sha256 = openssl_digest(file_get_contents($this->path), "sha256", true); + $this->sha256 = hash_file("sha256", $this->path, true); } return $this->sha256; }