diff --git a/src/event/AsyncEvent.php b/src/event/AsyncEvent.php index 375774485..123376024 100644 --- a/src/event/AsyncEvent.php +++ b/src/event/AsyncEvent.php @@ -45,7 +45,7 @@ abstract class AsyncEvent{ private const MAX_EVENT_CALL_DEPTH = 50; /** - * @phpstan-return Promise + * @phpstan-return Promise */ final public function call() : Promise{ $this->promises = new ObjectSet(); @@ -71,16 +71,16 @@ abstract class AsyncEvent{ } /** - * @phpstan-return Promise + * @phpstan-return Promise */ private function callAsyncDepth() : Promise{ - /** @phpstan-var PromiseResolver $globalResolver */ + /** @phpstan-var PromiseResolver $globalResolver */ $globalResolver = new PromiseResolver(); $priorities = EventPriority::ALL; $testResolve = function () use (&$testResolve, &$priorities, $globalResolver){ if(count($priorities) === 0){ - $globalResolver->resolve(null); + $globalResolver->resolve($this); }else{ $this->callPriority(array_shift($priorities))->onCompletion(function() use ($testResolve) : void{ $testResolve(); diff --git a/src/player/Player.php b/src/player/Player.php index e4c055c56..92e15ddd3 100644 --- a/src/player/Player.php +++ b/src/player/Player.php @@ -51,7 +51,6 @@ use pocketmine\event\player\PlayerBedEnterEvent; use pocketmine\event\player\PlayerBedLeaveEvent; use pocketmine\event\player\PlayerBlockPickEvent; use pocketmine\event\player\PlayerChangeSkinEvent; -use pocketmine\event\player\PlayerChatAsyncEvent; use pocketmine\event\player\PlayerChatEvent; use pocketmine\event\player\PlayerDeathEvent; use pocketmine\event\player\PlayerDisplayNameChangeEvent; @@ -159,7 +158,6 @@ use function strlen; use function strtolower; use function substr; use function trim; -use function var_dump; use const M_PI; use const M_SQRT3; use const PHP_INT_MAX; @@ -1519,19 +1517,6 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{ if(!$ev->isCancelled()){ $this->server->broadcastMessage($ev->getFormatter()->format($ev->getPlayer()->getDisplayName(), $ev->getMessage()), $ev->getRecipients()); } - - $ev = new PlayerChatAsyncEvent( - $this, $messagePart, - $this->server->getBroadcastChannelSubscribers(Server::BROADCAST_CHANNEL_USERS), - new StandardChatFormatter() - ); - $ev->call()->onCompletion(function () use ($ev) { - if(!$ev->isCancelled()){ - $this->server->broadcastMessage($ev->getFormatter()->format($ev->getPlayer()->getDisplayName(), $ev->getMessage()), $ev->getRecipients()); - } - }, function () { - var_dump("Failed to send chat message"); - }); } } } diff --git a/src/plugin/PluginManager.php b/src/plugin/PluginManager.php index 997a5f451..9f3b678de 100644 --- a/src/plugin/PluginManager.php +++ b/src/plugin/PluginManager.php @@ -578,7 +578,7 @@ class PluginManager{ /** @phpstan-var class-string $paramClass */ $paramClass = $paramType->getName(); $eventClass = new \ReflectionClass($paramClass); - if(!$eventClass->isSubclassOf(Event::class)){ + if(!$eventClass->isSubclassOf(Event::class) && !$eventClass->isSubclassOf(AsyncEvent::class)){ return null; } diff --git a/src/promise/Promise.php b/src/promise/Promise.php index ec028a2d3..8ee270749 100644 --- a/src/promise/Promise.php +++ b/src/promise/Promise.php @@ -83,8 +83,10 @@ final class Promise{ function(mixed $value) use ($resolver, $key, &$toResolve, &$continue, &$values) : void{ $values[$key] = $value; - if(--$toResolve === 0 && $continue){ + $toResolve--; + if($toResolve === 0 && $continue){ $resolver->resolve($values); + $continue = false; } }, function() use ($resolver, &$continue) : void{ @@ -100,7 +102,7 @@ final class Promise{ } } - if($toResolve === 0){ + if($toResolve === 0 && $continue){ $continue = false; $resolver->resolve($values); }