mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-14 07:25:31 +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;
|
private const MAX_EVENT_CALL_DEPTH = 50;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @phpstan-return Promise<null>
|
* @phpstan-return Promise<self>
|
||||||
*/
|
*/
|
||||||
final public function call() : Promise{
|
final public function call() : Promise{
|
||||||
$this->promises = new ObjectSet();
|
$this->promises = new ObjectSet();
|
||||||
@ -71,16 +71,16 @@ abstract class AsyncEvent{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @phpstan-return Promise<null>
|
* @phpstan-return Promise<self>
|
||||||
*/
|
*/
|
||||||
private function callAsyncDepth() : Promise{
|
private function callAsyncDepth() : Promise{
|
||||||
/** @phpstan-var PromiseResolver<null> $globalResolver */
|
/** @phpstan-var PromiseResolver<self> $globalResolver */
|
||||||
$globalResolver = new PromiseResolver();
|
$globalResolver = new PromiseResolver();
|
||||||
|
|
||||||
$priorities = EventPriority::ALL;
|
$priorities = EventPriority::ALL;
|
||||||
$testResolve = function () use (&$testResolve, &$priorities, $globalResolver){
|
$testResolve = function () use (&$testResolve, &$priorities, $globalResolver){
|
||||||
if(count($priorities) === 0){
|
if(count($priorities) === 0){
|
||||||
$globalResolver->resolve(null);
|
$globalResolver->resolve($this);
|
||||||
}else{
|
}else{
|
||||||
$this->callPriority(array_shift($priorities))->onCompletion(function() use ($testResolve) : void{
|
$this->callPriority(array_shift($priorities))->onCompletion(function() use ($testResolve) : void{
|
||||||
$testResolve();
|
$testResolve();
|
||||||
|
@ -51,7 +51,6 @@ use pocketmine\event\player\PlayerBedEnterEvent;
|
|||||||
use pocketmine\event\player\PlayerBedLeaveEvent;
|
use pocketmine\event\player\PlayerBedLeaveEvent;
|
||||||
use pocketmine\event\player\PlayerBlockPickEvent;
|
use pocketmine\event\player\PlayerBlockPickEvent;
|
||||||
use pocketmine\event\player\PlayerChangeSkinEvent;
|
use pocketmine\event\player\PlayerChangeSkinEvent;
|
||||||
use pocketmine\event\player\PlayerChatAsyncEvent;
|
|
||||||
use pocketmine\event\player\PlayerChatEvent;
|
use pocketmine\event\player\PlayerChatEvent;
|
||||||
use pocketmine\event\player\PlayerDeathEvent;
|
use pocketmine\event\player\PlayerDeathEvent;
|
||||||
use pocketmine\event\player\PlayerDisplayNameChangeEvent;
|
use pocketmine\event\player\PlayerDisplayNameChangeEvent;
|
||||||
@ -159,7 +158,6 @@ use function strlen;
|
|||||||
use function strtolower;
|
use function strtolower;
|
||||||
use function substr;
|
use function substr;
|
||||||
use function trim;
|
use function trim;
|
||||||
use function var_dump;
|
|
||||||
use const M_PI;
|
use const M_PI;
|
||||||
use const M_SQRT3;
|
use const M_SQRT3;
|
||||||
use const PHP_INT_MAX;
|
use const PHP_INT_MAX;
|
||||||
@ -1519,19 +1517,6 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
|
|||||||
if(!$ev->isCancelled()){
|
if(!$ev->isCancelled()){
|
||||||
$this->server->broadcastMessage($ev->getFormatter()->format($ev->getPlayer()->getDisplayName(), $ev->getMessage()), $ev->getRecipients());
|
$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 */
|
/** @phpstan-var class-string $paramClass */
|
||||||
$paramClass = $paramType->getName();
|
$paramClass = $paramType->getName();
|
||||||
$eventClass = new \ReflectionClass($paramClass);
|
$eventClass = new \ReflectionClass($paramClass);
|
||||||
if(!$eventClass->isSubclassOf(Event::class)){
|
if(!$eventClass->isSubclassOf(Event::class) && !$eventClass->isSubclassOf(AsyncEvent::class)){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,8 +83,10 @@ final class Promise{
|
|||||||
function(mixed $value) use ($resolver, $key, &$toResolve, &$continue, &$values) : void{
|
function(mixed $value) use ($resolver, $key, &$toResolve, &$continue, &$values) : void{
|
||||||
$values[$key] = $value;
|
$values[$key] = $value;
|
||||||
|
|
||||||
if(--$toResolve === 0 && $continue){
|
$toResolve--;
|
||||||
|
if($toResolve === 0 && $continue){
|
||||||
$resolver->resolve($values);
|
$resolver->resolve($values);
|
||||||
|
$continue = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
function() use ($resolver, &$continue) : void{
|
function() use ($resolver, &$continue) : void{
|
||||||
@ -100,7 +102,7 @@ final class Promise{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($toResolve === 0){
|
if($toResolve === 0 && $continue){
|
||||||
$continue = false;
|
$continue = false;
|
||||||
$resolver->resolve($values);
|
$resolver->resolve($values);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user