Всех с прошедшим! У меня тут проблема когда человек пишет в чат, на секунду у него исчезают донаты то есть префикс над головой пропадает,и сообщение отображается как в ванильном формате, например
[Server thread/INFO]: <Comic997%%6> Дарова
А должно быть так:
[Server thread/INFO]: [樑樅樊樄樇] v1rus%%v Win : тест
Проблема в том, что как только игрок пишет что-то,префикс и прочее на миллисекунду пропадает, а потом возвращается, но сообщение остаётся в ‘ванильном виде’
Вот код, Alex.php
<?php
declare(strict_types=1);
namespace MeowChat;
use _64FF00\PurePerms\PurePerms;
use _64FF00\PurePerms\event\PPGroupChangedEvent;
use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener;
use pocketmine\event\player\{PlayerJoinEvent, PlayerChatEvent, PlayerMoveEvent};
use pocketmine\event\entity\EntityDamageEvent;
use pocketmine\event\entity\EntityRegainHealthEvent;
use pocketmine\player\Player;
use pocketmine\utils\{TextFormat as TF, Config};
class Alex extends PluginBase implements Listener {
const DONATE_SITE = "pay.funworld.ru";
const OS_NAMES = [
0 => "Unknown",
1 => "Android",
2 => "iOS",
3 => "macOS",
4 => "Fire",
5 => "GearVR",
6 => "Holo",
7 => "Win",
8 => "Win",
9 => "Dedicated",
10 => "PS",
11 => "Switch",
12 => "Xbox",
13 => "GP",
14 => "Pad"
];
private PurePerms $purePerms;
private Config $config;
public function onEnable(): void {
$this->saveDefaultConfig();
$this->config = $this->getConfig();
$this->getServer()->getPluginManager()->registerEvents($this, $this);
$pp = $this->getServer()->getPluginManager()->getPlugin("PurePerms");
if($pp === null || !$pp->isEnabled()){
$this->getLogger()->critical("PurePerms не найден или выключен! MeowChat отключён.");
$this->getServer()->getPluginManager()->disablePlugin($this);
return;
}
$this->purePerms = $pp;
$this->getScheduler()->scheduleRepeatingTask(new UpdateTask($this), 20);
}
public function onJoin(PlayerJoinEvent $e): void {
$this->updateNameTagAndDisplay($e->getPlayer());
}
public function onChat(PlayerChatEvent $e): void {
$p = $e->getPlayer();
$group = $this->purePerms->getUserDataMgr()->getGroup($p)->getName();
if($this->config->get("MultiWorldChat", true)){
$recipients = [];
foreach($e->getRecipients() as $r){
if($r instanceof Player && $r->getWorld()->getFolderName() === $p->getWorld()->getFolderName()){
$recipients[] = $r;
}
}
$e->setRecipients($recipients);
}
$msg = $e->getMessage();
if(!$p->hasPermission("pchat.colored.chat") && !$p->hasPermission("meow.colors")){
$msg = TF::clean($msg);
}
$format = $this->config->getNested("$group.ChatFormat", "§7[$group] §f{NAME}§8: §f{MSG}");
$format = str_replace(["{MSG}", "{MESSAGE}"], $msg, $format);
$formatted = $this->replace($p, $format);
$e->cancel();
foreach($e->getRecipients() as $recipient){
$recipient->sendMessage($formatted);
}
}
public function onMove(PlayerMoveEvent $e): void {
if($e->getFrom()->getWorld() !== $e->getTo()->getWorld()){
$this->updateNameTagAndDisplay($e->getPlayer());
}
}
public function onDamage(EntityDamageEvent $e): void {
$entity = $e->getEntity();
if($entity instanceof Player){
$this->getScheduler()->scheduleDelayedTask(new \pocketmine\scheduler\ClosureTask(function() use ($entity): void {
if($entity->isConnected()){
$this->updateNameTagAndDisplay($entity);
}
}), 1);
}
}
public function onRegainHealth(EntityRegainHealthEvent $e): void {
$entity = $e->getEntity();
if($entity instanceof Player){
$this->getScheduler()->scheduleDelayedTask(new \pocketmine\scheduler\ClosureTask(function() use ($entity): void {
if($entity->isConnected()){
$this->updateNameTagAndDisplay($entity);
}
}), 1);
}
}
public function onGroupChanged(PPGroupChangedEvent $e): void {
$p = $e->getPlayer();
if($p instanceof Player){
$this->updateNameTagAndDisplay($p);
}
}
public function updateNameTagAndDisplay(Player $p): void {
$group = $this->purePerms->getUserDataMgr()->getGroup($p)->getName();
$opSuffix = $p->hasPermission("pocketmine.group.operator") ? "婗" : "";
$nameTag = $this->replace($p, $this->config->getNested("$group.NameTagFormat", "§7[$group] §f{NAME}"), true, $opSuffix);
$displayName = $this->replace($p, $this->config->getNested("$group.DisplayFormat", $this->config->getNested("$group.NameTagFormat", "§7[$group] §f{NAME}")), true, $opSuffix);
$p->setNameTag($nameTag);
$p->setDisplayName($displayName);
}
public function getPurePerms(): PurePerms {
return $this->purePerms;
}
private function replace(Player $p, string $text, bool $isNameTag = false, string $opSuffix = ""): string {
$name = $p->getName();
$api = $this->getServer()->getPluginManager()->getPlugin("CommandsAPI");
if($api !== null && $api->isEnabled() && method_exists($api, "getDisguise")){
$fake = $api->getDisguise($p);
if($fake !== null) $name = $fake;
}
$title = "";
$titles = $this->getServer()->getPluginManager()->getPlugin("Titles");
if($titles !== null && $titles->isEnabled() && method_exists($titles, "getPlayerTitle")){
$title = $titles->getPlayerTitle($p) ?? "";
}
$faction = $isNameTag ? "§fБез клана" : "";
$clans = $this->getServer()->getPluginManager()->getPlugin("Clans");
if($clans !== null && $clans->isEnabled() && method_exists($clans, "getPlayerClan")){
$clan = $clans->getPlayerClan($p->getName());
if($clan !== null){
$clanName = is_array($clan) ? ($clan["name"] ?? "") : $clan;
if($clanName !== ""){
$faction = "§6$clanName";
}
}
}
$platform = "Unknown";
$ltd = $this->getServer()->getPluginManager()->getPlugin("LimitedWin10");
if($ltd !== null && $ltd->isEnabled() && method_exists($ltd, "getPlatformAsString")){
$platform = $ltd->getPlatformAsString($p);
}
$group = $this->purePerms->getUserDataMgr()->getGroup($p)->getName();
$groupWithOp = $group . $opSuffix;
$replace = [
"{NAME}" => $name,
"{DISPLAY}" => $p->getDisplayName(),
"{TITLE}" => $title,
"{FAC}" => $faction,
"{FACTION}" => $faction,
"{PLATFORM}" => $platform,
"{HEALTH}" => "§c" . (int)$p->getHealth() . "§c❤",
"{MAX_HEALTH}" => (int)$p->getMaxHealth(),
"{WORLD}" => $p->getWorld()->getFolderName(),
"{OS}" => self::OS_NAMES[$p->getPlayerInfo()->getExtraData()["DeviceOS"] ?? 0] ?? "Unknown",
"{PING}" => $p->getNetworkSession()->getPing() . "ms",
"{TPS}" => $this->getServer()->getTicksPerSecond()
];
$result = str_replace(array_keys($replace), array_values($replace), $text);
$result = preg_replace('/\[' . preg_quote($group, '/') . '\]/', "[$groupWithOp]", $result);
return $result;
}
}
Вот UpdateTask.php
<?php
declare(strict_types=1);
namespace MeowChat;
use pocketmine\scheduler\Task;
use pocketmine\player\Player;
class UpdateTask extends Task {
private Alex $plugin;
public function __construct(Alex $plugin){
$this->plugin = $plugin;
}
public function onRun(): void {
foreach($this->plugin->getServer()->getOnlinePlayers() as $player){
if($player instanceof Player && $player->isConnected()){
$this->plugin->updateNameTagAndDisplay($player);
}
}
}
}
Или проблема в pureperms?