From fed2a6d917f8f2e6ddacdeba9407261bb10d1ee7 Mon Sep 17 00:00:00 2001 From: Armen Deroian Date: Tue, 6 Dec 2022 08:06:40 -0500 Subject: [PATCH] Add the event: WorldSoundEvent (#5322) --- src/event/world/WorldSoundEvent.php | 77 +++++++++++++++++++++++++++++ src/world/World.php | 15 +++++- tests/plugins/DevTools | 2 +- 3 files changed, 91 insertions(+), 3 deletions(-) create mode 100644 src/event/world/WorldSoundEvent.php diff --git a/src/event/world/WorldSoundEvent.php b/src/event/world/WorldSoundEvent.php new file mode 100644 index 000000000..641214e20 --- /dev/null +++ b/src/event/world/WorldSoundEvent.php @@ -0,0 +1,77 @@ +sound; + } + + public function setSound(Sound $sound) : void{ + $this->sound = $sound; + } + + public function getPosition() : Vector3{ + return $this->position; + } + + /** + * @return Player[] + */ + public function getRecipients() : array{ + return $this->recipients; + } + + /** + * @param Player[] $recipients + */ + public function setRecipients(array $recipients) : void{ + $this->recipients = $recipients; + } +} diff --git a/src/world/World.php b/src/world/World.php index b41ba3bb4..42c2a16fa 100644 --- a/src/world/World.php +++ b/src/world/World.php @@ -51,6 +51,7 @@ use pocketmine\event\world\ChunkPopulateEvent; use pocketmine\event\world\ChunkUnloadEvent; use pocketmine\event\world\SpawnChangeEvent; use pocketmine\event\world\WorldSaveEvent; +use pocketmine\event\world\WorldSoundEvent; use pocketmine\item\Item; use pocketmine\item\ItemUseResult; use pocketmine\item\LegacyStringToItemParser; @@ -665,9 +666,19 @@ class World implements ChunkManager{ * @param Player[]|null $players */ public function addSound(Vector3 $pos, Sound $sound, ?array $players = null) : void{ - $pk = $sound->encode($pos); + $players ??= $this->getViewersForPosition($pos); + $ev = new WorldSoundEvent($this, $sound, $pos, $players); + + $ev->call(); + + if($ev->isCancelled()){ + return; + } + + $pk = $ev->getSound()->encode($pos); + $players = $ev->getRecipients(); if(count($pk) > 0){ - if($players === null){ + if($players === $this->getViewersForPosition($pos)){ foreach($pk as $e){ $this->broadcastPacketToViewers($pos, $e); } diff --git a/tests/plugins/DevTools b/tests/plugins/DevTools index bd0fa048d..95921c6d8 160000 --- a/tests/plugins/DevTools +++ b/tests/plugins/DevTools @@ -1 +1 @@ -Subproject commit bd0fa048dae29bebe25ba76d8c58788e92418b67 +Subproject commit 95921c6d877cbe07921a20bcca436db76b0d8bda