diff --git a/src/entity/object/ItemEntity.php b/src/entity/object/ItemEntity.php index 6ddf055a3..e4550c699 100644 --- a/src/entity/object/ItemEntity.php +++ b/src/entity/object/ItemEntity.php @@ -31,7 +31,6 @@ use pocketmine\item\Item; use pocketmine\nbt\tag\CompoundTag; use pocketmine\network\mcpe\convert\TypeConverter; use pocketmine\network\mcpe\protocol\AddItemActorPacket; -use pocketmine\network\mcpe\protocol\TakeItemActorPacket; use pocketmine\network\mcpe\protocol\types\entity\EntityLegacyIds; use pocketmine\player\Player; use function get_class; @@ -235,7 +234,9 @@ class ItemEntity extends Entity{ return; } - $this->server->broadcastPackets($this->getViewers(), [TakeItemActorPacket::create($player->getId(), $this->getId())]); + foreach($this->getViewers() as $viewer){ + $viewer->getNetworkSession()->onPlayerPickUpItem($player, $this); + } $playerInventory->addItem(clone $item); $this->flagForDespawn(); diff --git a/src/entity/projectile/Arrow.php b/src/entity/projectile/Arrow.php index b0ba0fa7e..86d3acfa9 100644 --- a/src/entity/projectile/Arrow.php +++ b/src/entity/projectile/Arrow.php @@ -31,7 +31,6 @@ use pocketmine\item\VanillaItems; use pocketmine\math\RayTraceResult; use pocketmine\nbt\tag\CompoundTag; use pocketmine\network\mcpe\protocol\ActorEventPacket; -use pocketmine\network\mcpe\protocol\TakeItemActorPacket; use pocketmine\network\mcpe\protocol\types\entity\EntityLegacyIds; use pocketmine\network\mcpe\protocol\types\entity\EntityMetadataFlags; use pocketmine\player\Player; @@ -185,7 +184,9 @@ class Arrow extends Projectile{ return; } - $this->server->broadcastPackets($this->getViewers(), [TakeItemActorPacket::create($player->getId(), $this->getId())]); + foreach($this->getViewers() as $viewer){ + $viewer->getNetworkSession()->onPlayerPickUpItem($player, $this); + } $playerInventory->addItem(clone $item); $this->flagForDespawn(); diff --git a/src/network/mcpe/NetworkSession.php b/src/network/mcpe/NetworkSession.php index 7c47b6763..7f1a78133 100644 --- a/src/network/mcpe/NetworkSession.php +++ b/src/network/mcpe/NetworkSession.php @@ -26,6 +26,7 @@ namespace pocketmine\network\mcpe; use Mdanter\Ecc\Crypto\Key\PublicKeyInterface; use pocketmine\entity\Attribute; use pocketmine\entity\effect\EffectInstance; +use pocketmine\entity\Entity; use pocketmine\entity\Human; use pocketmine\entity\Living; use pocketmine\event\player\PlayerCreationEvent; @@ -72,6 +73,7 @@ use pocketmine\network\mcpe\protocol\ServerToClientHandshakePacket; use pocketmine\network\mcpe\protocol\SetPlayerGameTypePacket; use pocketmine\network\mcpe\protocol\SetSpawnPositionPacket; use pocketmine\network\mcpe\protocol\SetTitlePacket; +use pocketmine\network\mcpe\protocol\TakeItemActorPacket; use pocketmine\network\mcpe\protocol\TextPacket; use pocketmine\network\mcpe\protocol\TransferPacket; use pocketmine\network\mcpe\protocol\types\command\CommandData; @@ -829,6 +831,10 @@ class NetworkSession{ )); } + public function onPlayerPickUpItem(Player $collector, Entity $pickedUp) : void{ + $this->sendDataPacket(TakeItemActorPacket::create($collector->getId(), $pickedUp->getId())); + } + public function syncPlayerList() : void{ $this->sendDataPacket(PlayerListPacket::add(array_map(function(Player $player) : PlayerListEntry{ return PlayerListEntry::createAdditionEntry($player->getUniqueId(), $player->getId(), $player->getDisplayName(), SkinAdapterSingleton::get()->toSkinData($player->getSkin()), $player->getXuid());