diff --git a/.travis.yml b/.travis.yml index 7590cb540..4196f2c2e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,9 +6,9 @@ php: before_script: # - pecl install channel://pecl.php.net/pthreads-3.1.6 - echo | pecl install channel://pecl.php.net/yaml-2.0.2 - - git clone https://github.com/krakjoe/pthreads.git + - git clone https://github.com/pmmp/pthreads.git - cd pthreads - - git checkout d32079fb4a88e6e008104d36dbbf0c2dd7deb403 + - git checkout c8cfacda84f21032d6014b53e72bf345ac901dac - phpize - ./configure - make diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index d80804cfb..58f03b5f2 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -2170,7 +2170,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ return false; } - $this->resetCraftingGridType(); + $this->doCloseInventory(); $message = TextFormat::clean($message, $this->removeFormat); foreach(explode("\n", $message) as $messagePart){ @@ -2245,7 +2245,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ if(!$this->spawned or !$this->isAlive()){ return true; } - $this->resetCraftingGridType(); + $this->doCloseInventory(); switch($packet->event){ case EntityEventPacket::EATING_ITEM: @@ -2396,7 +2396,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ return true; case InventoryTransactionPacket::USE_ITEM_ACTION_BREAK_BLOCK: - $this->resetCraftingGridType(); + $this->doCloseInventory(); $item = $this->inventory->getItemInHand(); $oldItem = clone $item; @@ -2656,7 +2656,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ return true; } - $this->resetCraftingGridType(); + $this->doCloseInventory(); $target = $this->level->getEntity($packet->target); if($target === null){ @@ -2870,7 +2870,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ return true; } - $this->resetCraftingGridType(); + $this->doCloseInventory(); if(isset($this->windowIndex[$packet->windowId])){ $this->server->getPluginManager()->callEvent(new InventoryCloseEvent($this->windowIndex[$packet->windowId], $this)); @@ -2920,7 +2920,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ if(!$this->spawned or !$this->isAlive()){ return true; } - $this->resetCraftingGridType(); + $this->doCloseInventory(); $pos = new Vector3($packet->x, $packet->y, $packet->z); if($pos->distanceSquared($this) > 10000 or $this->level->checkSpawnProtection($this, $pos)){ @@ -3640,7 +3640,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ //Crafting grid must always be evacuated even if keep-inventory is true. This dumps the contents into the //main inventory and drops the rest on the ground. - $this->resetCraftingGridType(); + $this->doCloseInventory(); $this->server->getPluginManager()->callEvent($ev = new PlayerDeathEvent($this, $this->getDrops(), new TranslationContainer($message, $params))); @@ -3823,15 +3823,19 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ $this->craftingGrid = $grid; } - public function resetCraftingGridType() : void{ - $contents = $this->craftingGrid->getContents(); - if(count($contents) > 0){ - $drops = $this->inventory->addItem(...$contents); - foreach($drops as $drop){ - $this->dropItem($drop); - } + public function doCloseInventory() : void{ + /** @var Inventory[] $inventories */ + $inventories = [$this->craftingGrid, $this->cursorInventory]; + foreach($inventories as $inventory){ + $contents = $inventory->getContents(); + if(count($contents) > 0){ + $drops = $this->inventory->addItem(...$contents); + foreach($drops as $drop){ + $this->dropItem($drop); + } - $this->craftingGrid->clearAll(); + $inventory->clearAll(); + } } if($this->craftingGrid->getGridWidth() > CraftingGrid::SIZE_SMALL){ diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 0d3c49bff..00aadfa47 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -1627,7 +1627,7 @@ class Level implements ChunkManager, Metadatable{ $spawnLocation = $this->getSpawnLocation(); $s = new Vector2($spawnLocation->x, $spawnLocation->z); - if(count($this->server->getOps()->getAll()) > 0 and $t->distance($s) <= $distance){ + if($t->distance($s) <= $distance){ return true; } }