Added crafting data packet cache, reduces on-join lag spikes, close #248 (#269)

This commit is contained in:
Dylan K. Taylor
2017-01-23 11:03:46 +00:00
committed by GitHub
parent 21f5be27b6
commit 9c36e0cd1c
3 changed files with 55 additions and 23 deletions

View File

@@ -45,8 +45,6 @@ use pocketmine\event\TranslationContainer;
use pocketmine\inventory\CraftingManager;
use pocketmine\inventory\InventoryType;
use pocketmine\inventory\Recipe;
use pocketmine\inventory\ShapedRecipe;
use pocketmine\inventory\ShapelessRecipe;
use pocketmine\item\enchantment\Enchantment;
use pocketmine\item\Item;
use pocketmine\lang\BaseLang;
@@ -78,7 +76,6 @@ use pocketmine\nbt\tag\StringTag;
use pocketmine\network\CompressBatchedTask;
use pocketmine\network\Network;
use pocketmine\network\protocol\BatchPacket;
use pocketmine\network\protocol\CraftingDataPacket;
use pocketmine\network\protocol\DataPacket;
use pocketmine\network\protocol\Info as ProtocolInfo;
use pocketmine\network\protocol\PlayerListPacket;
@@ -2102,7 +2099,7 @@ class Server{
}
$this->sendFullPlayerListData($player);
$this->sendRecipeList($player);
$player->dataPacket($this->craftingManager->getCraftingDataPacket());
}
public function addPlayer($identifier, Player $player){
@@ -2154,25 +2151,6 @@ class Server{
$p->dataPacket($pk);
}
public function sendRecipeList(Player $p){
$pk = new CraftingDataPacket();
$pk->cleanRecipes = true;
foreach($this->getCraftingManager()->getRecipes() as $recipe){
if($recipe instanceof ShapedRecipe){
$pk->addShapedRecipe($recipe);
}elseif($recipe instanceof ShapelessRecipe){
$pk->addShapelessRecipe($recipe);
}
}
foreach($this->getCraftingManager()->getFurnaceRecipes() as $recipe){
$pk->addFurnaceRecipe($recipe);
}
$p->dataPacket($pk);
}
private function checkTickUpdates($currentTick, $tickTime){
foreach($this->players as $p){
if(!$p->loggedIn and ($tickTime - $p->creationTime) >= 10){