From 59a51a6c75344ded91218ed4918286694edb708e Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Mon, 13 Aug 2018 16:12:25 +0100 Subject: [PATCH] ArmorInventory: use broadcast for sending armour updates --- src/pocketmine/inventory/ArmorInventory.php | 56 ++++++++++----------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/src/pocketmine/inventory/ArmorInventory.php b/src/pocketmine/inventory/ArmorInventory.php index e9e2815f4..8c279faab 100644 --- a/src/pocketmine/inventory/ArmorInventory.php +++ b/src/pocketmine/inventory/ArmorInventory.php @@ -93,23 +93,21 @@ class ArmorInventory extends BaseInventory{ $target = [$target]; } - $armor = $this->getContents(true); + /** @var Player[] $target */ - $pk = new MobArmorEquipmentPacket(); - $pk->entityRuntimeId = $this->getHolder()->getId(); - $pk->slots = $armor; - - foreach($target as $player){ - /** @var Player $player */ - if($player === $this->getHolder()){ - $pk2 = new InventorySlotPacket(); - $pk2->windowId = $player->getWindowId($this); - $pk2->inventorySlot = $index; - $pk2->item = $this->getItem($index); - $player->sendDataPacket($pk2); - }else{ - $player->sendDataPacket($pk); - } + if(($k = array_search($this->holder, $target, true)) !== false){ + $pk = new InventorySlotPacket(); + $pk->windowId = $target[$k]->getWindowId($this); + $pk->inventorySlot = $index; + $pk->item = $this->getItem($index); + $target[$k]->sendDataPacket($pk); + unset($target[$k]); + } + if(!empty($target)){ + $pk = new MobArmorEquipmentPacket(); + $pk->entityRuntimeId = $this->getHolder()->getId(); + $pk->slots = $this->getContents(true); + $this->holder->getLevel()->getServer()->broadcastPacket($target, $pk); } } @@ -120,20 +118,18 @@ class ArmorInventory extends BaseInventory{ $armor = $this->getContents(true); - $pk = new MobArmorEquipmentPacket(); - $pk->entityRuntimeId = $this->getHolder()->getId(); - $pk->slots = $armor; - - foreach($target as $player){ - /** @var Player $player */ - if($player === $this->getHolder()){ - $pk2 = new InventoryContentPacket(); - $pk2->windowId = $player->getWindowId($this); - $pk2->items = $armor; - $player->sendDataPacket($pk2); - }else{ - $player->sendDataPacket($pk); - } + if(($k = array_search($this->holder, $target, true)) !== false){ + $pk = new InventoryContentPacket(); + $pk->windowId = $target[$k]->getWindowId($this); + $pk->items = $armor; + $target[$k]->sendDataPacket($pk); + unset($target[$k]); + } + if(!empty($target)){ + $pk = new MobArmorEquipmentPacket(); + $pk->entityRuntimeId = $this->getHolder()->getId(); + $pk->slots = $armor; + $this->holder->getLevel()->getServer()->broadcastPacket($target, $pk); } }