mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-21 08:17:34 +00:00
resolve AsyncEvent with self instance
This commit is contained in:
parent
d6b7a9ed45
commit
eb9814197b
@ -45,7 +45,7 @@ abstract class AsyncEvent{
|
||||
private const MAX_EVENT_CALL_DEPTH = 50;
|
||||
|
||||
/**
|
||||
* @phpstan-return Promise<null>
|
||||
* @phpstan-return Promise<self>
|
||||
*/
|
||||
final public function call() : Promise{
|
||||
$this->promises = new ObjectSet();
|
||||
@ -71,16 +71,16 @@ abstract class AsyncEvent{
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-return Promise<null>
|
||||
* @phpstan-return Promise<self>
|
||||
*/
|
||||
private function callAsyncDepth() : Promise{
|
||||
/** @phpstan-var PromiseResolver<null> $globalResolver */
|
||||
/** @phpstan-var PromiseResolver<self> $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();
|
||||
|
@ -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");
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user