22declare(strict_types=1);
24namespace pocketmine\network\mcpe;
46use
function array_map;
49use
const SORT_NUMERIC;
53 public function __construct(
61 private function sendDataPacket(array $recipients,
ClientboundPacket $packet) :
void{
62 $this->broadcaster->broadcastPackets($recipients, [$packet]);
66 if(count($attributes) > 0){
69 array_map(fn(
Attribute $attr) =>
new NetworkAttribute($attr->getId(), $attr->getMinValue(), $attr->getMaxValue(), $attr->getValue(), $attr->getDefaultValue(), []), $attributes),
78 ksort($properties, SORT_NUMERIC);
87 EffectIdMap::getInstance()->toId($effect->getType()),
88 $effect->getAmplifier(),
90 $effect->getDuration(),
96 $this->sendDataPacket($recipients,
MobEffectPacket::remove($entity->getId(),
EffectIdMap::getInstance()->toId($effect->getType()), tick: 0));
105 $inv = $mob->getInventory();
106 $this->sendDataPacket($recipients, MobEquipmentPacket::create(
108 ItemStackWrapper::legacy($this->typeConverter->coreItemStackToNet($inv->getItemInHand())),
109 $inv->getHeldItemIndex(),
110 $inv->getHeldItemIndex(),
111 ContainerIds::INVENTORY
116 $inv = $mob->getOffHandInventory();
117 $this->sendDataPacket($recipients, MobEquipmentPacket::create(
119 ItemStackWrapper::legacy($this->typeConverter->coreItemStackToNet($inv->getItem(0))),
122 ContainerIds::OFFHAND
127 $inv = $mob->getArmorInventory();
128 $converter = $this->typeConverter;
129 $this->sendDataPacket($recipients, MobArmorEquipmentPacket::create(
131 ItemStackWrapper::legacy($converter->coreItemStackToNet($inv->getHelmet())),
132 ItemStackWrapper::legacy($converter->coreItemStackToNet($inv->getChestplate())),
133 ItemStackWrapper::legacy($converter->coreItemStackToNet($inv->getLeggings())),
134 ItemStackWrapper::legacy($converter->coreItemStackToNet($inv->getBoots()))
139 $this->sendDataPacket($recipients,
TakeItemActorPacket::create($collector->getId(), $pickedUp->getId()));
142 public function onEmote(array $recipients,
Human $from,
string $emoteId) : void{
onEntityEffectAdded(array $recipients, Living $entity, EffectInstance $effect, bool $replacesOldEffect)
syncAttributes(array $recipients, Living $entity, array $attributes)
onEmote(array $recipients, Human $from, string $emoteId)
syncActorData(array $recipients, Entity $entity, array $properties)
onMobOffHandItemChange(array $recipients, Human $mob)
onMobMainHandItemChange(array $recipients, Human $mob)
onMobArmorChange(array $recipients, Living $mob)
onEntityRemoved(array $recipients, Entity $entity)
onEntityEffectRemoved(array $recipients, Living $entity, EffectInstance $effect)
onPickUpItem(array $recipients, Entity $collector, Entity $pickedUp)
static create(int $actorRuntimeId, array $metadata, PropertySyncData $syncedProperties, int $tick)
static create(int $actorRuntimeId, array $entries, int $tick)