mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-25 12:54:03 +00:00
make PlayerAchievementAwardedEvent less useless
This commit is contained in:
parent
b4df1ac547
commit
556beacdbf
@ -23,8 +23,10 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\event\player;
|
namespace pocketmine\event\player;
|
||||||
|
|
||||||
|
use pocketmine\command\CommandSender;
|
||||||
use pocketmine\event\Cancellable;
|
use pocketmine\event\Cancellable;
|
||||||
use pocketmine\event\CancellableTrait;
|
use pocketmine\event\CancellableTrait;
|
||||||
|
use pocketmine\lang\TextContainer;
|
||||||
use pocketmine\player\Player;
|
use pocketmine\player\Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -35,14 +37,22 @@ class PlayerAchievementAwardedEvent extends PlayerEvent implements Cancellable{
|
|||||||
|
|
||||||
/** @var string */
|
/** @var string */
|
||||||
protected $achievement;
|
protected $achievement;
|
||||||
|
/** @var TextContainer|null */
|
||||||
|
private $message;
|
||||||
|
/** @var CommandSender[] */
|
||||||
|
private $broadcastRecipients;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
* @param string $achievementId
|
* @param string $achievementId
|
||||||
|
* @param TextContainer|null $message
|
||||||
|
* @param CommandSender[] $messageRecipients
|
||||||
*/
|
*/
|
||||||
public function __construct(Player $player, string $achievementId){
|
public function __construct(Player $player, string $achievementId, ?TextContainer $message, array $messageRecipients){
|
||||||
$this->player = $player;
|
$this->player = $player;
|
||||||
$this->achievement = $achievementId;
|
$this->achievement = $achievementId;
|
||||||
|
$this->message = $message;
|
||||||
|
$this->broadcastRecipients = $messageRecipients;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -51,4 +61,32 @@ class PlayerAchievementAwardedEvent extends PlayerEvent implements Cancellable{
|
|||||||
public function getAchievement() : string{
|
public function getAchievement() : string{
|
||||||
return $this->achievement;
|
return $this->achievement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return TextContainer|null
|
||||||
|
*/
|
||||||
|
public function getMessage() : ?TextContainer{
|
||||||
|
return $this->message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param TextContainer|null $message
|
||||||
|
*/
|
||||||
|
public function setMessage(?TextContainer $message) : void{
|
||||||
|
$this->message = $message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return CommandSender[]
|
||||||
|
*/
|
||||||
|
public function getBroadcastRecipients() : array{
|
||||||
|
return $this->broadcastRecipients;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param CommandSender[] $broadcastRecipients
|
||||||
|
*/
|
||||||
|
public function setBroadcastRecipients(array $broadcastRecipients) : void{
|
||||||
|
$this->broadcastRecipients = $broadcastRecipients;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -108,6 +108,7 @@ use pocketmine\world\particle\PunchBlockParticle;
|
|||||||
use pocketmine\world\Position;
|
use pocketmine\world\Position;
|
||||||
use pocketmine\world\World;
|
use pocketmine\world\World;
|
||||||
use function abs;
|
use function abs;
|
||||||
|
use function array_filter;
|
||||||
use function assert;
|
use function assert;
|
||||||
use function ceil;
|
use function ceil;
|
||||||
use function count;
|
use function count;
|
||||||
@ -1146,15 +1147,19 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$ev = new PlayerAchievementAwardedEvent($this, $achievementId);
|
$ev = new PlayerAchievementAwardedEvent(
|
||||||
|
$this,
|
||||||
|
$achievementId,
|
||||||
|
new TranslationContainer("chat.type.achievement", [$this->getDisplayName(), TextFormat::GREEN . Achievement::$list[$achievementId]["name"] . TextFormat::RESET]),
|
||||||
|
$this->server->getConfigBool("announce-player-achievements", true) ? array_filter(PermissionManager::getInstance()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_USERS), function($v){
|
||||||
|
return $v instanceof CommandSender;
|
||||||
|
}) : [$this]
|
||||||
|
);
|
||||||
$ev->call();
|
$ev->call();
|
||||||
if(!$ev->isCancelled()){
|
if(!$ev->isCancelled()){
|
||||||
$this->achievements[$achievementId] = true;
|
$this->achievements[$achievementId] = true;
|
||||||
$translation = new TranslationContainer("chat.type.achievement", [$this->getDisplayName(), TextFormat::GREEN . Achievement::$list[$achievementId]["name"] . TextFormat::RESET]);
|
if(($message = $ev->getMessage()) !== null){
|
||||||
if($this->server->getConfigBool("announce-player-achievements", true)){
|
$this->server->broadcastMessage($message, $ev->getBroadcastRecipients());
|
||||||
$this->server->broadcastMessage($translation);
|
|
||||||
}else{
|
|
||||||
$this->sendMessage($translation);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user